Контроллеров Ingress так много, какой выбрать?

задняя часть Kubernetes

Официальный аккаунт WeChat: История развития эксплуатации и обслуживания, Автор: Шутка

В Kubernetes сервисный IP и Pod IP в основном используются для внутреннего доступа кластера и невидимы снаружи кластера.

Если вы хотите получить доступ из-за пределов кластера, обычно используются следующие три метода.

(1) Через NodePort

Как показано ниже:

图片

image.png

Мы игнорируем конкретные детали реализации и используем NodePort для сопоставления портов на всех узлах Node.Диапазон портов по умолчанию — 30000-32767. Затем пользователь проходит任意主机+映射端口для доступа внутрь кластера.

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

(2) С помощью метода LoadBalancer

Как показано ниже:

图片

image.png

Из рисунка видно, что сервис Load Balancer выставляет сервис очень напрямую, напрямую выставляя сервис в интернет, и трафик на указанный порт будет перенаправляться в соответствующий сервис, у него нет ни условий фильтрации, ни правил, и Т. Д.

Самым большим недостатком этого метода является то, что каждому LoadBalancer нужен фиксированный IP, а в большинстве случаев ему нужна поддержка производителей облачных сервисов.

(3) Через вход

Как показано ниже:

图片

image.png

Сам по себе Ingress сервисов не предоставляет, он опирается на Ingress Controller. Ingress Controller развернут в кластере Kubernetes в виде Pod. По сути, мы не можем напрямую получить к нему доступ извне, и нам все равно приходится его выставлять. Выявить его можно несколькими способами:

  • Он предоставляется в виде NodePort, и перед ним необходимо подключить балансировщик нагрузки.

  • Он предоставляется в виде LoadBalancer, который используется производителями облачных вычислений по умолчанию.

  • Используйте hostport прямо в Pod, перед ним нужно подключить балансировщик нагрузки

Реализация входа более умная и удобная, а относительная конфигурация немного сложнее.Один IP-адрес может предоставлять доступ к нескольким приложениям, поддерживать разные URI для одного и того же доменного имени и поддерживать такие функции, как сертификаты.

В настоящее время Ingress признан лучшим способом предоставления сервисов в кластере, однако из-за его важного положения в мире существует множество контроллеров Ingres.

  • Kubernetes Ingress

  • Nginx Ingress

  • Kong Ingress

  • Traefik Ingress

  • HAProxy Ingress

  • Istio Ingress

  • APISIX Ingress

В дополнение к перечисленным выше, существует множество Ingress-контроллеров. Столкнувшись с таким количеством Ingress-контроллеров, что нам выбрать? Что такое эталонный стандарт?

Обычно об этом можно судить по следующим параметрам:

  • Поддерживаемые протоколы: следует ли поддерживать протоколы, отличные от HTTP(S)

  • Правила маршрутизации: какие существуют правила переадресации и поддерживаются ли обычные правила

  • Стратегия развертывания: следует ли поддерживать развертывание ab, канареечное развертывание, сине-зеленое развертывание и т. д.

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

  • Алгоритм балансировки нагрузки: какие алгоритмы балансировки нагрузки поддерживаются, например, хеширование, сохранение сеанса, RR, WRR и т. д.

  • Метод аутентификации: Какие схемы авторизации поддерживаются? Базовая, дайджест, OAuth, внешняя аутентификация и т. д.

  • Возможности защиты от DDoS: поддерживать ли базовое ограничение скорости, белый список и т. д.

  • Полное отслеживание ссылок: можно ли получить доступ к полному отслеживанию ссылок в обычном режиме.

  • Проверка JWT: есть ли встроенная проверка веб-токена JSON для проверки и проверки пользователей конечного приложения.

  • Графический интерфейс: требуется ли графический интерфейс

  • Пользовательская расширяемость: легко ли расширить

Ниже приведено краткое введение в вышеупомянутый Ingress Controller.

Kubernetes Ingress

github.com/kubernetes/ingress-nginx

Официально рекомендованный контроллер Ingress для Kubernetes Ingress, который основан на веб-сервере nginx и дополнен набором плагинов Lua для дополнительной функциональности.

