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@