Kubernetes Ingress

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

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

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

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

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

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

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

    $ kubectl apply -f - <<EOF
    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: /status
            pathType: Prefix
            backend:
              service:
                name: httpbin
                port:
                  number: 8000
    EOF

    Ресурс IngressClass ідентифікує контролер шлюзу Istio для Kubernetes, а значення ingressClassName: istio вказує Kubernetes, що контролер шлюзу Istio повинен обробляти наступний Ingress.

    У старих версіях Ingress API використовувалася анотація kubernetes.io/ingress.class, і хоча вона все ще працює, вона була визнана застарілою в Kubernetes протягом деякого часу.

  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 та Ingress і вимкніть службу httpbin:

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

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