Из-за популярного использования Nginx после переноса приложения на K8S контроллер Ingress является самым простым в использовании контроллером, а стоимость обучения относительно невелика.Если у вас не высокие требования к возможностям контроллера, рекомендуется использовать его.

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

Nginx Ingress

github.com/nginxinc/kubernetes-ingress

Nginx Ingress — официальная версия, разработанная NGINX, она основана на коммерческой версии NGINX Plus, контроллер NGINX обладает высокой стабильностью, постоянной обратной совместимостью, без каких-либо сторонних модулей и высокими гарантиями за счет устранения скорости кода Lua ( по сравнению с официальным контроллером).

По сравнению с официальным контроллером поддерживает переадресацию трафика TCP/UDP Платная версия обладает большим набором дополнительных функций Основной недостаток в том, что в ней отсутствуют другие функции, такие как режим аутентификации и планирование трафика.

Kong Ingress

github.com/Kong/kubernetes-ingress-controller

Kong Ingress построен на основе NGINX и включает модули Lua, которые расширяют его функциональность.

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

Он предоставляет некоторые определения API и сервисов, которые можно абстрагировать в CRD Kubernetes и синхронизировать с кластером Kong через конфигурацию Kubernetes Ingress.

Traefik Ingress

github.com/containous/traefik

traefik Ingress — это полнофункциональный Ingress, официально называемый: Traefik — это пограничный маршрутизатор, который делает публикацию ваших сервисов веселой и легкой.

Он имеет множество полезных функций: конфигурация с непрерывным обновлением (без перезагрузки), поддержка нескольких алгоритмов балансировки нагрузки, веб-интерфейс, экспорт метрик, поддержка различных протоколов, REST API, Canary-версия и т. д. Готовая поддержка «Let’s Encrypt» — еще одна приятная функция. А в версии 2.0 поддерживаются такие функции, как TCP/SSL, канареечное развертывание и зеркалирование/теневое копирование трафика, и сообщество очень активно.

Istio Ingress

istio.io/docs/tasks/traffic-management/ingress

Istio — это совместный проект IBM, Google и Lyft (первоначальные авторы Envoy), представляющий собой комплексное решение для сервисной сети. Он не только управляет всем входящим внешним трафиком (как Ingress-контроллер), но и контролирует весь трафик внутри кластера. За кулисами Istio использует Envoy в качестве вторичного прокси для каждого сервиса. По сути, это массивный процессор, который может делать практически все. Его основные идеи — максимальный контроль, масштабируемость, безопасность и прозрачность.

С помощью Istio Ingress вы можете точно настроить маршрутизацию трафика, авторизацию доступа между сервисами, балансировку, мониторинг, канареечную публикацию и многое другое.

Однако теперь сообщество рекомендует использовать Ingress Gateways.

HAProxy Ingress

github.com/jcmoraisjr/haproxy-ingress

Самым большим преимуществом HAProxy среди многих контроллеров как балансировщика нагрузки является балансировка нагрузки.

Он обеспечивает «мягкие» обновления конфигурации (без потери трафика), обнаружение служб на основе DNS и динамическую настройку через API. HAProxy также поддерживает полную настройку шаблонов файлов конфигурации (путем замены ConfigMaps) и использование в них функций Spring Boot.

APISIX Ingress

github.com/api7/ingress-controller

ApiSix Ingress — это новый контроллер Ingress, который в основном нацелен на Kong Ingress.

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

Вот сравнительная таблица:

图片

Изображение взято из обмена облачным сообществом Tencent.

Вот более полное сравнение:docs.Google.com/spreadsheet…

напиши в конце

У каждого контроллера есть свои преимущества и недостатки.Помимо ссылки на приведенные выше стандарты, вы также должны учитывать:

  • Технологический стек и возможности технического обслуживания

  • Реальные потребности бизнеса компании

Тот, который устраивает компанию, тот самый лучший, и все используется не ради использования, а используется из-за необходимости.

Ссылка на ссылку:

Официальный аккаунт: история развития эксплуатации и обслуживания

гитхаб:GitHub.com/org is/Sunsha…

Любите жизнь, любите эксплуатацию и обслуживание