Публикация приложений и балансировка трафика на прикладном уровне в Deckhouse Kubernetes Platform (DKP) могут выполняться средствами:
- Ingress NGINX Controller (модуль
ingress-nginx); - Kubernetes Gateway API (модуль
alb); - Istio (модуль
istio).
Сравнение вариантов ALB
Ниже описаны особенности каждого варианта ALB и типичные сценарии их использования.
Ingress NGINX
ALB средствами Ingress NGINX Controller построена на базе веб-сервера nginx и реализуется модулем ingress-nginx.
Этот вариант подходит для:
- базовой маршрутизации трафика на основе доменов или URL;
- использования SSL/TLS для защиты трафика.
Kubernetes Gateway API
ALB средствами Kubernetes Gateway API реализуется модулем alb. Шлюзы работают на Envoy Proxy. Приём и маршрутизация описываются стандартными объектами API (Gateway, ListenerSet, HTTPRoute и при необходимости GRPCRoute, TLSRoute, TCPRoute, UDPRoute, BackendTLSPolicy). Контроллер разворачивает инфраструктуру входа и проверяет конфигурацию, чтобы не допускать конфликтующих обработчиков.
Модель Gateway API разделяет ответственность между администратором кластера (ClusterALBInstance), администратором неймспейса (ALBInstance и ListenerSet — hostname, TLS, порты) и разработчиками приложения (HTTPRoute и другие ресурсы маршрутизации).
Используйте этот вариант для:
- публикации приложений в модели Gateway API вместо классического Ingress;
- общекластерной точки входа или отдельного шлюза для приложения или команды в своём неймспейсе;
- маршрутизации HTTP/HTTPS, gRPC, TCP, UDP, а также терминации или сквозной передачи TLS;
- WAF на уровне маршрута или Istio-сайдкара на прокси шлюза;
- GeoIP и OpenTelemetry на шлюзе (настраивает администратор — «Использование GeoIP и GeoLite2» и «Настройка трассировки OpenTelemetry»);
- параметров маршрута, которых нет в спецификации, через аннотации HTTPRoute.
Сравнение с ingress-nginx и пояснения по терминологии — в разделе «Сравнение возможностей модулей ingress-nginx и alb».
Istio
ALB на основе модуля istio поддерживает управление трафиком в service mesh. Используйте этот вариант для:
- маршрутизации для canary deployment и аналогичных сценариев;
- распределения трафика между версиями приложения и микросервисами;
- mTLS для шифрования трафика между подами;
- трассировки запросов.
Как понять, что доступно в кластере
Перед публикацией приложения проверьте, какие механизмы ALB включены и настроены:
-
Убедитесь, что нужный модуль включён — в колонке
STATEдолжно быть значениеEnabled:d8 k get moduleconfig ingress-nginx alb istio -
Для Ingress NGINX — посмотрите ресурсы IngressNginxController и имя IngressClass:
d8 k get ingressnginxcontrollers d8 k get ingressclass -
Для Gateway API — убедитесь, что есть готовый ClusterALBInstance или ALBInstance в состоянии
Ready, затем найдите управляемый Gateway и ListenerSet:d8 k get clusteralbinstances,albinstances --all-namespaces d8 k get gateway,listenerset --all-namespaces -
Для Istio — проверьте IngressIstioController и класс ingress gateway, который сообщит администратор кластера:
d8 k get ingressistiocontrollers
Запросите у администратора кластера ingressClass, имя и неймспейс Gateway или класс Istio ingress для манифестов приложения.
Следующие шаги
После настройки инфраструктуры администратором можно выполнить публикацию приложения:
- средствами Kubernetes Gateway API (модуль
alb); - средствами Ingress NGINX Controller (модуль
ingress-nginx); - средствами Istio (модуль
istio).