Настроить балансировщик нагрузки
Балансировщик нагрузки в Managed Kubernetes используется для распределения входящего трафика между подами.
Мы рекомендуем после создания кластера Managed Kubernetes производить все действия с балансировщиками и дисками кластера только через kubectl.
Создать балансировщик нагрузки
Создай манифест с Service типа LoadBalancer
.
Пример манифеста:
apiVersion: v1
kind: Service
metadata:
name: loadbalancer-name
labels:
app: nginx
annotations:
loadbalancer.openstack.org/keep-floatingip: "true"
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- port: 80
protocol: TCP
Все дополнительные параметры для балансировщика передаются в блоке annotations
— в инструкции указаны часто используемые аннотации, которые могут пригодиться при создании балансировщика или, в некоторых случаях, для уже созданного балансировщика.
Созданный балансировщик нагрузки появится в панели управления в разделе "Балансировщик нагрузки".
Указать флейвор и тип балансировщика
По умолчанию без указания аннотации создается балансировщик нагрузки с типом Базовый с резервированием.
Для создания балансировщика с другим типом используй аннотацию:
loadbalancer.openstack.org/flavor-id: "<flavor_id>"
Укажи <flavor_ID>
— ID типа балансировщика нагрузки (флейвора). Cписок флейворов и стоимость можно посмотреть ниже:
Базовый без резервирования | Базовый с резервированием | Продвинутый с резервированием | |
---|---|---|---|
ID | 3265f75f-01eb-456d-9088-44b813d29a60 | d3b8898c-af94-47f8-9996-65b9c6aa95e2 | ac18763b-1fc5-457d-9fa7-b0d339ffb336 |
Цена | 872₽/мес | 1627₽/мес | 2707₽/мес |
В созданном балансировщике нельзя изменить тип — нужно создать новый манифест с нужной аннотацией.
Создать балансировщик без публичного IP-адреса
По умолчанию без указания аннотации создается балансировщик с публичным IP-адресом.
Чтобы создать балансировщик без публичного IP-адреса, используй аннотацию:
service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
В созданном балансировщике параметр заменить нельзя — нужно создать новый манифест с нужной аннотацией.
Создать балансировщик с IP-адресом из других подсетей
По умолчанию балансировщик создается в одной сети с нодами кластера, и для него выделяется публичный IP-адрес.
Добавьте в манифест аннотацию:
loadbalancer.openstack.org/subnet-id: "<subnet_id>"
Укажи
<subnet_id>
— ID подсети, можно посмотреть с помощью командыopenstack subnet list
Чтобы автоматически не создался публичный IP-адрес, добавь аннотацию:
service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
Укажи в поле
loadBalancerIP
IP-адрес из указанной подсети:spec:
type: LoadBalancer
selector:
app: nginx
ports:
- port: 80
protocol: TCP
name: http
loadBalancerIP: "<IP_address>"В созданном балансировщике аннотацию заменить нельзя — нужно создать новый манифест с нужной аннотацией.
Добавить параметры соединений
Для управления параметрами соединений к балансировщику или между балансировщиком и серверами используются аннотации:
- максимум соединений
- таймаут соединения для входящих запросов
- таймаут соединения для запросов балансировщика к серверам
- таймаут неактивности
- таймаут ожидания 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"
Можно обновить параметр в уже созданном балансировщике.
Включить проверку правил
Чтобы включить или отключить проверку для правил, используй аннотацию:
loadbalancer.openstack.org/enable-health-monitor: "<value>"
Укажи <value>
— "true"
для включения или "false"
для отключения. Значение по умолчанию — "true"
Можно обновить параметр в уже созданном балансировщике.
Добавить заголовок X-Forwarded-For
Без указания аннотации балансировщик передает серверу только исходное тело HTTP-запроса, заменяя IP-адрес клиента на свой.
Чтобы серверы получали эту информацию для корректной работы или анализа, включи в запрос к серверу заголовок X-Forwarded-For, используй аннотацию:
loadbalancer.openstack.org/x-forwarded-for: "true"
Правило будет использовать схему HTTP → HTTP вместо TCP → TCP.
В созданном балансировщике параметр заменить нельзя — нужно создать новый манифест с нужной аннотацией.
Добавить правило TCP → Proxy
PROXY-протокол используется для передачи информации о соединении от источника, запрашивающего соединение, до пункта назначения, для которого было запрошено соединение.
В логах пода, к которому происходит подключение через балансировщик с правилами TCP → PROXY, будет указан реальный IP-адрес подключающегося, а не адрес балансировщика.
Чтобы создать балансировщик с правилом TCP → PROXY, используй аннотацию:
loadbalancer.openstack.org/proxy-protocol: "true"
В созданном балансировщике параметр заменить нельзя — нужно создать новый манифест с нужной аннотацией.
Сохранить публичный IP-адрес
Чтобы при пересоздании балансировщика сохранить публичный IP-адрес, используй аннотацию:
loadbalancer.openstack.org/keep-floatingip: "true"
Укажи этот или другой публичный IP-адрес в поле loadBalancerIP
:
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- port: 80
protocol: TCP
name: http
loadBalancerIP: "<IP_address>"
Можно использовать аннотацию для уже созданного балансировщика.
Удалить балансировщик
Чтобы удалить балансировщик нагрузки, вам необходимо выполнить удаление сервиса с типом LoadBalancer
, с помощью которого выполнялось создание балансировщика.