Официальный аккаунт 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…
Любите жизнь, любите эксплуатацию и обслуживание