Kubernetes Ingress

Це завдання описує, як налаштувати Istio для експонування сервісу за межі кластера сервісної мережі, використовуючи Ingress Resource.

Перш ніж почати

Дотримуйтесь інструкцій у розділах Перед початком роботи та Визначення вхідного IP та портів з завдання Ingress Gateways.

Налаштування доступу через Ingress ресурс

Kubernetes Ingress Resources дозволяє експонувати HTTP та HTTPS маршрути ззовні кластера до сервісів всередині кластеру.

Подивімось, як можна налаштувати Ingress на порту 80 для HTTP-трафіку.

  1. Створіть ресурс Ingress:

    $ kubectl apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: istio
      name: ingress
    spec:
      rules:
      - host: httpbin.example.com
        http:
          paths:
          - path: /status
            pathType: Prefix
            backend:
              service:
                name: httpbin
                port:
                  number: 8000
    EOF

    Анотація kubernetes.io/ingress.class необхідна для того, щоб вказати контролеру шлюзу Istio, що він повинен обробляти цей Ingress, інакше він буде проігнорований.

  2. Зверніться до сервісу httpbin за допомогою url:

    $ curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST:$INGRESS_PORT/status/200"
    ...
    HTTP/1.1 200 OK
    ...
    server: istio-envoy
    ...

    Зверніть увагу, що ви використовуєте прапорець -H, щоб встановити HTTP-заголовок Host на “httpbin.example.com”. Це необхідно, оскільки Ingress налаштовано на обробку “httpbin.example.com”, але у вашому тестовому середовищі ви не маєте привʼязки DNS для цього хосту і просто надсилаєте запит на IP-адресу входу.

  3. Перейдіть за будь-якою іншою URL-адресою, яка не була відкрита явно. Ви побачите помилку HTTP 404:

    $ curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST:$INGRESS_PORT/headers"
    HTTP/1.1 404 Not Found
    ...

Наступні кроки

TLS

Ingress підтримує налаштування TLS. Це підтримується Istio, але вказаний Secret повинен існувати в просторі імен розгортання istio-ingressgateway (зазвичай istio-system). Для генерації цих сертифікатів можна використовувати cert-manager.

Налаштування типу шляху

Стандартно Istio обробляє шляхи як точні збіги, якщо вони не закінчуються на /* або .*, в такому випадку вони стають префіксними збігами. Інші регулярні вирази не підтримуються.

У Kubernetes 1.18 було додане нове поле pathType. Це дозволяє явно вказувати шлях як Exact або Prefix.

Налаштування IngressClass

У Kubernetes 1.18 був доданий новий ресурс IngressClass, який замінює анотацію kubernetes.io/ingress.class на ресурсі Ingress. Якщо ви використовуєте цей ресурс, вам потрібно встановити поле controller в istio.io/ingress-controller. Наприклад:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: istio
spec:
  controller: istio.io/ingress-controller
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
spec:
  ingressClassName: istio
  rules:
  - host: httpbin.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: httpbin
            port:
              number: 8000

Очищення

Видаліть конфігурацію Ingress і вимкніть службу httpbin:

Zip
$ kubectl delete ingress ingress
$ kubectl delete --ignore-not-found=true -f @samples/httpbin/httpbin.yaml@
Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!