Kubernetes Ingress-контроллер: что это и какой выбрать


Чтобы пользователю мог управлять процессом публикации приложений, задавая параметры балансировщика под свои нужды, в Kubernetesреализовали две сущности: Ingress и IngressController. Вместе они создают единую точку для трафика, выполняя роль прокси и load balancer. При этом внешний балансировщик нагрузки по-прежнему требуется — просто появляется ещё один слой маршрутизация, а распределение трафика становится более гибким.

Kubernetes-ingress-comparison

Ingress-контроллер можно назвать мотором, без которого не заведётся Ingress. Он выбирает, какое приложение будет управлять трафиком. Фактически это набор правил в отдельном кластере Kubernetes, которые отвечают за получение сервисами ваших приложений входящих подключений. В Kubernetes есть штатный Ingress-контроллер, которого достаточно для большинства задач. Но есть и решения от других разработчиков. Давайте посмотрим, что там есть интересного. Для ориентира используем документацию Kubernetes.

Популярные контроллеры

Ingress от Kubernetes

Начнём с официального IngressController. Над его совершенствованием трудится огромное сообщество Kubernetes. Он построен на nginx и обогащён большим комплектом Lua-плагинов, что расширяет функциональность инструмента. Это простой и понятный контроллер, который хорошо конфигурируется и не требует глубоких знаний от технического специалиста.

Ingress от NGINX Inc

Ещё один официальный Ingress-контроллер от крупного вендора. На этот раз — от разработчиков nginx, которые также предлагают и платную версию. Это стабильное решение с обратной совместимостью, высокой скоростью и без Lua-плагинов или других модулей. Бесплатная версия имеет ограниченную функциональность, а в полной реализованы realtime-метрики, JWT-валидация, health check и другие инструменты. Есть поддержка TCP/UDP-трафика.

Kong Ingress

На рынке представлены два продукта от Kong Inc., бесплатный и платный. Построены на nginx в связке с большим количеством Lua-плагинов. Первоначально разрабатывался для обработки и маршрутизации API-запросов, но постепенно разросся из API Gateway до полноценного Ingress-контроллера. Большое количество модулей позволяет конфигурировать решение с самыми разными возможностями. Но и встроенная функциональность хорошо развита. Работает в рамках одного контура, для другого контура нужен ещё один контроллер.

Traefik Kubernetes Ingress

Решение создавалось для маршрутизации запросов микросервисов и их динамической среды. Благодаря этому Traefik получил поддержку разных методов балансировки, обновление конфигураций без перезагрузки, поддержка различных протоколов, REST API, web-интерфейс и ещё много других полезных фич. Traefik сразу из коробки поддерживает сертификаты Let's Encrypt, но для организации высокой доступности нуждается в создании собственного KV-хранилища.

Traefik

HAProxy

Многим известный инструмент, который использовался как прокси и балансировщик трафика. Он быстрый и эффективный с точки зрения потребления ресурсов. HAproxy позволяет выполнять обновление конфигурации без потери трафика, service discovery на основе DNS, поддерживает динамическое конфигурирование через API. Шаблоны конфига полностью кастомизируются через смену CM.

Voyager

Этот Ingress-контроллер создан на базе предыдущего (HAproxy), предлагает большое количество инструментов и настроек. Прекрасно справляется с балансировкой трафика на L7 и L4.

Contour

Проект, созданный вместе с разработчиками популярного прокси Envoy. Позволяет разделять управление ресурсами Ingress через инструмент IngressRoute, что полезно в ситуации, когда отдельные команды разработки пользуются одним кластером. Так защищается трафик в соседних контурах и снижается риск ошибок при использовании ресурсов Ingress. Среди доступных методов балансировки есть зеркалирование запросов, автоповторы, rate-ограничения. Присутствует возможность мониторить трафик и инциденты.

Istio Ingress

Полновесное service mesh-решение. Выполняет функции Ingress-контроллера, контролирует весь трафик в кластере. Решение создано на базе Envoy, и пропагандирует максимальную управляемость, масштабируемость и безопасность. С помощью одного инструмента вы сможете настроить маршрутизацию трафика, авторизацию доступов, балансировку, мониторинг и т. д.

Ambassador

Ещё одно популярное решение, которое тоже содержит Envoy под капотом. Его интересная особенность — «полная совместимость с Kubernetes», что даёт массу плюшек. Например, тесную интеграцию с методами и сущностями кластеров.

Две группы Ingress-контроллеров

Если смотреть обобщённо, можно выделить две группы контроллеров. К первой относятся приложения, заточенные для работы с трафиком специфичных экосистем. Яркий пример: Citrix ingress controller, который работает с Citrix ADC и позволяет доставлять приложения для запуска на bare-metal, внутри контейнеров и ВМ. Некоторые крупные вендоры разрабатывают подобного рода ПО, предлагая его для работы в своих экосистемах.

Универсальные Ingress-контроллеры, которые мы перечислили ранее — это вторая группа. Многие из них базируются на Envoy. В эту же группу входят решения, заточенные под работу в паре с определённым ПО. Например, HAProxy Ingress и Voyager работают в связке с HAProxy, Ingress от NGINX работает с веб-сервером NGINX, а Traefik Kubernetes Ingress — контроллер для Traefik.

Получается, что перед выбором Ingress-контроллера нужно понимать, используется ли в инфраструктуре какое-то ПО, готовое к рабочим нагрузкам того или иного контроллера. Классическое решение от Kubernetes способно закрыть 80-90% задач. Оно доступно, проверено временем и предлагает достаточное количество функций. Также можно присмотреться к opensource-проектам Traefik и HAProxy.

В случае, когда заданы высокие требования к стабильности и уровню фич, когда задействованы высоконагруженные системы, стоит обратить внимание на производительные и более сложные коммерческие решения. Например, на продукты, построенные на базе Envoy.


Полезный материал?
3
2
автор: Всеволод
опубликовано: 13.10.2022
Читайте нас: 
Последние статьи
Вверх!