Создать и настроить балансировщик нагрузки в кластере Managed Kubernetes для Envoy Gateway
После создания кластера Managed Kubernetes мы рекомендуем выполнять все действия с балансировщиками только через kubectl. Изменения, внесенные другим способом, не сохраняются в манифестах Kubernetes. При пересоздании кластера, балансировщика или синхронизации манифестов такие изменения будут отменены.
Балансировщик нагрузки в Managed Kubernetes используется для распределения входящего трафика между подами.
Создать балансировщик нагрузки
1. Проверить квоты
Убедитесь, что в пуле выделена квота минимум на один публичный IP-адрес. Для этого посмотрите потребление квот облачной платформы.
2. Создать EnvoyProxy
-
Создайте yaml-файл с манифестом для объекта EnvoyProxy.
Пример манифеста EnvoyProxy:
---
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
name: custom-proxy-config
namespace: default
spec:
provider:
type: Kubernetes
kubernetes:
envoyService:
externalTrafficPolicy: Cluster
type: LoadBalancer -
Примените манифест:
kubectl apply -f <envoyproxy.yaml>Укажите
<envoyproxy.yaml>— имя yaml-файла с м анифестом для создания объекта EnvoyProxy.
3. Создать GatewayClass
-
Создайте yaml-файл с манифестом для объекта GatewayClass.
Пример манифеста GatewayClass:
---
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: eg
spec:
controllerName: gateway.envoyproxy.io/gatewayclass-controller
parametersRef:
group: gateway.envoyproxy.io
kind: EnvoyProxy
name: custom-proxy-config
namespace: default -
Примените манифест:
kubectl apply -f <gatewayclass.yaml>Укажите
<gatewayclass.yaml>— имя yaml-файла с манифестом для создания объекта GatewayClass.
4. Создать Gateway
-
Создайте yaml-файл с манифестом для объекта Gateway.
Пример манифеста Gateway:
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: eg
spec:
gatewayClassName: eg
infrastructure:
annotations:
loadbalancer.openstack.org/keep-floatingip: "true"
listeners:
- name: http
protocol: HTTP
port: 80В блоке
annotationsможно передать дополнительные параметры для балансировщика нагрузки. В инструкции указаны часто используемые аннотации, которые могут пригодиться при создании балансировщика. -
Примените манифест:
kubectl apply -f <gateway.yaml>Укажите
<gateway.yaml>— имя yaml-файла с манифестом для создания объекта Gateway.
Созданный балансировщик нагрузки появится в панели управления: в верхнем меню нажмите Продукты и выберите Облачные серверы → раздел Балансировщики → вкладка Балансировщики.
Настроить балансировщик нагрузки
Указать флейвор и тип балансировщика
По умолчанию без указания аннотации создается балансировщик нагрузки типа Базовый с резервированием.
Для создания балансировщика с другим типом используйте аннотацию:
loadbalancer.openstack.org/flavor-id: "<flavor_id>"
Укажите <flavor_id> — ID флейвора. Флейворы соответствует типам балансировщика нагрузки и определяют количество vCPU, RAM и количество инстансов балансировщика. Например, ac18763b-1fc5-457d-9fa7-b0d339ffb336 — ID для создания балансировщика с типом Продвинутый с резервированием в пуле ru-9. Вы можете посмотреть список флейворов балансировщика нагрузки во всех пулах в таблице или посмотреть спис ок флейворов балансировщика нагрузки в определенном пуле через OpenStack CLI.
Для созданного балансировщика нельзя изменить тип — нужно создать новый манифест с нужной аннотацией.
Создать балансировщик без публичного IP-адреса
По умолчанию без указания аннотации создается балансировщик с публичным IP-адресом.
Чтобы создать балансировщик без публичного IP-адреса, используйте аннотацию:
service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
Для созданного балансировщика параметр заменить нельзя — нужно создать новый манифест с нужной аннотацией.
Создать балансировщик с IP-адресом из других подсетей
По умолчанию балансировщик создается в одной сети с нодами кластера, и для него выделяется публичный IP-адрес.
Вы можете создать балансировщик в любой другой подсети — публичной, приватной или кросспроектной.
-
Добавьте в манифест аннотацию с указанием подсети:
loadbalancer.openstack.org/subnet-id: "<subnet_uuid>"Укажите
<subnet_uuid>— ID подсети, можно посмотреть с помощьюopenstack subnet list. -
Чтобы автоматически не создался публичный IP-адрес, добавьте аннотацию:
service.beta.kubernetes.io/openstack-internal-load-balancer: "true" -
Чтобы указать IP-адрес балансировщика, измените манифест для объекта EnvoyProxy:
---
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
name: custom-proxy-config
namespace: default
spec:
provider:
type: Kubernetes
kubernetes:
envoyService:
externalTrafficPolicy: Cluster
type: LoadBalancer
loadBalancerIP: "<ip_address>"Укажите
<ip_address>— IP-адрес балансировщика из подсети, которую вы выбрали на шаге 1.Для созданного балансировщика аннотацию заменить нельзя — нужно создать новый манифест с нужной аннотацией.
Добавить настройки соединений
Для управления настройками соединений между входящими запросами и балансировщиком или между балансировщиком и серверами используются аннотации:
- максимум соединений;
- таймаут соединения для входящих запросов;
- таймаут соединения для запросов балансировщика к серверам;
- таймаут неактивности;
- таймаут ожидания TCP.
Настройки соединений задаются для правила балансировщика. Установленные в аннотациях настройки соединений можно посмотреть в панели управления: в верхнем меню нажмите Продукты и выберите Облачные серверы → раздел Балансировщики → вкладка Балансировщики → страница балансировщика → откройте карточку правила → от кройте блок Расширенные настройки правила.
Максимум соединений
Чтобы указать максимум соединений, используйте аннотацию:
loadbalancer.openstack.org/connection-limit: "<value>"
Укажите <value> — максимальное количество соединений в секунду. По умолчанию — "-1" (не ограничено).
Можно обновить параметр в уже созданном балансировщике.
Параметр можно посмотреть в панели управления: в верхнем меню нажмите Продукты и выберите Облачные серверы → раздел Балансировщики → вкладка Балансировщики → страница балансировщика → откройте карточку правила → откройте блок Расширенные настройки правила → блок Входящие на балансировщик запросы → поле Максимум соединений.
Таймаут соединения для входящих запросов
Чтобы указать таймаут соединения для входящих запросов на балансировщик, используйте аннотацию:
loadbalancer.openstack.org/timeout-client-data: "<value>"
Укажите <value> — значение таймаута в миллисекундах. По умолчанию — "50000".
Можно обновить параметр в уже созданном балансировщике.
Параметр можно посмотреть в панели управления: в верхнем меню нажмите Продукты и вы берите Облачные серверы → раздел Балансировщики → вкладка Балансировщики → страница балансировщика → откройте карточку правила → откройте блок Расширенные настройки правила → блок Входящие на балансировщик запросы → поле Таймаут соединения, мс.
Таймаут соединения для запросов балансировщика к серверам
Чтобы указать таймаут соединения для запросов балансировщ ика к серверам, используйте аннотацию:
loadbalancer.openstack.org/timeout-member-connect: "<value>"
Укажите <value> — значение таймаута в миллисекундах. По умолчанию — "5000".
Можно обновить параметр в уже созданном балансировщике.
Параметр можно посмотреть в панели управления: в верхнем меню нажмите Продукты и выберите Облачные серверы → раздел Балансировщики → вкладка Балансировщики → страница балансировщика → откройте карточку правила → откройте блок Расширенные настройки правила → блок Запросы от балансировщика к серверам → поле Таймаут соединения, мс.
Таймаут неактивности
Таймаут неактивности для запросов балансировщика к серверам — это время, в течение которого текущее подключение считается «живым», даже если данные не передаются.
Чтобы указать таймаут неактивности, используйте аннотацию:
loadbalancer.openstack.org/timeout-member-data: "<value>"
Укажите <value> — значение таймаута в миллисекундах. По умолчанию — "50000".
Можно обновить параметр в уже созданном балансировщике.
Параметр можно посмотреть в панели управления: в верхнем меню нажмите Продукты и выберите Облачные серверы → раздел Балансировщики → вкладка Балансировщики → страница балансировщика → откройте карточку правила → откройте блок Расширенные настройки правила → блок Запросы от балансировщика к серверам → поле Таймаут неактивности, мс.
Таймаут ожидания TCP
При установке новой TCP-сессии данные иногда передаются не сразу. Параметр определяет время, в течение которого балансировщик ждет передачи данных для инспекции по уже установленному соединению.
Чтобы указать таймаут ожидания TCP для запросов балансировщика к серверам, используйте аннотацию:
loadbalancer.openstack.org/timeout-tcp-inspect: "<value>"
Укажите <value> — значение таймаута в миллисекундах. По умолчанию — "0".
Можно обновить параметр в уже созданном балансировщике.
Параметр можно посмотреть в панели управления: в верхнем меню нажмите Продукты и выберите Облачные серверы → раздел Балансировщики → вкладка Балансировщики → страница балансировщика → откройте карточку правила → откройте блок Расширенные настройки правила → блок Запросы от балансировщика к серверам → поле Таймаут ожидания TCP, мс.
Включить проверку правил
Чтобы включить или отключить проверку для правил, используйте аннотацию:
loadbalancer.openstack.org/enable-health-monitor: "<value>"
Укажите <value> — "true" для включения или "false" для отключения. Значение по умолчанию — "true".
Можно обновить параметр в уже созданном балансировщике.
Сохранить IP-адрес клиента
Чтобы получать IP-адрес клиента, добавьте заголовок X-Forwarded-For или добавьте правило TCP → PROXY.
Добавить заголовок X-Forwarded-For
Без указания аннотации балансировщик передает серверу только исходное тело HTTP-запроса, заменяя IP-адрес клиента на свой.
Чтобы серверы получали эту информацию для корректной работы или анализа, включите в запрос к серверу заголовок X-Forwarded-For, используйте аннотацию:
loadbalancer.openstack.org/x-forwarded-for: "true"
Правило будет использовать схему HTTP → HTTP вместо TCP → TCP. Если вместо HTTP-протокола необходимо использовать HTTPS, терминируйте TLS-соединение.
Для созданного балансировщика параметр заменить нельзя — нужно создать новый манифест с нужной аннотацией.
Не используйте вместе с PROXY-протоколом. При добавлении правила TCP → Proxy заголовок X-Forwarded-For автоматически попадает на сервис за балансировщиком.
Добавить правило TCP → Proxy
PROXY-протокол используется для передачи информации о соединении от источника, запрашивающего соединение, до пункта назначения, для которого было запрошено соединение.
В логах пода, к которому происходит подключение через балансировщик с правилами TCP → PROXY, будет указан реальный IP-адрес подключающегося, а не адрес балансировщика.
Чтобы создать балансировщик с правилом TCP → PROXY, используйте аннотацию:
loadbalancer.openstack.org/proxy-protocol: "true"
Заголовок X-Forwarded-For автоматически попадет на сервис за балансировщиком. Дополнительных аннотаций для его работы добавлять не нужно.
Для созданного балансировщика параметр заменить нельзя — нужно создать новый манифест с нужной аннотацией.
Сохранить публичный IP-адрес
Чтобы при пересоздании балансировщика сохранить публичный IP-адрес, используйте аннотацию:
loadbalancer.openstack.org/keep-floatingip: "true"
В манифесте объекта EnvoyProxy в поле loadBalancerIP укажите этот или другой публичный IP-адрес:
---
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
name: custom-proxy-config
namespace: default
spec:
provider:
type: Kubernetes
kubernetes:
envoyService:
externalTrafficPolicy: Cluster
type: LoadBalancer
loadBalancerIP: "<ip_address>"
Можно использовать аннотацию для уже созданного балансировщика.