Создать L7-балансировщик
Чтобы создать L7-балансировщик:
-
В консоли управления
выберите каталог, в котором будет создан балансировщик. -
В списке сервисов выберите Application Load Balancer.
-
Нажмите кнопку Создать L7-балансировщик и выберите Вручную.
-
Введите имя балансировщика.
-
В блоке Сетевые настройки выберите:
-
Сеть, в подсетях которой будут размещаться узлы балансировщика.
-
Подходящие группы безопасности:
Без групп— для балансировщика будет разрешен любой входящий и исходящий трафик. Это наименее безопасный вариант.Автоматически— при создании балансировщика будет автоматически создана группа безопасности, разрешающая любой входящий трафик на порте80и TCP-трафик для проверки состояния узлов балансировщика на порте30080. При этом для балансировщика будет разрешен любой исходящий трафик.Из списка— для более гибкого управления трафиком создайте свои группы безопасности. Вы можете выбрать и привязать к балансировщику одновременно до пяти групп безопасности.
Примечание
Правила групп безопасности могут содержать только адреса в формате CIDR. Нельзя назначить группу, в которой используется другая группа безопасности.
-
-
В блоке Размещение выберите для узлов балансировщика подсети в разных зонах доступности и включите прием трафика в этих подсетях.
Чтобы не создавать узел балансировщика в определенной зоне доступности, нажмите
в соответствующей строке.Примечание
В регионе Казахстан доступна только зона доступности
kz1-a. -
(Опционально) В блоке Размещение включите или отключите входящий трафик для каждой зоны в отдельности с помощью опции Прием трафика.
-
(Опционально) В блоке Настройки автомасштабирования укажите ограничения на количество ресурсных единиц.
Количество единиц будет меняться автоматически с учетом нагрузки на балансировщик и установленных ограничений. От количества единиц зависит тарификация балансировщика.
-
(Опционально) В блоке Настройки логов:
-
Включите опцию Запись логов.
-
Выберите лог-группу Yandex Cloud Logging, в которую будут записываться логи балансировщика.
-
Нажмите кнопку Добавить правило отбрасывания логов и настройте его параметры:
- HTTP-коды — добавьте HTTP-коды.
- Классы HTTP-кодов — добавьте классы HTTP-кодов.
- gRPC-коды — добавьте gRPC-коды.
- Доля отбрасываемых логов — добавьте процент отбрасываемых логов.
Вы можете задать больше одного правила.
-
-
В блоке Обработчики нажмите кнопку Добавить обработчик. Задайте настройки обработчика:
-
Введите имя обработчика.
-
(Опционально) Включите опцию Публичный IP-адрес. Укажите Порт:
80и выберите Тип:Автоматически.Список— в появившемся поле справа выберите адрес в выпадающем списке.
-
(Опционально) Включите опцию Внутренний IP-адрес. Укажите Порт и выберите Подсеть в выпадающем списке.
-
В блоке Приём и обработка трафика выберите тип обработчика:
HTTPилиStream.Для
HTTPвыберите:- Протокол:
HTTP,HTTPSилиПеренаправлять на HTTPS. - HTTP-роутер в выпадающем списке.
Для
Streamвыберите протокол:Открытый: выберите Группы бэкендов в выпадающем списке.Зашифрованный: в блоке Основной обработчик выберите Сертификаты и Группы бэкендов в выпадающих списках.
- Протокол:
-
-
При необходимости добавьте дополнительные обработчики.
-
Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Посмотрите описание команды CLI для создания L7-балансировщика:
yc alb load-balancer create --help -
Выполните команду:
yc alb load-balancer create <имя_балансировщика> \ --network-name <имя_сети> \ --security-group-id <список_идентификаторов_групп_безопасности> \ --location subnet-name=<имя_подсети>,zone=<зона_доступности>Где:
<имя_балансировщика>— имя создаваемого балансировщика.--network-name— имя сети, в которой создается балансировщик.--security-group-id(опционально) — список от одного до пяти разделенных запятыми идентификаторов групп безопасности. Если не указать этот параметр, то для балансировщика будет разрешен любой трафик.--location— подсеть и зона доступности. Опцию можно повторять несколько раз, чтобы указать разные зоны доступности и подсети.
Результат:
done (1m40s) id: a5d88ep483cm******** name: test-balancer2 folder_id: aoe197919j8e******** status: ACTIVE region_id: kz1 network_id: c64l1c06d151******** allocation_policy: locations: - zone_id: kz1-a subnet_id: buc4gsmpj8hv******** log_group_id: eolul9ap0bv0******** security_group_ids: - enpulh2tbrep******** - enpg05a3ck35******** created_at: "2021-04-26T12:12:13.624832586Z" -
(Опционально) Установите ограничения на количество ресурсных единиц:
-
Посмотрите описание команды CLI для настройки ограничений:
yc alb load-balancer autoscale --help -
Установите ограничения, выполнив команду:
yc alb load-balancer autoscale <имя_или_идентификатор_балансировщика> \ --min-zone-size <минимум_ресурсных_единиц_в_зоне> \ --max-size <максимум_ресурсных_единиц_в_сумме>Где:
--min-zone-size— минимальное количество ресурсных единиц в каждой зоне доступности. По умолчанию минимум равен 2. Указать минимальное значение меньше 2 нельзя.--max-size— максимальное суммарное количество ресурсных единиц. По умолчанию количество не ограничено. Значение должно быть не меньше, чем количество зон доступности балансировщика, умноженное на минимальное количество ресурсных единиц в каждой зоне.
Вы можете указать в команде один из параметров или оба сразу.
Пример:
yc alb load-balancer autoscale test-balancer2 \ --min-zone-size 3 \ --max-size 10Результат:
id: a5d88ep483cm******** name: test-balancer2 folder_id: aoe197919j8e******** status: ACTIVE region_id: kz1 network_id: c64l1c06d151******** allocation_policy: locations: - zone_id: kz1-a subnet_id: buc4gsmpj8hv******** created_at: "2022-06-02T12:12:13.624832586Z" auto_scale_policy: min_zone_size: 3 max_size: 10
-
-
(Опционально) Установите параметры записи логов в Yandex Cloud Logging:
-
Посмотрите описание команды CLI для добавления логирования в балансировщик:
yc alb load-balancer logging --help -
Привяжите лог-группу к балансировщику и настройте правило отбрасывания логов:
yc alb load-balancer logging <имя_балансировщика> \ --log-group-id <идентификатор_лог-группы> \ --enable \ --discard codes=[<HTTP-код>,<класс_HTTP-кодов>,<gRPC-код>],percent=<доля_отбрасываемых_логов>Где:
--log-group-id— идентификатор лог-группы.--discard— правило отбрасывания логов. Параметры правила:codes— HTTP-коды, классы HTTP-кодов или gRPC-коды.percent— доля отбрасываемых логов в процентах.
Вы можете задать больше одного правила.
Результат:
done (42s) id: ds76g83js9gf******** name: test-load-balancer ... log_options: log_group_id: e23p9bfjvsgr******** discard_rules: - http_codes: - "200" http_code_intervals: - HTTP_3XX grpc_codes: - OK discard_percent: "90"
-
-
Добавьте обработчик для L7-балансировщика:
-
HTTP-обработчик.
-
Посмотрите описание команды CLI для добавления HTTP-обработчика L7-балансировщика:
yc alb load-balancer add-listener --help -
Добавьте обработчик, выполнив команду:
yc alb load-balancer add-listener <имя_балансировщика> \ --listener-name <имя_обработчика> \ --http-router-id <идентификатор_HTTP-роутера> \ --external-ipv4-endpoint port=<порт_обработчика>
-
-
Stream-обработчик.
-
Посмотрите описание команды CLI для добавления Stream-обработчика L7-балансировщика:
yc alb load-balancer add-stream-listener --help -
Добавьте обработчик, выполнив команду:
yc alb load-balancer add-stream-listener <имя_балансировщика> \ --listener-name=<имя_обработчика> \ --backend-group-id=<идентификатор_группы_бэкендов> \ --external-ipv4-endpoint port=<порт_обработчика>
-
Результат после добавления двух обработчиков:
done (42s) id: ds76g8b2op3f******** name: test-load-balancer folder_id: b1gu6g9ielh6******** status: ACTIVE network_id: enp0uulja5s3******** listeners: - name: tslistener endpoints: - addresses: - external_ipv4_address: address: 51.250.64.197 ports: - "80" http: handler: http_router_id: ds7d7b14b3fs******** - name: teststreamlistener endpoints: - addresses: - external_ipv4_address: address: 51.250.64.197 ports: - "443" stream: handler: backend_group_id: ds77tero4f5h******** allocation_policy: locations: - zone_id: kz1-a subnet_id: e9bs1hp7lgdl******** log_group_id: ckgs4u5km3u8******** security_group_ids: - enp49ot04g63******** created_at: "2022-04-04T02:12:40.160629110Z" log_options: log_group_id: e23p9bfjvsgr******** discard_rules: - http_codes: - "200" http_code_intervals: - HTTP_3XX grpc_codes: - OK discard_percent: "90" -
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
resource "yandex_alb_load_balancer" "test-balancer" { name = "<имя_L7-балансировщика>" network_id = "<идентификатор_сети>" security_group_ids = ["<список_идентификаторов_групп_безопасности>"] allocation_policy { location { zone_id = "<зона_доступности>" subnet_id = "<идентификатор_подсети>" } } # HTTP-обработчик listener { name = "<имя_HTTP-обработчика>" endpoint { address { external_ipv4_address { } } ports = [<порт>] } http { handler { http_router_id = "<идентификатор_HTTP-роутера>" } } } # Stream-обработчик listener { name = "<имя_Stream-обработчика>" endpoint { address { external_ipv4_address { } } ports = [<порт>] } stream { handler { backend_group_id = "<идентификатор_группы_бэкендов>" idle_timeout = "<время_ожидания>" } } } # TLS-обработчик listener { name = "<имя_TLS-обработчика>" endpoint { address { external_ipv4_address { } } ports = [<порт>] } tls { default_handler { certificate_ids = ["<идентификаторы_сертификатов>"] stream_handler { backend_group_id = "<идентификатор_группы_бэкендов>" idle_timeout = "<время_ожидания>" } } sni_handler { name = "имя_SNI-обработчика" server_names = ["имена_серверов"] handler { certificate_ids = ["<идентификаторы_сертификатов>"] stream_handler { backend_group_id = "<идентификатор_группы_бэкендов>" idle_timeout = "<время_ожидания>" } } } } } log_options { log_group_id = "<идентификатор_лог-группы>" discard_rule { http_codes = ["<HTTP-код>"] http_code_intervals = ["<класс_HTTP-кодов>"] grpc_codes = ["<gRPC-код>"] discard_percent = <доля_отбрасываемых_логов> } } }Где:
-
name— имя L7-балансировщика. Формат имени:- длина — от 2 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
network_id— идентификатор сети, в которой создается балансировщик. -
security_group_ids(опционально) — список от одного до пяти разделенных запятыми идентификаторов групп безопасности.Если не указать этот параметр, то для балансировщика будет разрешен любой трафик.
-
allocation_policy— описание расположения узлов L7-балансировщика. Укажите идентификаторы зоны доступности и подсети. -
listener(опционально) — описание параметров обработчика для L7-балансировщика. Вы можете указать один или несколько обработчиков.-
name— имя обработчика. Формат имени:- длина — от 2 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
endpoint— описание адресов и портов обработчика. Укажите внешний IPv4-адрес и порт для приема трафика. Если параметрexternal_ipv4_addressне задан, то публичный адрес будет выделен автоматически. -
ports— один или несколько портов. Порты обработчиков не должны совпадать. -
http— описание HTTP-приемника для обработчика:http_router_id— идентификатор HTTP-роутера.
-
stream— описание Stream-приемника для обработчика.backend_group_id— идентификатор группы бэкендов с типомStream, на которую будут направляться входящие TCP-соединения.idle_timeout(опционально) — время ожидания без активности, после которого соединение закрывается. Например:"10s","5m","1h". Значение"0"отключает таймаут. По умолчанию — 1 час.
-
tls— описание TLS-обработчика:-
default_handler— обработчик по умолчанию для TLS:-
certificate_ids— список идентификаторов сертификатов Yandex Certificate Manager. -
stream_handler— параметры Stream-обработчика:backend_group_id— идентификатор группы бэкендов с типомStream.idle_timeout(опционально) — время ожидания без активности, после которого соединение закрывается. Например:"10s","5m","1h". Значение"0"отключает таймаут. По умолчанию — 1 час.
-
-
sni_handler— описание SNI-обработчика:-
name— имя обработчика. Формат имени:- длина — от 2 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
server_names— имена серверов, которым соответствует SNI-обработчик. -
handler— параметры SNI-обработчика:-
certificate_ids— список идентификаторов сертификатов Yandex Certificate Manager. -
stream_handler— параметры Stream-обработчика:backend_group_id— идентификатор группы бэкендов с типомStream.idle_timeout(опционально) — время ожидания без активности, после которого соединение закрывается. Например:"10s","5m","1h". Значение"0"отключает таймаут. По умолчанию — 1 час.
-
-
-
-
-
log_options— (опционально) параметры записи логов в Yandex Cloud Logging:-
log_group_id— идентификатор лог-группы. -
discard_rule— правило отбрасывания логов:http_codes— HTTP-коды.http_code_intervals— классы HTTP-кодов.grpc_codes— gRPC-коды.discard_percent— доля отбрасываемых логов в процентах.
Вы можете задать больше одного правила.
-
Более подробную информацию о параметрах ресурса
yandex_alb_load_balancerв Terraform см. в документации провайдера. -
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply -
Подтвердите создание ресурсов: введите в терминал слово
yesи нажмите Enter.После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
или с помощью команды CLI:yc alb load-balancer listОграничения по времени
Провайдер Terraform ограничивает время на выполнение операций с балансировщиками Application Load Balancer 10 минутами.
Операции, которые длятся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию балансировщика блок
timeouts, например:resource "yandex_alb_load_balancer" "<имя_балансировщика>" { ... timeouts { create = "60m" update = "60m" delete = "60m" } }
-
Воспользуйтесь методом REST API create для ресурса LoadBalancer или вызовом gRPC API LoadBalancerService/Create.