Миграция сервисов с балансировщика NLB с целевыми ресурсами из группы виртуальных машин (Instance Groups) на L7-балансировщик ALB с помощью Terraform
Чтобы мигрировать сервис с сетевого балансировщика на L7-балансировщик:
- Ознакомьтесь с рекомендациями по миграции сервисов.
- Создайте инфраструктуру. На этом этапе вы подключите профиль безопасности Smart Web Security к виртуальному хосту L7-балансировщика.
- Проверьте работу L7-балансировщика.
- Мигрируйте пользовательскую нагрузку с сетевого балансировщика на L7-балансировщик.
Рекомендации по миграции сервисов
-
Дополнительно к защите от DDoS-атак на уровне L7 модели OSI с помощью Yandex Smart Web Security рекомендуется подключить защиту от DDoS-атак на уровне L3-L4. Для этого заранее зарезервируйте статический публичный IP-адрес с защитой от DDoS-атак и используйте этот адрес для обработчика L7-балансировщика.
Если у обработчика сетевого балансировщика уже используется публичный IP-адрес с защитой от DDoS, то вы сможете сохранить его и перенести в L7-балансировщик.
Если у обработчика сетевого балансировщика используется публичный IP-адрес без защиты от DDoS, то для защиты от DDoS-атак на уровне L3-L4 миграция на L7-балансировщик возможна только со сменой публичного IP-адреса для вашего сервиса.
При использовании защиты от DDoS-атак на уровне L3-L4 настройте порог для срабатывания механизмов защиты на уровне L3-L4, который будет соответствовать объему легитимного трафика на защищаемый ресурс. Для настройки такого порога обратитесь в техническую поддержку
.Также задайте значение MTU равным
1450
на целевых ресурсах за балансировщиком. Подробнее см. в разделе Настроить MTU при включении защиты от DDoS-атак. -
Работы по миграции рекомендуется проводить в часы наименьшей пользовательской нагрузки. В процессе миграции для группы ВМ изменяется интеграция с целевой группой и происходит перенос публичного IP-адреса с сетевого балансировщика на L7-балансировщик. В это время ваш сервис будет недоступен. Время недоступности сервиса зависит от количества ВМ в группе, настроек политик развертывания и в штатном режиме может занимать от нескольких минут до нескольких десятков минут.
-
При использовании L7-балансировщика запросы на бэкенды приходят с IP-адресом источника из диапазона внутренних IP-адресов подсетей, указанных при создании L7-балансировщика. Исходный IP-адрес источника запроса (пользователя) фигурирует в заголовке
X-Forwarded-For
. Если необходимо журналировать публичные IP-адреса пользователей на веб-сервере, измените его конфигурацию. -
Ознакомьтесь с автомасштабированием и ресурсными единицами в L7-балансировщике.
Создайте инфраструктуру
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации в зависимости от используемого протокола:
HTTP
— файл конфигурации alb-vm-http.tf .HTTPS
— файл конфигурации alb-vm-https.tf .
В этих файлах описаны:
- подсети для L7-балансировщика;
- группа безопасности для L7-балансировщика;
- статический адрес для L7-балансировщика;
- импорт TLS-сертификата в Certificate Manager (если используется протокол
HTTPS
); - профиль безопасности Smart Web Security;
- целевая группа, группа бэкендов и HTTP-роутер для L7-балансировщика;
- L7-балансировщик.
-
В конфигурационном файле задайте пользовательские параметры:
-
Укажите значения переменных:
domain_name
— имя домена вашего сервиса.network_id
— идентификатор сети, в которой находятся виртуальные машины из целевой группы сетевого балансировщика нагрузки.certificate
(если используется протоколHTTPS
) — путь к файлу самоподписанного пользовательского сертификата.private_key
(если используется протоколHTTPS
) — путь к файлу с закрытым ключом.
-
Для ресурса
yandex_alb_target_group
добавьте столько блоковtarget
, сколько виртуальных машин находится в целевой группе вашего сетевого балансировщика нагрузки:resource "yandex_alb_target_group" "alb-target-group" { ... target { subnet_id = "<идентификатор_подсети>" ip_address = "<внутренний_IP-адрес_ВМ_1>" } target { subnet_id = "<идентификатор_подсети>" ip_address = "<внутренний_IP-адрес_ВМ_2>" } ... target { subnet_id = "<идентификатор_подсети>" ip_address = "<внутренний_IP-адрес_ВМ_N>" } }
Где:
subnet_id
— идентификатор подсети, в которой расположена виртуальная машина.ip_address
— внутренний IP-адрес виртуальной машины, указанной в целевой группе вашего сетевого балансировщика нагрузки.
-
Если для вашего сервиса требуется, чтобы запросы в рамках одной пользовательской сессии обрабатывал один и тот же ресурс бэкенда, включите для группы бэкендов привязку сессий (session affinity) — для ресурса
yandex_alb_backend_group
раскомментируйте блок:session_affinity { connection { source_ip = true } }
-
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
-
Укажите настройки автомасштабирования в L7-балансировщике:
- В консоли управления
перейдите в каталог, в котором создан L7-балансировщик. - Выберите сервис Application Load Balancer.
- Нажмите на имя нужного балансировщика.
- Нажмите
и выберите Редактировать. - В блоке Настройки автомасштабирования укажите ограничения на количество ресурсных единиц.
- В консоли управления
Проверьте работу L7-балансировщика
-
Дождитесь, когда L7-балансировщик перейдет в статус
Active
. -
Перейдите в созданный L7-балансировщик и слева выберите Проверки состояния. Убедитесь, что все проверки состояния L7-балансировщика показывают состояние
HEALTHY
. -
Протестируйте запрос к сервису через L7-балансировщик. Например, одним из способов:
-
В файле
hosts
на рабочей станции добавьте запись<публичный_IP-адрес_L7-балансировщика> <имя_домена_сервиса>
. Удалите запись после тестирования. -
Выполните запрос с помощью cURL
в зависимости от типа протокола:curl http://<имя_домена_сервиса> \ --resolve <имя_домена_сервиса>:<порт_сервиса>:<публичный_IP-адрес_L7-балансировщика>
curl https://<имя_домена_сервиса> \ --resolve <имя_домена_сервиса>:<порт_сервиса>:<публичный_IP-адрес_L7-балансировщика>
-
Мигрируйте пользовательскую нагрузку с сетевого балансировщика на L7-балансировщик
Важно
В процессе миграции будут пересозданы ВМ бэкенда.
Если обработчик сетевого балансировщика использует публичный IP-адрес без защиты от DDoS, запомните текущие настройки проверок состояния для целевой группы в сетевом балансировщике, прежде чем переходить к следующему шагу.
-
Измените для группы ВМ интеграцию с целевой группой:
- В консоли управления
перейдите в каталог, в котором находится группа ВМ. - Выберите сервис Compute Cloud.
- На панели слева выберите
Группы виртуальных машин. - Выберите группу, которую хотите изменить.
- В правом верхнем углу страницы нажмите Редактировать.
- В блоке Интеграция с Application Load Balancer включите опцию Создать целевую группу.
- Укажите имя целевой группы L7-балансировщика и опционально другие настройки целевой группы.
- Нажмите Сохранить.
При изменении группы ВМ:
- Автоматически пересоздаются ВМ в группе.
- Удаляются целевые ресурсы из целевой группы сетевого балансировщика, на оставшиеся целевые ресурсы распределяется пользовательская нагрузка. У пользователей в это время наблюдается частичная недоступность сервиса через сетевой балансировщик.
- После удаления всех целевых ресурсов удаляется целевая группа. Сервис становится недоступным через сетевой балансировщик.
Перейдите к следующему шагу, не дожидаясь, пока завершится изменение группы ВМ.
- В консоли управления
-
В группе бэкендов L7-балансировщика измените у бэкенда целевую группу. Укажите только целевую группу, созданную на предыдущем шаге.
В процессе выполнения операции, указанной на предыдущем шаге, в целевую группу L7-балансировщика автоматически будут добавляться ВМ из группы ВМ.
-
Выберите один из вариантов дальнейшей миграции пользовательской нагрузки с сетевого балансировщика на L7-балансировщик в зависимости от наличия у обработчика сетевого балансировщика публичного IP-адреса с защитой или без защиты от DDoS:
- Обработчик сетевого балансировщика использует публичный IP-адрес с защитой от DDoS. При миграции сохранится публичный IP-адрес для вашего сервиса.
- Обработчик сетевого балансировщика использует публичный IP-адрес без защиты от DDoS. При миграции изменится публичный IP-адрес для вашего сервиса.
Обработчик сетевого балансировщика использует публичный IP-адрес с защитой от DDoS
-
Удалите обработчик в сетевом балансировщике для освобождения статического публичного IP-адреса.
-
В L7-балансировщике назначьте обработчику публичный IP-адрес, который ранее был у сетевого балансировщика:
-
Откройте конфигурационный файл, который вы использовали для создания L7-балансировщика (
alb-vm-http.tf
илиalb-vm-https.tf
). -
Измените в описании балансировщика значение параметра
address
в блокеlistener.endpoint.address.external_ipv4_address
:resource "yandex_alb_load_balancer" "<имя_балансировщика>" { ... listener { ... endpoint { address { external_ipv4_address { address = <публичный_IP-адрес_сервиса> } } ports = [ <порт_сервиса> ] } } }
Где
address
— это публичный IP-адрес, который ранее был у сетевого балансировщика. -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
-
-
После изменения IP-адреса восстановится доступность вашего сервиса через L7-балансировщик. Наблюдайте за пользовательской нагрузкой, поступающей на L7-балансировщик, на графиках статистики работы балансировщика.
-
Удалите освободившийся статический публичный IP-адрес, который был выбран при создании L7-балансировщика.
-
Откройте конфигурационный файл, который вы использовали для создания L7-балансировщика (
alb-vm-http.tf
илиalb-vm-https.tf
). -
Удалите из файла описание ресурса
yandex_vpc_address
:resource "yandex_vpc_address" "static-address" { description = "Static public IP address for the Application Load Balancer" name = "alb-static-address" external_ipv4_address { zone_id = "ru-central1-a" ddos_protection_provider = "qrator" } }
-
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
-
-
(Опционально) После переноса пользовательской нагрузки на L7-балансировщик удалите сетевой балансировщик.
Обработчик сетевого балансировщика использует публичный IP-адрес без защиты от DDoS
-
Наблюдайте за состоянием целевых ресурсов сетевого балансировщика. Дождитесь автоматического удаления целевых ресурсов из целевой группы.
-
Создайте целевую группу сетевого балансировщика. Добавьте ВМ, которые были пересозданы при изменении группы ВМ.
-
В сетевом балансировщике подключите целевую группу, созданную на предыдущем шаге. При подключении целевой группы настройте проверки состояния, которые были у исходной целевой группы.
-
Дождитесь перехода проверок состояния ВМ в целевой группе сетевого балансировщика в статус
Healthy
. После этого восстановится доступность вашего сервиса через сетевой балансировщик. -
Чтобы мигрировать пользовательскую нагрузку с сетевого балансировщика на L7-балансировщик, в DNS-сервисе, обслуживающем публичную зону вашего домена, измените значение А-записи для доменного имени сервиса на публичный IP-адрес L7-балансировщика. Если публичная зона домена была создана в Yandex Cloud DNS, то измените запись по инструкции.
Примечание
Распространение изменений в записи DNS зависит от значения времени жизни записи (TTL) и количества звеньев цепочки DNS-запросов. Это может занять продолжительное время.
-
По мере распространения изменений в записи DNS наблюдайте за ростом запросов, поступающих на L7-балансировщик, на графиках статистики работы балансировщика.
-
Наблюдайте за снижением нагрузки на сетевой балансировщик с помощью метрик балансировщика
processed_bytes
иprocessed_packets
. Для визуализации этих метрик можно создать дашборд. Отсутствие нагрузки на сетевом балансировщике в течение продолжительного времени свидетельствует о том, что перенос пользовательской нагрузки на L7-балансировщик завершен. -
(Опционально) После переноса пользовательской нагрузки на L7-балансировщик удалите сетевой балансировщик.