Перейти к основному содержимому

Настроить балансировщик нагрузки в кластере Managed Kubernetes для Ingress

Последнее изменение:
warning

После создания кластера Managed Kubernetes мы рекомендуем выполнять все действия с балансировщиками только через kubectl. Изменения, внесенные другим способом, не сохраняются в манифестах Kubernetes. При пересоздании кластера, балансировщика или синхронизации манифестов такие изменения будут отменены.

Балансировщик нагрузки в Managed Kubernetes используется для распределения входящего трафика между подами.

Если вы используете Ingress Controller Traefik, балансировщик нагрузки будет автоматически создан при установке Ingress Controller Traefik. Чтобы настроить балансировщик при установке, используйте инструкцию Установить Ingress Controller Traefik. Все аннотации для настройки балансировщика нагрузки, которые описаны в этой инструкции, применяются к Ingress Controller Traefik только через файл values.yaml.

Если вы используете другой Ingress Controller без автоматического создания балансировщика или дополнительный балансировщик нагрузки нужен для других приложений, создайте балансировщик нагрузки.

Создать балансировщик нагрузки

Создайте манифест с объектом Service типа LoadBalancer.

Пример манифеста:

apiVersion: v1
kind: Service
metadata:
name: loadbalancer-name
labels:
app: my-app
annotations:
loadbalancer.openstack.org/keep-floatingip: "true"
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- port: 80
protocol: TCP

Все дополнительные параметры для балансировщика передаются в блоке annotations — в инструкции указаны часто используемые аннотации, которые могут пригодиться при создании балансировщика или, в некоторых случаях, для уже созданного балансировщика.

Созданный балансировщик нагрузки появится в панели управления: в верхнем меню нажмите Продукты и выберите Облачные серверы → раздел Балансировщики → вкладка Балансировщики.

Указать флейвор и тип балансировщика

По умолчанию без указания аннотации создается балансировщик нагрузки типа Базовый с резервированием.

Для создания балансировщика с другим типом используйте аннотацию:

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-адрес.

Вы можете создать балансировщик в любой другой подсети — публичной, приватной или кросспроектной.

  1. Добавьте в манифест аннотацию с указанием подсети:

    loadbalancer.openstack.org/subnet-id: "<subnet_uuid>"

    Укажите <subnet_uuid> — ID подсети, можно посмотреть с помощью openstack subnet list

  2. Чтобы автоматически не создался публичный IP-адрес, добавьте аннотацию:

    service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
  3. Укажите IP-адрес балансировщика:

    spec:
    type: LoadBalancer
    selector:
    app: my-app
    ports:
    - port: 80
    protocol: TCP
    name: http
    loadBalancerIP: "<ip_address>"

    Укажите <ip_address> — IP-адрес балансировщика из подсети, которую вы выбрали на шаге 1.

    В созданном балансировщике аннотацию заменить нельзя — нужно создать новый манифест с нужной аннотацией.

Добавить настройки соединений

Для управления настройками соединений между входящими запросами и балансировщиком или между балансировщиком и серверами используются аннотации:

Настройки соединений задаются для правила балансировщика. Установленные в аннотациях настройки соединений можно посмотреть в панели управления: в верхнем меню нажмите Продукты и выберите Облачные серверы → раздел Балансировщики → вкладка Балансировщики → страница балансировщика → откройте карточку правила → откройте блок Расширенные настройки правила.

Максимум соединений

Чтобы указать максимум соединений, используйте аннотацию:

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-адрес клиента

По умолчанию в Managed Kubernetes используется externalTrafficPolicy: Cluster. Это означает, что IP-адрес клиента заменяется на 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"

Укажите этот или другой публичный IP-адрес в поле loadBalancerIP:

spec:
type: LoadBalancer
selector:
app: my-app
ports:
- port: 80
protocol: TCP
name: http
loadBalancerIP: "<ip_address>"

Можно использовать аннотацию для уже созданного балансировщика.