Бесплатная миграция IT-инфраструктуры в облако

Что такое Ingress-контроллер и как его правильно выбрать

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
13 января 2022 г.
4264
6 минут чтения
Средний рейтинг статьи: 5

Многие знают, что Kubernetes – это система оркестрации. Но даже опытные разработчики не всегда могут четко озвучить разницу между Ingress и Ingress-контроллерами, а также раскрыть логику выбора контроллера.

ingress

Принцип работы Ingress

Ingress — свод правил, в которых описано, как внешний трафик получает доступ к сервисам в кластере. 

Ingress-контроллер — pod (базовый блок Kubernetes), который реализует правила, описанные в Ingress. По сути, это приложение-контроллер.

Эти две сущности не могут работать друг без друга. Можно провести аналогию с мультиваркой, которая использует программу для самостоятельного приготовления блюда. В таком случае Ingress — это программа приготовления, а Ingress-контроллер — сама мультиварка. Без мультиварки программы приготовления не имеют смысла. Без программ приготовления мультиварка такая же функциональная, как пустая кастрюля.

Важный момент: контроллер — это не замена балансировщика нагрузки, а просто еще один уровень маршрутизации, который дает больше гибкости в управлении трафиком.

Типы контроллеров

Контроллеры можно разделить на две большие группы: специальные и универсальные.

К специальным относятся решения, рассчитанные на управление трафиком конкретных систем. Допустим, Citrix ingress controller предназначен для Citrix ADC. Это инструмент для доставки приложений и балансировки нагрузки, который работает внутри контейнеров, виртуальных машин и на bare metal.

Другой пример специального контроллера — AKS Application Gateway Ingress Controller. Он распределяет рабочую нагрузку на Azure.

Универсальным решениям не важна экосистема — можно использовать их хоть на AWS и Azure, хоть на Google Cloud и timeweb.cloud. Однако у них тоже существуют некоторые особенности, которые нужно учитывать при выборе. Например, k8s Ingress Traefik — это контроллер для Traefik, прокси-сервера облачных приложений, а k8s Nginx Ingress — решение, которое работает с веб-сервером Nginx. 

Есть и опенсорсные API-шлюзы, которые умеют контролировать входящий трафик, например Gloo и EnRoute. Они дают больше гибкости, но и взамен требуют больше времени для настройки.

Ingress-контроллеры

Контроллеры реализованы на различном софте. Один из самых простых и популярных среди веб-разработчиков —  Nginx Ingress. Его разрабатывают и поддерживают создатели Kubernetes 19. В большинстве обучающих материалов именно Nginx рекомендуется использовать в качестве контроллера.

Есть также NGINX Ingress для Kubernetes. Это продукт F5 Networks — компании, которая поглотила NGINX Inc. У него есть премиум-версия, разработанная для Kubernetes F5 на NGINX Plus. Среди основных преимуществ — стабильная работа, сохранение обратной совместимости при выпуске новых версий, отсутствие посторонних модулей и высокая скорость благодаря отсутствию Lua-плагинов.

Бесплатная версия урезана даже по сравнению с контроллером от Kubernetes. Зато в премиум-версии много дополнительных функций, например: валидация через JSON-токены, метрики в реалтайме, активные проверки состояния. Кроме того, в обеих версиях есть поддержка TCP/UDP-трафика.

Еще один инструмент контроля трафика на Nginx — Kong. У него тоже доступны бесплатная и премиум-версии. Для расширения стандартных возможностей используются Lua-модули.

Kong был разработан как API Gateway, однако со временем его функциональность расширилась до Ingress-контроллера. Одно из главных преимуществ — большое количество дополнительных модулей. Их легко устанавливать и конфигурировать.

Довольно популярное решение — HAProxy. Это прокси и балансировщик трафика. Основной акцент у этого решения сделан на скорости работы, оптимизации и производительности. Поддерживается много способов балансировки. Привлекает также полная кастомизация конфигурации.

