[Документация Yandex Cloud](../../../../index.md) > [Практические руководства](../../../index.md) > [Безопасность](../../index.md) > [Миграция сервисов с балансировщика NLB на L7-балансировщик ALB для подключения защиты Smart Web Security](../index.md) > [Балансировщик NLB с целевыми ресурсами из группы виртуальных машин](index.md) > Консоль управления

# Миграция сервисов с балансировщика NLB с целевыми ресурсами из группы виртуальных машин (Instance Groups) на L7-балансировщик ALB с помощью консоли управления

# Миграция сервисов с балансировщика NLB с целевыми ресурсами из группы виртуальных машин (Instance Groups) на L7-балансировщик ALB с помощью консоли управления


Чтобы мигрировать сервис с сетевого балансировщика на L7-балансировщик:

1. [Ознакомьтесь с рекомендациями по миграции сервисов](#recommendations).
1. [Создайте инфраструктуру для миграции](#before-you-begin).
1. [Создайте профиль безопасности Yandex Smart Web Security](#create-profile-sws).
1. [Создайте L7-балансировщик](#create-alb). На этом этапе вы подключите профиль безопасности Smart Web Security к виртуальному хосту L7-балансировщика.
1. [Проверьте работу L7-балансировщика](#test).
1. [Мигрируйте пользовательскую нагрузку с сетевого балансировщика на L7-балансировщик](#migration-nlb-to-alb).

## Рекомендации по миграции сервисов {#recommendations}

1. Подключите защиту от DDoS-атак на уровне L3-L4 ([модель OSI](https://ru.wikipedia.org/wiki/Сетевая_модель_OSI)). Она станет дополнением к защите на уровне L7, которую после миграции обеспечит [Yandex Smart Web Security](../../../../smartwebsecurity/index.md).

    Чтобы подключить защиту на уровне L3-L4:

    1. Перед миграцией [зарезервируйте статический публичный IP-адрес с защитой от DDoS-атак](../../../../vpc/operations/enable-ddos-protection.md#enable-on-reservation) и используйте этот адрес для обработчика L7-балансировщика. Если для сетевого балансировщика публичный IP с защитой уже есть, его можно сохранить при миграции. В противном случае IP-адрес придется поменять на защищенный.

    1. Настройте порог для срабатывания механизмов защиты, который будет соответствовать объему легитимного трафика на защищаемый ресурс. Для настройки такого порога обратитесь в [техническую поддержку](https://center.yandex.cloud/support).

    1. [Задайте](../../../../vpc/operations/adjust-mtu-ddos-protection.md) значение MTU равным `1450` на целевых ресурсах за балансировщиком. Подробнее в разделе [MTU и TCP MSS](../../../../vpc/concepts/mtu-mss.md).

1. Проводите миграцию в часы наименьшей пользовательской нагрузки. Во время миграции ваш сервис будет недоступен, пока для группы ВМ изменяется интеграция с целевой группой и публичный IP-адрес переносится с сетевого балансировщика на L7-балансировщик. Время недоступности сервиса зависит от количества ВМ в группе, настроек [политик развертывания](../../../../compute/concepts/instance-groups/policies/deploy-policy.md) и обычно занимает от нескольких минут до нескольких десятков минут.

1. При использовании L7-балансировщика запросы на бэкенды приходят с IP-адресом источника из диапазона внутренних IP-адресов подсетей, указанных при создании L7-балансировщика. Исходный IP-адрес источника запроса (пользователя) фигурирует в заголовке `X-Forwarded-For`. Если необходимо логировать публичные IP-адреса пользователей на веб-сервере, [измените его конфигурацию](../../../../troubleshooting/application-load-balancer/how-to/getting-external-src-ip-in-x-forwarded-for-headers.md).

1. Перед миграцией определите минимальное количество ресурсных единиц для настройки [автомасштабирования](../../../../application-load-balancer/concepts/application-load-balancer.md#lcu-scaling) в L7-балансировщике.

    Количество ресурсных единиц выберите на основе анализа нагрузки на ваш сервис по следующим показателям:

    * количество запросов в секунду (RPS);
    * количество одновременных активных соединений;
    * количество новых соединений в секунду;
    * объем трафика в секунду.

## Создайте инфраструктуру {#before-you-begin}

1. [Создайте подсети](../../../../vpc/operations/subnet-create.md) в трех зонах доступности. Эти подсети будут использоваться для L7-балансировщика.

1. Создайте [группы безопасности](../../../../application-load-balancer/concepts/application-load-balancer.md#security-groups), которые разрешают L7-балансировщику получать входящий трафик и отправлять его на целевые ресурсы, а также разрешают целевым ресурсам получать входящий трафик от балансировщика.

1. При использовании протокола HTTPS [добавьте TLS-сертификат](../../../../certificate-manager/operations/import/cert-create.md#create-certificate) вашего сервиса в [Yandex Certificate Manager](../../../../certificate-manager/index.md).

1. (Опционально) [Зарезервируйте публичный статический IP-адрес с защитой от DDoS](../../../../vpc/operations/get-static-ip.md) на уровне L3-L4 для L7-балансировщика.

## Создайте профиль безопасности Smart Web Security {#create-profile-sws}

[Создайте профиль безопасности](../../../../smartwebsecurity/operations/profile-create.md) Smart Web Security, выбрав вариант создания **По преднастроенному шаблону**.

При создании профиля задайте настройки:

* В поле **Действие для базового правила по умолчанию** выберите `Разрешить`.
* Для правила **Smart Protection** включите опцию **Только логирование (dry run)**.

С этими настройками информация о трафике будет логироваться, но к трафику не будут применяться никакие действия. Это позволит снизить риск отключения пользователей из-за проблем в настройке профиля. В дальнейшем вы сможете отключить опцию **Только логирование (dry run)** и настроить правила с запрещающими действиями в профиле безопасности для вашего сценария.

## Создайте L7-балансировщик {#create-alb}

1. [Создайте целевую группу](../../../../application-load-balancer/operations/target-group-create.md) L7-балансировщика. В блоке **Целевые ресурсы** выберите виртуальные машины из целевой группы вашего сетевого балансировщика нагрузки.

1. [Создайте группу бэкендов](../../../../application-load-balancer/operations/backend-group-create.md) со следующими параметрами:

    1. Выберите тип группы бэкендов `HTTP`.
    1. Если для вашего сервиса требуется, чтобы запросы в рамках одной пользовательской сессии обрабатывал один и тот же ресурс бэкенда, включите для группы бэкендов [привязку сессий](../../../../application-load-balancer/concepts/backend-group.md#session-affinity) (session affinity).
    1. В блоке **Бэкенды** нажмите кнопку **Добавить** и задайте настройки бэкенда:

        * **Тип** — `Целевая группа`.
        * **Целевые группы** — созданная ранее целевая группа.
        * **Порт** — TCP-порт вашего сервиса, на котором виртуальные машины принимают входящий трафик.
        * В блоке **Настройки протокола** укажите настройки соединения L7-балансировщика с бэкендом. В зависимости от типа протокола на вашем бэкенде выберите протокол `HTTP` или `HTTPS`.
        * В блоке **HTTP проверка состояния** настройте проверку в соответствии с [практическими рекомендациями](../../../../application-load-balancer/concepts/best-practices.md#health-checks-recommendations).
        * (Опционально) Задайте прочие настройки в соответствии с [инструкцией](../../../../application-load-balancer/operations/backend-group-create.md).

1. [Создайте HTTP-роутер](../../../../application-load-balancer/operations/http-router-create.md).

    В блоке **Виртуальные хосты** нажмите кнопку **Добавить виртуальный хост** и задайте настройки виртуального хоста:

    * **Authority** — имя домена вашего сервиса.
    * **Профиль безопасности** — созданный ранее профиль безопасности Smart Web Security.

        {% note warning %}

        Подключение сервиса Smart Web Security невозможно без привязки профиля безопасности к виртуальному хосту L7-балансировщика.

        {% endnote %}

    * Нажмите кнопку **Добавить маршрут** и задайте настройки маршрута:

        * **Путь** — `Начинается с` `/`.
        * **Действие** — `Маршрутизация`.
        * **Группа бэкендов** — созданная ранее группа бэкендов.

1. [Создайте L7-балансировщик](../../../../application-load-balancer/operations/application-load-balancer-create.md), выбрав способ создания **Вручную**:

    1. Укажите группу безопасности, созданную ранее.
    1. В блоке **Размещение** выберите для узлов балансировщика подсети в трех зонах доступности. Включите прием трафика в этих подсетях.
    1. В блоке **Настройки автомасштабирования** укажите [минимальное количество ресурсных единиц](../../../../application-load-balancer/concepts/application-load-balancer.md#lcu-scaling-settings) в каждой зоне в соответствии с ожидаемой нагрузкой на ваш сервис.
    1. В блоке **Обработчики** нажмите кнопку **Добавить обработчик** и задайте настройки обработчика:

        1. В блоке **Публичный IP-адрес** укажите:

            * **Порт** — TCP-порт вашего сервиса, на котором виртуальные машины принимают входящий трафик.
            * **Тип** — `Список`. Выберите из списка публичный IP-адрес. Если вы планируете подключить защиту от DDoS-атак на уровне L3-L4, выберите статический публичный IP-адрес с установленной защитой от DDoS-атак.
        1. В блоке **Приём и обработка трафика** укажите:

            * **Тип обработчика** — `HTTP`.
            * **Протокол** — в зависимости от используемого вашим сервисом протокола выберите `HTTP` или `HTTPS`.
            * Если выбран протокол `HTTPS`, в поле **Сертификаты** укажите TLS-сертификат, добавленный ранее в Certificate Manager.
            * **HTTP-роутер** — выберите созданный ранее HTTP-роутер.

## Проверьте работу L7-балансировщика {#test}

1. Дождитесь, когда L7-балансировщик перейдет в статус `Active`.

1. Перейдите в созданный L7-балансировщик и слева выберите **Проверки состояния**. Убедитесь, что все проверки показывают состояние `HEALTHY`.

1. Протестируйте запрос к сервису через L7-балансировщик. Например, одним из способов:
   
   * В файле `hosts` на рабочей станции добавьте запись `<публичный_IP-адрес_L7-балансировщика> <имя_домена_сервиса>`. Удалите запись после тестирования.
   * Выполните запрос с помощью [cURL](https://curl.se/) в зависимости от типа протокола:
   
       ```bash
       curl http://<имя_домена_сервиса> \
           --resolve <имя_домена_сервиса>:<порт_сервиса>:<публичный_IP-адрес_L7-балансировщика>
       ```
   
       ```bash
       curl https://<имя_домена_сервиса> \
           --resolve <имя_домена_сервиса>:<порт_сервиса>:<публичный_IP-адрес_L7-балансировщика>
       ```

## Мигрируйте пользовательскую нагрузку с сетевого балансировщика на L7-балансировщик {#migration-nlb-to-alb}

{% note warning %}

В процессе миграции будут пересозданы ВМ бэкенда.

{% endnote %}

Если обработчик сетевого балансировщика использует публичный IP-адрес без защиты от DDoS, запомните текущие настройки [проверок состояния](../../../../network-load-balancer/concepts/health-check.md) для целевой группы в сетевом балансировщике, прежде чем приступать к миграции. Эти настройки понадобятся при подключении новой целевой группы к балансировщику.

Чтобы мигрировать нагрузку:

1. Измените для группы ВМ интеграцию с целевой группой:

    1. В [консоли управления](https://console.yandex.cloud) перейдите в каталог, в котором находится группа ВМ.
    1. Перейдите в сервис **Compute Cloud**.
    1. На панели слева выберите ![image](../../../../_assets/console-icons/layers-3-diagonal.svg) **Группы виртуальных машин**.
    1. Выберите группу, которую хотите изменить.
    1. В правом верхнем углу страницы нажмите **Редактировать**.
    1. В блоке **Интеграция с Application Load Balancer** включите опцию **Создать целевую группу**.
    1. Укажите имя целевой группы L7-балансировщика и опционально другие [настройки целевой группы](../../../../compute/concepts/instance-groups/balancers.md#settings-alb).
    1. Нажмите **Сохранить**.

    В процессе изменения группы ВМ происходит следующее:

    * [Пересоздаются ВМ в группе](../../../../compute/concepts/instance-groups/deploy/instance.md#ch-gr-affect).
    * Удаляются целевые ресурсы из целевой группы сетевого балансировщика, на оставшиеся целевые ресурсы распределяется пользовательская нагрузка. У пользователей в это время наблюдается частичная недоступность сервиса через сетевой балансировщик.
    * После удаления всех целевых ресурсов удаляется целевая группа. Сервис становится недоступным через сетевой балансировщик.

    Вы можете перейти к следующему шагу, не дожидаясь, пока завершится изменение группы ВМ.

1. В группе бэкендов L7-балансировщика [измените у бэкенда](../../../../application-load-balancer/operations/backend-group-update.md#update-backend) целевую группу. Укажите только целевую группу, созданную на предыдущем шаге.

    В целевую группу L7-балансировщика автоматически будут добавляться ВМ из группы ВМ.

1. Выберите один из вариантов дальнейшей миграции пользовательской нагрузки с сетевого балансировщика на L7-балансировщик. Выбор зависит от наличия у обработчика сетевого балансировщика публичного IP-адреса с защитой или без защиты от DDoS:

    * Если [используется IP-адрес с защитой от DDoS](#ip-with-ddos-protection), при миграции публичный IP-адрес для вашего сервиса сохранится.
    * Если [используется IP-адрес без защиты от DDoS](#ip-without-ddos-protection), при миграции публичный IP-адрес для вашего сервиса изменится.

### Обработчик сетевого балансировщика использует публичный IP-адрес с защитой от DDoS {#ip-with-ddos-protection}

1. Наблюдайте за [состоянием целевых ресурсов](../../../../network-load-balancer/operations/check-resource-health.md) сетевого балансировщика. Дождитесь автоматического удаления целевых ресурсов из целевой группы.

1. [Удалите обработчик](../../../../network-load-balancer/operations/listener-remove.md) в сетевом балансировщике для освобождения статического публичного IP-адреса.

1. В L7-балансировщике назначьте обработчику публичный IP-адрес, который ранее был у сетевого балансировщика:

    {% list tabs group=instructions %}

    * CLI {#cli}

        Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../../../cli/quickstart.md#install).

        По умолчанию используется каталог, указанный при [создании](../../../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

        Чтобы изменить публичный IP-адрес, выполните команду:

        ```bash
        yc application-load-balancer load-balancer update-listener <имя_балансировщика> \
           --listener-name <имя_обработчика> \
           --external-ipv4-endpoint address=<публичный_IP-адрес_сервиса>,port=<порт_сервиса>
        ```

        Где `address` — это публичный IP-адрес, который ранее был у сетевого балансировщика.

    {% endlist %}

1. После изменения IP-адреса восстановится доступность вашего сервиса через L7-балансировщик. Наблюдайте за пользовательской нагрузкой, поступающей на L7-балансировщик, на графиках [статистики работы балансировщика](../../../../application-load-balancer/operations/application-load-balancer-get-stats.md).

1. Удалите освободившийся статический публичный IP-адрес, который был выбран при создании L7-балансировщика.

1. (Опционально) После переноса пользовательской нагрузки на L7-балансировщик [удалите сетевой балансировщик](../../../../network-load-balancer/operations/load-balancer-delete.md).

### Обработчик сетевого балансировщика использует публичный IP-адрес без защиты от DDoS {#ip-without-ddos-protection}

1. Наблюдайте за [состоянием целевых ресурсов](../../../../network-load-balancer/operations/check-resource-health.md) сетевого балансировщика. Дождитесь автоматического удаления целевых ресурсов из целевой группы.

1. [Создайте целевую группу](../../../../network-load-balancer/operations/target-group-create.md) сетевого балансировщика. Добавьте ВМ, которые были пересозданы при изменении группы ВМ.

1. В сетевом балансировщике [подключите целевую группу](../../../../network-load-balancer/operations/target-group-attach.md), созданную на предыдущем шаге. При подключении целевой группы настройте проверки состояния, которые были у исходной целевой группы.

1. Дождитесь перехода [проверок состояния](../../../../network-load-balancer/operations/check-resource-health.md) ВМ в целевой группе сетевого балансировщика в статус `Healthy`. После этого восстановится доступность вашего сервиса через сетевой балансировщик.

1. Чтобы мигрировать пользовательскую нагрузку с сетевого балансировщика на L7-балансировщик, в DNS-сервисе, обслуживающем публичную зону вашего домена, измените значение A-записи для доменного имени сервиса на публичный IP-адрес L7-балансировщика. Если публичная зона домена была создана в [Yandex Cloud DNS](../../../../dns/index.md), то измените запись [по инструкции](../../../../dns/operations/resource-record-update.md).

    {% note info %}

    Миграция нагрузки может выполняться долго, так как распространение изменений в записи DNS зависит от времени жизни записи (TTL) и количества звеньев цепочки DNS-запросов.

    {% endnote %}

1. По мере распространения изменений в записи DNS наблюдайте за ростом запросов, поступающих на L7-балансировщик, на графиках [статистики работы балансировщика](../../../../application-load-balancer/operations/application-load-balancer-get-stats.md).

1. Наблюдайте за снижением нагрузки на сетевой балансировщик с помощью [метрик балансировщика](../../../../monitoring/metrics-ref/network-load-balancer-ref.md) `processed_bytes` и `processed_packets`. Для визуализации этих метрик можно [создать дашборд](../../../../monitoring/operations/dashboard/create.md). Если нагрузка на сетевом балансировщике долгое время отсутствует, то перенос на L7-балансировщик завершен.

1. (Опционально) После переноса пользовательской нагрузки на L7-балансировщик [удалите сетевой балансировщик](../../../../network-load-balancer/operations/load-balancer-delete.md).