Эта статья опубликована в облачном сообществе Huawei « Что будет публиковать Kubernetes при создании входа?» ", автор: Ты можешь завести друга.
1. Обзор входа
Ingress — это набор правил маршрутизации и пересылки, который предоставляет пользователям внутренние службы кластера через протоколы уровня 7. Это ресурс по умолчанию для k8s. Объект ресурса Ingress используется для определения правил HTTP и HTTPS из внешней сети. Маршрутизация трафика контролируется правилами, определенными в ресурсе Ingress. Это позволяет достичь цели управления и контроля трафика, входящего в кластер.
2. Определения, связанные с входом
Входной ресурс : Ingress — это объект API, обычно настраиваемый через yaml. Его функция заключается в определении правил пересылки запросов в службу, что можно понимать как шаблон конфигурации.
Компонент входного контроллера : входной контроллер (входящий контроллер) управляет трафиком север-юг, запрошенным уровнями L4 и L7, что относится к трафику, входящему в кластер или исходящему из него из-за пределов кластера. Это программа, которая специально реализует обратный прокси-сервер и балансировку нагрузки.Она анализирует правила, определенные Ingress, и реализует пересылку запросов в соответствии с настроенными правилами.
3. Контроллер Ingress «Пусть расцветают сотни цветов»
В настоящее время Ingress признан лучшим способом предоставления сервисов в кластере. Из-за его важного положения в мире существует множество Ingress-контроллеров. Распространенными из них являются:
-
Kubernetes Ingress Nginx
Официально рекомендуемый контроллер Ingress для Kubernetes Ingress, основанный на веб-сервере nginx и дополненный набором Lua-плагинов для дополнительной функциональности. Из-за популярного использования Nginx после миграции приложения на K8S контроллер Ingress является самым простым в использовании контроллером, а стоимость обучения относительно невелика, поэтому рекомендуется использовать его. Однако если файлов конфигурации слишком много, перезагрузка будет очень медленной.
-
Вход Nginx
Nginx Ingress - официальная версия, разработанная NGINX. Она основана на коммерческой версии NGINX Plus. Контроллер NGINX обладает высокой стабильностью, постоянной обратной совместимостью, не имеет сторонних модулей и гарантирует высокую производительность за счет исключения Lua. код.скорость (по сравнению с официальным контроллером). Поддерживает пересылку трафика TCP/UDP. Платная версия имеет широкий набор дополнительных функций. Основным недостатком является отсутствие других функций, таких как методы аутентификации и планирование трафика.
-
Конг Ингресс
Kong Ingress построен на базе NGINX и добавляет модули Lua, расширяющие его функциональность. Раньше Kong концентрировался на шлюзах API, но теперь он стал зрелым контроллером Ingress. По сравнению с официальным контроллером он имеет улучшенные правила сопоставления маршрутизации, восходящие зонды и аутентификацию, а также поддерживает большое количество подключаемых модулей модулей, что делает его легко интегрируется с конфигурацией. Он предоставляет некоторые определения API и сервисов, которые можно абстрагировать в Kubernetes CRD, а статус синхронизации можно передать в кластер Kong посредством конфигурации Kubernetes Ingress.
-
Траефик Ингресс
traefik Ingress — это очень комплексный Ingress, официально называемый: Traefik — это Edge Router, который делает публикацию ваших сервисов увлекательным и простым занятием. Он имеет множество полезных функций: постоянно обновляет конфигурацию (без перезапуска), поддерживает несколько алгоритмов балансировки нагрузки, веб-интерфейс, экспорт метрик, поддерживает различные протоколы, REST API, Canary-версию и т. д. Еще одна приятная особенность — встроенная поддержка Let'sEncrypt. Более того, версия 2.0 уже поддерживает TCP/SSL, канареечное развертывание, зеркалирование/затенение трафика и другие функции, и сообщество очень активно.
-
HAProxy Ingress
Самым большим преимуществом HAProxy среди многих контроллеров является балансировка нагрузки. Он обеспечивает «мягкие» обновления конфигурации (без потери трафика), обнаружение служб на основе DNS и динамическую настройку через API. HAProxy также поддерживает полную настройку шаблонов файлов конфигурации (путем замены ConfigMap) и использование в них функций Spring Boot.
-
АПИСИКС Ингресс
ApiSix Ingress — это новый контроллер Ingress, который в основном ориентирован на Kong Ingress. Он имеет очень мощные возможности маршрутизации, гибкие возможности расширения с помощью плагинов и отличную производительность. В то же время его недостатки также весьма очевидны: хотя APISIX имеет множество функций после открытия исходного кода, ему не хватает примеров реализации и соответствующих документов, которые бы помогали всем, как использовать эти функции.
4. Анализ ингресса по принципу nginx
Модуль nginx-ingress во время выполнения в основном включает в себя три объекта: NginxController, Store и SyncQueue.
Store в основном отвечает за сбор информации о времени выполнения от API-сервера kubernetes, обнаружение изменений в различных ресурсах (таких как вход, сервис и т. д.) и своевременную запись сообщений о событиях обновления (событий) в кольцевой конвейер;
В качестве промежуточного контакта NginxController прослушивает updateChannel и, получив событие обновления конфигурации, записывает запрос на обновление в очередь синхронизации syncQueue.
СинкКеуе :
- Сопрограмма регулярно сканирует очередь syncQueue и выполняет операции обновления при обнаружении задач.
- Используйте хранилище для завершения получения последних текущих данных (обычно недавно записанной информации).
Затем сгенерируйте новую конфигурацию nginx по определенным правилам (некоторые обновления должны быть перезагружены, поэтому напишите новую конфигурацию локально и выполните перезагрузку), а затем выполните операцию динамического обновления, то есть создайте POST-данные, отправьте почтовый запрос на локальный сервер. Сервисный модуль Nginx Lua и внедрение обновлений конфигурации;
Lua — это легкий и компактный язык сценариев, написанный на стандартном языке C и открытый в виде исходного кода.Он предназначен для встраивания в приложения и обеспечивает гибкие функции расширения и настройки приложений. Входной контроллер nginx встраивает несколько сценариев Lua. Ниже приводится краткий обзор всего процесса обработки сценариев Lua.
-
init_by_lua*: инициализировать nginx и предварительно загрузить lua (выполняется при запуске и перезагрузке nginx);
-
init_worker_by_lua* : выполняется при создании каждого рабочего процесса (worker_processes), используется для запуска некоторых запланированных задач.
Например, проверка пульса, проверка работоспособности серверных служб, регулярное получение конфигурации сервера и т. д.;
-
ssl_certificate_by_lua* : обработка https-запросов, выполняемая перед запуском SSL-подтверждения нисходящего SSL-соединения (https).Сценарий использования: установка цепочки сертификатов SSL и соответствующего закрытого ключа в соответствии с каждым запросом, выборочное отклонение запросов в соответствии с протокол SSL и т. д.;
-
set_by_lua* : установить переменные nginx;
-
rewrite_by_lua* : перезаписать запрос (введенный на этапе перезаписи собственного nginx), выполнить внутреннюю перезапись URL-адресов или внешнее перенаправление, обычно такое как псевдостатическое перезапись URL-адресов;
-
access_by_lua* : обработка запросов (может выполнять ту же функцию, что и rewrite_by_lua, входя с фазы доступа собственного nginx);
-
content_by_lua* : выполнять бизнес-логику и генерировать ответы, аналогично сервлетам в jsp;
-
Balancer_by_lua* : балансировка нагрузки;
-
header_filter_by_lua* : Заголовки ответа процесса;
-
body_filter_by_lua* : Обработать тело ответа;
-
log_by_lua* : записывать журналы доступа
Нажмите, чтобы подписаться и узнать о новых технологиях Huawei Cloud как можно скорее~
Дважды произошел сбой Bilibili, авария первого уровня Tencent «3.29»… Подведение итогов десяти крупнейших аварий с простоями в 2023 году. Vue 3.4 «Slam Dunk» выпустил MySQL 5.7, Moqu, Li Tiaotiao… Подведение итогов «остановки» в 2023 году Подробнее (с открытым исходным кодом) проекты и веб-сайты оглядываются на IDE 30-летней давности: только TUI, яркий цвет фона... Выпущен Vim 9.1, посвященный Брэму Муленаару, отцу Redis, "Rapid Review" LLM Programming: Omniscient и Всемогущий&& Глупый «Пост-открытый исходный код». Наступила эра: срок действия лицензии истек, и она не может обслуживать широкую публику. China Unicom Broadband внезапно ограничила скорость загрузки, и большое количество пользователей пожаловались. Руководители Windows пообещали улучшения: сделайте начало Меню снова великолепное. Скончался Никлаус Вирт, отец Паскаля.