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