Создание сетевого балансировщика с помощью Ingress-контроллера NGINX
При установке Ingress-контроллера NGINX
Перед началом работы
-
Создайте сервисный аккаунт с ролями
editor
,container-registry.images.puller
иload-balancer.admin
на каталог. Рольload-balancer.admin
нужна для создания сетевого балансировщика нагрузки. -
Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Создайте кластер Managed Service for Kubernetes. В настройках кластера укажите сервисный аккаунт и группы безопасности, созданные ранее.
-
Установите менеджер пакетов Helm
версии не ниже 3.8.0. -
Установите kubectl
и настройте его на работу с созданным кластером. -
Настройте Helm для работы с репозиторием NGINX:
-
Добавьте в Helm репозиторий для NGINX:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Результат:
"ingress-nginx" has been added to your repositories
-
Обновите набор данных для создания экземпляра приложения в кластере Managed Service for Kubernetes:
helm repo update
Результат:
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "ingress-nginx" chart repository Update Complete. ⎈Happy Helming!⎈
-
Внешний сетевой балансировщик
Внешний сетевой балансировщик создается при установке Ingress-контроллера NGINX в стандартной конфигурации:
helm install ingress-nginx ingress-nginx/ingress-nginx
Результат:
NAME: ingress-nginx
LAST DEPLOYED: Sun Jul 18 22:35:37 2022
NAMESPACE: default
...
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller'
...
Внутренний сетевой балансировщик
Чтобы установить внутренний сетевой балансировщик:
-
Настройте конфигурацию контроллера
. Для этого создайте конфигурационный файлvalues.yaml
и укажите в нем идентификатор подсети, в которой должен работать сетевой балансировщик:controller: service: external: enabled: false internal: enabled: true annotations: yandex.cloud/load-balancer-type: internal yandex.cloud/subnet-id: <идентификатор_подсети>
-
Установите Ingress-контроллер NGINX, используя конфигурационный файл
values.yaml
:helm install ingress-nginx -f values.yaml ingress-nginx/ingress-nginx
Результат:
NAME: ingress-nginx LAST DEPLOYED: Sun Jul 18 22:55:37 2022 NAMESPACE: default ... The ingress-nginx controller has been installed. It may take a few minutes for the LoadBalancer IP to be available. You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller' ...
Проверьте результат
Чтобы убедиться, что нужный сетевой балансировщик был создан, получите список сетевых балансировщиков в каталоге.
Проброс портов
Несмотря на то, что Ingress-контроллер NGINX официально поддерживает маршрутизацию только внешнего HTTP- и HTTPS-трафика, его можно сконфигурировать на прием и перенаправление внешнего TCP или UDP трафика к внутренним сервисам. Для этого установите Ingress-контроллер, используя конфигурационный файлvalues.yaml
с настройками перенаправления и префиксом portNamePrefix
.
-
Создайте файл
values.yaml
:<протокол>: {<внешний_порт>: "<пространство_имен_сервиса>/<имя_сервиса>:<внутренний_порт>"} portNamePrefix: "<префикс>"
Где
<протокол>
— протокол:tcp
илиudp
. -
Установите Ingress-контроллер NGINX, используя конфигурационный файл
values.yaml
:helm install ingress-nginx -f values.yaml ingress-nginx/ingress-nginx
Пример
Допустим, нужно организовать проброс трафика со следующими параметрами:
- Имя сервиса —
example-go
.- Пространство имен сервиса —
default
.- Внутренний порт сервиса —
8080
.- Внешний порт —
9000
.- Префикс для имени порта —
test
Конфигурационный файл
values.yaml
для такого проброса:
tcp: {9000: "default/example-go:8080"} portNamePrefix: "test"
После установки Ingress-контроллера созданный сетевой балансировщик будет иметь дополнительный обработчик test-9000-tcp
с заданными настройками перенаправления.
Имя порта Ingress-контроллера NGINX и обработчика сетевого балансировщика формируется из настроек перенаправления: <внешний_порт>-<протокол>
. Ограничения Yandex Cloud не допускают цифр в начале имени обработчика, поэтому для правильной настройки необходимо указать префикс portNamePrefix
. Таким образом, имя порта и обработчика будет сформировано как <значение_префикса_portNamePrefix>-<внешний_порт>-<протокол>
.
Имя порта имеет техническое ограничение в 15 символов, а имя обработчика не может начинаться с цифр. Поэтому префикс portNamePrefix
должен:
- Начинаться с букв.
- Иметь длину не более 5-8 символов в зависимости от длины значения внешнего порта.
Чтобы убедиться, что порты проброшены, просмотрите список обработчиков в детальной информации о сетевом балансировщике.