Облачная платформаEvolution

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


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

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

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

  1. Создайте кластер или используйте ранее созданный.

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

  1. Создайте файл cloudru-lb-internal.yaml и скопируйте в него манифест:


    kind: Service
    apiVersion: v1
    metadata:
    name: cloudru-lb-internal
    annotations:
    networking.cloud.ru/load-balancer-type: "internal"
    networking.cloud.ru/load-balancer-return-subnet-ids: "43ca5087-f15d-4a59-ba80-e5de7ff3d31d"
    networking.cloud.ru/load-balancer-internal-subnet-id: "496e40f7-cc4b-4fa4-b42a-8cd2c9360716"
    networking.cloud.ru/load-balancer-health-check-timeout-seconds: "4"
    networking.cloud.ru/load-balancer-health-check-interval-seconds: "4"
    networking.cloud.ru/load-balancer-health-check-unhealthy-threshold: "5"
    networking.cloud.ru/load-balancer-health-check-healthy-threshold: "5"
    spec:
    type: LoadBalancer
    selector:
    app: cloudru-internal-app
    ports:
    - name: cloudru-port
    protocol: TCP
    port: 80
    targetPort: 80

    Где:

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

    • networking.cloud.ru/load-balancer-type — тип балансировщика нагрузки.

      Внимание

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

    • networking.cloud.ru/load-balancer-return-subnet-ids — список идентификаторов внутренних подсетей, из которых будут выделены IP-адреса для реплик балансировщика. C IP-адресов сетевой трафик будет доставляться к целям.

      Подсети также определяют зоны доступности, в которых будут расположены реплики балансировщика.

      Обязательный параметр.

    • load-balancer-internal-subnet-id — идентификатор подсети из сервиса «Подсети», из которой будет выделен IP-адрес.

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

    Внимание

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

    • (Опционально) networking.cloud.ru/load-balancer-health-check-timeout-seconds — время в секундах, в течение которого отсутствие ответа означает неудавшуюся проверку работоспособности.

      Значение от 3 до 30 секунд. По умолчанию — 3 секунды.

    • (Опционально) networking.cloud.ru/load-balancer-health-check-interval-seconds — время в секундах между проверками работоспособности узла.

      Значение от 3 до 30 секунд. По умолчанию — 3 секунды.

    • (Опционально) networking.cloud.ru/load-balancer-health-check-unhealthy-threshold — количество последовательных неудачных проверок до исключения из балансировки.

      Значение от 3 до 25. По умолчанию — 3.

    • (Опционально) networking.cloud.ru/load-balancer-health-check-healthy-threshold — количество последовательных удачных проверок для включения в балансировку.

      Значение от 3 до 25. По умолчанию — 3.

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

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

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

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

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

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

    kubectl create -f cloudru-lb-internal.yaml

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

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

    service/cloudru-lb-internal created

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

Шаг 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: emk8s.cr.cloud.ru/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: 35em; 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>