Kubernetes Ingress
Це завдання описує, як налаштувати Istio для експонування сервісу за межі кластера сервісної мережі, використовуючи Ingress Resource.
Перш ніж почати
Дотримуйтесь інструкцій у розділах Перед початком роботи та Визначення вхідного IP та портів з завдання Ingress Gateways.
Налаштування доступу через Ingress ресурс
Kubernetes Ingress Resources дозволяє експонувати HTTP та HTTPS маршрути ззовні кластера до сервісів всередині кластеру.
Подивімось, як можна налаштувати Ingress на порту 80 для HTTP-трафіку.
Створіть ресурс
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 протягом деякого часу.Зверніться до сервісу 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-адресу входу.Перейдіть за будь-якою іншою 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:
$ kubectl delete ingress ingress
$ kubectl delete ingressclass istio
$ kubectl delete --ignore-not-found=true -f @samples/httpbin/httpbin.yaml@