Traefik тоже изначально разрабатывался как прокси для маршрутизации запросов микросервисов и их среды. Это приносит много пользы при использовании инструмента в качестве Ingress-контроллера. Для обновления конфигурации не требуется перезагрузка, поддерживаются разные алгоритмы балансировки и протоколы, есть веб-интерфейс и SSL-сертификаты Let's Encrypt.

Это лишь самые распространенные решения для Kubernetes. Посмотреть другие контроллеры можно в документации.

Критерии выбора

Kong Traefik, Traefik HaProxy, Nginx и EnRoute — всегда будут варианты для реализации распределения трафика. Сделать правильный выбор помогут четкие критерии. 

  1. Какие протоколы поддерживаются, особенно если приложение использует нестандартный HTTP или для его работы требуются сразу несколько протоколов.
  2. Какое программное обеспечение лежит в основе, например: k8s Traefik или Nginx, Envoy, HAProxy. 
  3. Как реализована маршрутизация трафика: обычно используется host/path, однако возможны и другие варианты.
  4. Как реализовано пространство имен внутри кластера. Некоторые контроллеры нужно устанавливать по отдельности в каждое пространство имен, но большинство работает глобально.
  5. Какие способы проверки состояния поддерживаются: активные, пассивные, собственные реализации.
  6. Какие алгоритмы балансировки используются: Least Connections, Round Robin и т.д.
  7. Какая схема аутентификации используется: basic, oauth и т.д.
  8. Как реализовано распределение трафика. Это могут быть A/B-тесты, канареечные релизы, зеркалирование. Очень важный критерий для приложений, которым требуется аккуратное разделение трафика, например, для глубокой аналитики или отладки продуктов в боевых условиях.
  9. Есть ли платная подписка, которая расширяет базовую функциональность или добавляет техническую поддержку.
  10. Есть ли графический интерфейс, который помогает вносить изменения в конфигурацию без работы с исходным кодом.
  11. Есть ли JWT-валидация, которая позволяет авторизовывать и валидировать пользователей по веб-токенам.
  12. Какие существуют возможности для кастомизации конфига, в том числе с помощью собственных директив и флагов.
  13. Какие существуют механизмы защиты от DDoS-атак — это могут быть базовые решения вроде rate limit или более сложные инструменты: белые списки, отсеивание по адресам и т.д.
  14. Есть ли трассировка запросов, которая помогает отслеживать и исправлять запросы от ингрессов к конкретным сервисам/подам, а в идеале и между сервисами/подами.
  15. Поддерживается ли прикладкой фаервол.

Это не исчерпывающий список всех возможных сценариев и вытекающих из них требований, а лишь общие моменты. Для каждого отдельного проекта необходимо учитывать специфику реализации.

Заключение

Ингресс — это правила доступа внешнего трафика внутрь кластера. Контроллеры — это приложения, которые реализуют правила. Чтобы правильно выбрать контроллер, нужно ответить на несколько вопросов:

  • Требуется ли поддержка протоколов TCP, UDP, gRPC сейчас? Может ли она понадобиться в будущем?
  • Какие дополнительные фичи нужны сейчас или могут понадобиться в будущем?
  • Потребуется ли API-шлюз или достаточно стандартных средств контроллера?
  • Есть ли необходимость в коммерческой поддержке или можно справиться своими силами?
  • Какие требования к производительности?

Как и при выстраивании любой системы, сначала важно понять требования к ней. Но есть и несколько универсальных советов. Например, для простых систем можно выбрать практически любой контроллер. Они справляются со стандартными задачами примерно с одинаковой производительностью. У всех контроллеров есть динамическое обнаружение сервисов, поддержка веб-сокетов, SSL-терминирование.

Для высоконагруженных систем стоит уделить внимание производительности и наличию коммерческой поддержки. Это поможет с самого начала выстроить архитектуру, в которой будут невысокие риски простоев.

13 января 2022 г.
4264
6 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев