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

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

warning

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

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

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

  1. Проверьте квоты.
  2. Подключитесь к кластеру.
  3. Создайте EnvoyProxy.
  4. Создайте GatewayClass.
  5. Создайте Gateway.

1. Проверить квоты

Убедитесь, что в пуле выделена квота минимум на один публичный IP-адрес. Для этого посмотрите потребление квот облачной платформы.

2. Подключиться к кластеру

Чтобы подключиться к кластеру, используйте инструкцию Подключиться к кластеру Managed Kubernetes.

3. Создать EnvoyProxy

  1. Создайте 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
  2. Примените манифест:

    kubectl apply -f <file_name>

    Укажите <file_name> — имя yaml-файла с манифестом для создания объекта EnvoyProxy. Например, envoyproxy.yaml.

4. Создать GatewayClass

  1. Создайте 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
  2. Примените манифест:

    kubectl apply -f <file_name>

    Укажите <file_name> — имя yaml-файла с манифестом для создания объекта GatewayClass. Например, gatewayclass.yaml.

5. Создать Gateway

  1. Создайте 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 файла values.yaml добавьте необходимые параметры для балансировщика — подробнее о параметрах балансировщика нагрузки в подразделе Настроить балансировщик нагрузки.

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

    kubectl apply -f <file_name>

    Укажите <file_name> — имя yaml-файла с манифестом для создания объекта Gateway. Например, gateway.yaml.

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

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

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

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

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

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. Укажите подсеть. Для этого в манифест объекта Gateway добавьте аннотацию:

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

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

  2. Отключите автоматическое создание публичного IP-адреса. Для этого в манифест объекта Gateway добавьте аннотацию:

    service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
  3. Укажите 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.

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

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

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

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

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

Чтобы указать максимум соединений, в манифест объекта Gateway добавьте аннотацию:

loadbalancer.openstack.org/connection-limit: "<value>"

Укажите <value> — максимальное количество соединений в секунду. По умолчанию — -1 (не ограничено).

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

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

Таймаут соединения для входящих запросов

Чтобы указать таймаут соединения для входящих запросов на балансировщик, в манифест объекта Gateway добавьте аннотацию:

loadbalancer.openstack.org/timeout-client-data: "<value>"

Укажите <value> — значение таймаута в миллисекундах. По умолчанию — 50000.

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

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

Таймаут соединения для запросов балансировщика к серверам

Чтобы указать таймаут соединения для запросов балансировщика к серверам, в манифест объекта Gateway добавьте аннотацию:

loadbalancer.openstack.org/timeout-member-connect: "<value>"

Укажите <value> — значение таймаута в миллисекундах. По умолчанию — 5000.

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

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

Таймаут неактивности

Таймаут неактивности для запросов балансировщика к серверам — это время, в течение которого текущее подключение считается «живым», даже если данные не передаются.

Чтобы указать таймаут неактивности, в манифест объекта Gateway добавьте аннотацию:

loadbalancer.openstack.org/timeout-member-data: "<value>"

Укажите <value> — значение таймаута в миллисекундах. По умолчанию — 50000.

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

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

Таймаут ожидания TCP

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

Чтобы указать таймаут ожидания TCP для запросов балансировщика к серверам, в манифест объекта Gateway добавьте аннотацию:

loadbalancer.openstack.org/timeout-tcp-inspect: "<value>"

Укажите <value> — значение таймаута в миллисекундах. По умолчанию — 0.

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

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

Включить проверку правил

Чтобы включить или отключить проверку для правил, в манифест объекта Gateway добавьте аннотацию:

loadbalancer.openstack.org/enable-health-monitor: "<value>"

Укажите <value> — статус праверки правил: true — для включения проверки или false — для отключения проверки. Значение по умолчанию — true.

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

Сохранить IP-адрес клиента

Чтобы получать IP-адрес клиента, добавьте заголовок X-Forwarded-For или правило TCP → PROXY.

Без указания аннотации балансировщик передает серверу только исходное тело HTTP-запроса, заменяя IP-адрес клиента на свой.

Чтобы серверы получали эту информацию для корректной работы или анализа, включите в запрос к серверу заголовок X-Forwarded-For. Для этого в манифест объекта Gateway добавьте аннотацию:

loadbalancer.openstack.org/x-forwarded-for: "true"

Правило будет использовать схему HTTP → HTTP вместо TCP → TCP. Если вместо HTTP-протокола необходимо использовать HTTPS, терминируйте TLS-соединение.

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

Не используйте вместе с PROXY-протоколом. При добавлении правила TCP → Proxy заголовок X-Forwarded-For автоматически попадает на сервис за балансировщиком.

Сохранить публичный IP-адрес

Чтобы при пересоздании балансировщика сохранить публичный IP-адрес, в манифест объекта Gateway добавьте аннотацию:

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>"

Укажите <ip_address> — публичный IP-адрес, который вы хотите сохранять при пересоздании балансировщика.

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