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

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

Внутренний балансировщик нагрузки — балансировщик, для которого назначается частный IP-адрес из указанной подсети. Настройка такого балансировщика необходима, когда потребители сервиса — это приложения во внутренней сети вне кластера Managed Kubernetes.

Перед началом работы

  1. Создайте кластер с публичным IP-адресом.

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

  2. Создайте группу узлов.

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

Шаг 1. Создайте Service с типом LoadBalancer

  1. Сохраните следующую спецификацию в файле cloudru-lb-internal.yaml:

    apiVersion : v1
    kind : Service
    metadata :
    name : cloudru-lb-internal
    annotations :
    loadbalancer.mk8s.cloud.ru/type : "internal"
    loadbalancer.mk8s.cloud.ru/internal-subnet-id : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    loadbalancer.mk8s.cloud.ru/health-check-timeout-seconds : "4"
    loadbalancer.mk8s.cloud.ru/health-check-interval-seconds : "4"
    loadbalancer.mk8s.cloud.ru/health-check-unhealthy-threshold-count : "5"
    loadbalancer.mk8s.cloud.ru/health-check-healthy-threshold-count : "5"
    spec :
    type : LoadBalancer
    selector :
    app : cloudru-internal-app
    ports :
    - port : 80
    name : cloudru-port

    Где:

    • annotations — метаданные с дополнительными параметрами.

    • loadbalancer.mk8s.cloud.ru/type — тип балансировщика нагрузки.

      Внимание

      Изменить тип балансировщика и идентификатор сети после создания балансировщика нагрузки нельзя.

    • loadbalancer.mk8s.cloud.ru/internal-subnet-id — идентификатор подсети из сервиса «Подсети».

      При создании внутреннего балансировщика указание идентификатора сети обязательно.

    • loadbalancer.mk8s.cloud.ru/health-check-timeout-seconds — время в секундах, в течение которого отсутствие ответа означает неудавшуюся проверку работоспособности.

      Значение от 3 до 30 секунд. Необязательный параметр. По умолчанию — 3 секунды.

    • loadbalancer.mk8s.cloud.ru/health-check-interval-seconds — время в секундах между проверками работоспособности отдельного пода.

      Значение от 3 до 30 секунд. Необязательный параметр. По умолчанию — 3 секунды.

    • loadbalancer.mk8s.cloud.ru/health-check-unhealthy-threshold-count — количество последовательных неудачных проверок до исключения из балансировки.

      Значение от 3 до 25. Необязательный параметр. По умолчанию — 3.

    • loadbalancer.mk8s.cloud.ru/health-check-healthy-threshold-count — количество последовательных удачных проверок для включения в балансировку.

      Значение от 3 до 25. Необязательный параметр. По умолчанию — 3.

    • spec.selector — метка селектора из шаблона подов.

    • spec.ports — список портов.

      Поддерживаемый протокол: TCP.

      Доступные диапазоны: 1–29999, 32769–39999.

    • spec.ports.port — порт балансировщика нагрузки, на котором будут обслуживаться пользовательские запросы.

    Подробное описание параметров спецификации Service см. в документации Kubernetes.

    Об ограничениях сервиса «Load Balancer» читайте в руководстве пользователя.

  2. Выполните команду:

    kubectl create -f cloudru-lb-internal.yaml

    Команда создает подсистему балансировки нагрузки в группе ресурсов узла.

    При успешном выполнении отобразится сообщение:

    service/cloudru-lb-internal created

    Балансировщик нагрузки cloudru-lb-internal появится в личном кабинете в разделе Балансировщик нагрузки.

Шаг 2. Создайте приложение

  1. Сохраните следующую спецификацию в файл cloudru-pod-lb-internal.yaml:

    apiVersion : v1
    kind : Pod
    metadata :
    name : web-service-internal
    labels :
    app : cloudru-internal-app
    spec :
    containers :
    - name : web-service-internal
    image : mk8s.registry.smk.sbercloud.dev/nginx:latest
  2. Выполните команду:

    kubectl create -f cloudru-pod-lb-internal.yaml

    При успешном выполнении отобразится сообщение:

    pod/cloudru-pod-lb-internal created

Шаг 3. Проверьте параметры балансировщика

Выполните команду:

kubectl get svc cloudru-lb-internal

Результат:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT ( S ) AGE
cloudru-lb-internal LoadBalancer 10 .102.51.12 172 .16.100.47 80 :30203/TCP 83m

В столбце EXTERNAL-IP отображается IP-адрес внутренней подсистемы балансировки нагрузки.

Шаг 4. Проверьте работу балансировщика

Выполните команду:

curl http://172.16.100.47

Где 172.16.100.47 — IP-адрес из столбца EXTERNAL-IP.

При необходимости повторите команду несколько раз.

Если приложение отвечает корректно, вы увидите следующий результат:

<!DOCTYPE html>
< html >
< head >
< title > Welcome to nginx! </ title >
< style >
html { color-scheme : light dark ; }
body { width : 35 em ; margin : 0 auto ;
font-family : Tahoma , Verdana , Arial , sans-serif ; }
</ style >
</ head >
< body >
< h1 > Welcome to nginx! </ h1 >
< p > If you see this page, the nginx web server is successfully installed and
working. Further configuration is required. </ p >
< p > For online documentation and support please refer to
< a href = "http://nginx.org/" > nginx.org </ a > . < br />
Commercial support is available at
< a href = "http://nginx.com/" > nginx.com </ a > . </ p >
< p >< em > Thank you for using nginx. </ em ></ p >
</ body >
</ html >
Evolution