Публикация приложений и балансировка трафика на прикладном уровне в Deckhouse Kubernetes Platform (DKP) могут выполняться средствами:

Сравнение вариантов 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 включены и настроены:

  1. Убедитесь, что нужный модуль включён — в колонке STATE должно быть значение Enabled:

    d8 k get moduleconfig ingress-nginx alb istio
    
  2. Для Ingress NGINX — посмотрите ресурсы IngressNginxController и имя IngressClass:

    d8 k get ingressnginxcontrollers
    d8 k get ingressclass
    
  3. Для Gateway API — убедитесь, что есть готовый ClusterALBInstance или ALBInstance в состоянии Ready, затем найдите управляемый Gateway и ListenerSet:

    d8 k get clusteralbinstances,albinstances --all-namespaces
    d8 k get gateway,listenerset --all-namespaces
    
  4. Для Istio — проверьте IngressIstioController и класс ingress gateway, который сообщит администратор кластера:

    d8 k get ingressistiocontrollers
    

Запросите у администратора кластера ingressClass, имя и неймспейс Gateway или класс Istio ingress для манифестов приложения.

Следующие шаги

После настройки инфраструктуры администратором можно выполнить публикацию приложения:

Дополнительные ресурсы