Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • ИИ для бизнеса
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Практические руководства
    • Все руководства
    • Разграничение прав доступа для групп пользователей
    • Приглашение нового пользователя и назначение ролей
    • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
    • Создание распределенной инфраструктуры с защищенным доступом
    • Централизованная публикация в интернете и защита приложений от DDoS
    • Базовая настройка SWS
    • Экстренная защита сервисов в Application Load Balancer от DDoS на уровне L7
      • Обзор
        • Обзор
        • Консоль управления
        • Terraform
    • Передача логов с виртуальной машины в Cloud Logging
    • Запись логов балансировщика в PostgreSQL
    • Безопасное хранение паролей для GitLab CI в виде секретов Yandex Lockbox
    • Сервисный аккаунт с профилем OS Login для управления ВМ с помощью Ansible
    • Передача логов с Container Optimized Image в Cloud Logging
    • Добавление HTML-страницы для работы SmartCaptcha
    • Настройка алертов и дашбордов в Monitoring
    • Загрузка аудитных логов в MaxPatrol SIEM
    • Загрузка аудитных логов в SIEM Splunk
    • Загрузка аудитных логов в SIEM ArcSight
    • Шифрование для бакета Object Storage на стороне сервера
    • Шифрование секретов в HashiCorp Terraform
    • Управление ключами KMS с HashiCorp Terraform
    • Auto Unseal в HashiCorp Vault
    • Передача логов кластера Yandex MPP Analytics for PostgreSQL в Yandex Cloud Logging

В этой статье:

  • Рекомендации по миграции сервисов
  • Создайте инфраструктуру
  • Создайте профиль безопасности Smart Web Security
  • Создайте внутренний сетевой балансировщик для Ingress-контроллера NGINX
  • Создайте L7-балансировщик
  • Проверьте работу L7-балансировщика
  • Мигрируйте пользовательскую нагрузку с внешнего сетевого балансировщика на L7-балансировщик
  • Сохранить публичный IP-адрес для вашего сервиса
  • Не сохранять публичный IP-адрес для вашего сервиса
  1. Безопасность
  2. Миграция сервисов с балансировщика NLB на L7-балансировщик ALB для подключения защиты Smart Web Security
  3. Балансировщик NLB как целевой ресурс для ALB
  4. Консоль управления

Миграция сервисов с внешнего балансировщика NLB на L7-балансировщик ALB с целевым ресурсом — внутренним сетевым балансировщиком NLB с помощью консоли управления

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 1 октября 2025 г.
  • Рекомендации по миграции сервисов
  • Создайте инфраструктуру
  • Создайте профиль безопасности Smart Web Security
  • Создайте внутренний сетевой балансировщик для Ingress-контроллера NGINX
  • Создайте L7-балансировщик
  • Проверьте работу L7-балансировщика
  • Мигрируйте пользовательскую нагрузку с внешнего сетевого балансировщика на L7-балансировщик
    • Сохранить публичный IP-адрес для вашего сервиса
    • Не сохранять публичный IP-адрес для вашего сервиса

Важно

Часть ресурсов, необходимых для прохождения практического руководства, доступны только в регионе Россия.

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

  1. Ознакомьтесь с рекомендациями по миграции сервисов.
  2. Создайте инфраструктуру для миграции.
  3. Создайте профиль безопасности Smart Web Security.
  4. Создайте внутренний сетевой балансировщик для Ingress-контроллера NGINX.
  5. Создайте L7-балансировщик. На этом этапе вы подключите профиль безопасности Smart Web Security к виртуальному хосту L7-балансировщика.
  6. Проверьте работу L7-балансировщика.
  7. Мигрируйте пользовательскую нагрузку с внешнего сетевого балансировщика на L7-балансировщик.

Рекомендации по миграции сервисовРекомендации по миграции сервисов

  1. Подключите защиту от DDoS-атак на уровне L3-L4 (модель OSI). Она станет дополнением к защите на уровне L7, которую после миграции обеспечит Yandex Smart Web Security.

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

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

    2. Настройте порог для срабатывания механизмов защиты, который будет соответствовать объему легитимного трафика на защищаемый ресурс. Для настройки такого порога обратитесь в техническую поддержку.

    3. Задайте значение MTU равным 1450 на целевых ресурсах за балансировщиком. Подробнее см. в разделе MTU и TCP MSS.

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

  3. При использовании L7-балансировщика запросы на бэкенды приходят с IP-адресом источника из диапазона внутренних IP-адресов подсетей, указанных при создании L7-балансировщика. Исходный IP-адрес источника запроса (пользователя) фигурирует в заголовке X-Forwarded-For. Если необходимо логировать публичные IP-адреса пользователей на веб-сервере, измените его конфигурацию.

  4. Перед миграцией определите минимальное количество ресурсных единиц для настройки автомасштабирования в L7-балансировщике.

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

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

Создайте инфраструктуруСоздайте инфраструктуру

  1. Создайте подсети в трех зонах доступности. Эти подсети будут использоваться для L7-балансировщика.

  2. Создайте группы безопасности, которые разрешают L7-балансировщику получать входящий трафик и отправлять его на целевые ресурсы, а также разрешают целевым ресурсам получать входящий трафик от балансировщика.

  3. При использовании протокола HTTPS добавьте TLS-сертификат вашего сервиса в Yandex Certificate Manager.

  4. (Опционально) Зарезервируйте публичный статический IP-адрес с защитой от DDoS на уровне L3-L4 для L7-балансировщика.

Создайте профиль безопасности Smart Web SecurityСоздайте профиль безопасности Smart Web Security

Создайте профиль безопасности Smart Web Security, выбрав вариант создания По преднастроенному шаблону.

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

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

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

Создайте внутренний сетевой балансировщик для Ingress-контроллера NGINXСоздайте внутренний сетевой балансировщик для Ingress-контроллера NGINX

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

    С помощью Helm-чарта
    С помощью манифеста
    1. В файле values.yaml, который вы использовали для первоначальной конфигурации Ingress-контроллера NGINX, добавьте параметры конфигурации для внутреннего сетевого балансировщика. Остальные параметры в файле оставьте без изменений.

      controller:
        service:
          external:
            enabled: true
          internal:
            enabled: true
            annotations:
              yandex.cloud/load-balancer-type: internal
              yandex.cloud/subnet-id: <идентификатор_подсети_для_IP-адреса_внутреннего_сетевого_балансировщика>
            loadBalancerIP: <IP-адрес_обработчика_внутреннего_сетевого_балансировщика>
            externalTrafficPolicy: Local
      
    2. Примените изменения конфигурации Ingress-контроллера NGINX с помощью команды:

      helm upgrade <имя_Ingress-контроллера_NGINX> -f values.yaml <чарт_для_Ingress-контроллера_NGINX> -n <пространство_имен>
      
    1. Создайте YAML-файл, в котором опишите ресурс Service:

      apiVersion: v1
      kind: Service
      metadata:
        name: <имя_ресурса>
        namespace: <пространство_имен>
        annotations:
          yandex.cloud/load-balancer-type: internal
          yandex.cloud/subnet-id: <идентификатор_подсети_для_IP-адреса_внутреннего_сетевого_балансировщика>
      spec:
        type: LoadBalancer
        externalTrafficPolicy: Local
        loadBalancerIP: <IP-адрес_обработчика_внутреннего_сетевого_балансировщика>
        ports:
        - port: <80_или_другой_номер_порта_для_HTTP>
          targetPort: <80_или_другой_номер_порта_пода_Ingress-контроллера_NGINX_для_HTTP>
          protocol: TCP
          name: http
        - port: <443_или_другой_номер_порта_для_HTTPS>
          targetPort: <443_или_другой_номер_порта_пода_Ingress-контроллера_NGINX_для_HTTPS>
          protocol: TCP
          name: https
        selector:
          <селекторы_подов_Ingress-контроллера_NGINX>
      
    2. Примените изменения с помощью команды:

    kubectl apply -f <файл_с_ресурсом_Service>
    
  2. Дождитесь создания внутреннего сетевого балансировщика и появления соответствующего ему объекта Service. Посмотреть информацию о сервисах вы можете с помощью команды:

    kubectl get service
    

Создайте L7-балансировщикСоздайте L7-балансировщик

  1. Создайте целевую группу L7-балансировщика. В блоке Целевые ресурсы выберите опцию Не из VPC и укажите внутренний IP-адрес внутреннего сетевого балансировщика. Нажмите кнопку Добавить целевой ресурс и далее кнопку Создать.

  2. Создайте группу бэкендов со следующими параметрами:

    1. Выберите тип группы бэкендов HTTP.

    2. В блоке Бэкенды нажмите кнопку Добавить и задайте настройки бэкенда:

      • Тип — Целевая группа.
      • Целевые группы — созданная ранее целевая группа.
      • Порт — TCP-порт, который настроен на обработчике внутреннего сетевого балансировщика. Обычно это порт 80 для HTTP и 443 для HTTPS.
      • В блоке Настройки протокола в зависимости от используемого вашим сервисом протокола выберите HTTP или HTTPS.
      • В блоке HTTP проверка состояния удалите проверку состояния. Не добавляйте ее, так как в качестве целевого ресурса используется сетевой балансировщик, который является отказоустойчивым сервисом.
  3. Создайте HTTP-роутер.

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

    • Authority — имя домена вашего сервиса.

    • Профиль безопасности — созданный ранее профиль безопасности Smart Web Security.

      Важно

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

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

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

    Вы можете добавить несколько доменов с помощью кнопки Добавить виртуальный хост.

  4. Создайте L7-балансировщик, выбрав способ создания Вручную:

    1. Укажите группу безопасности, созданную ранее.

      Важно

      Группы узлов в кластере Managed Service for Kubernetes должны иметь разрешающие правила в группах безопасности для входящих соединений от L7-балансировщика на диапазон портов 30000-32767 из подсетей, в которых размещается L7-балансировщик, или из его группы безопасности.

    2. В блоке Размещение выберите для узлов балансировщика подсети в трех зонах доступности. Включите прием трафика в этих подсетях.

    3. В блоке Настройки автомасштабирования укажите минимальное количество ресурсных единиц в каждой зоне в соответствии с ожидаемой нагрузкой на ваш сервис.

    4. В блоке Обработчики нажмите кнопку Добавить обработчик и задайте настройки обработчика:

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

        • Порт — TCP-порт, который настроен на обработчике внутреннего сетевого балансировщика. Обычно это порт 80 для HTTP и 443 для HTTPS.
        • Тип — Список. Выберите из списка публичный IP-адрес. Если вы планируете подключить защиту от DDoS-атак на уровне L3-L4, выберите статический публичный IP-адрес с установленной защитой от DDoS-атак.
      2. В блоке Приём и обработка трафика укажите:

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

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

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

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

  3. Протестируйте запрос к сервису через L7-балансировщик. Например, одним из способов:

    • В файле hosts на рабочей станции добавьте запись <публичный_IP-адрес_L7-балансировщика> <имя_домена_сервиса>. Удалите запись после тестирования.

    • Выполните запрос с помощью cURL в зависимости от типа протокола:

      curl http://<имя_домена_сервиса> \
          --resolve <имя_домена_сервиса>:<порт_сервиса>:<публичный_IP-адрес_L7-балансировщика>
      
      curl https://<имя_домена_сервиса> \
          --resolve <имя_домена_сервиса>:<порт_сервиса>:<публичный_IP-адрес_L7-балансировщика>
      

Мигрируйте пользовательскую нагрузку с внешнего сетевого балансировщика на L7-балансировщикМигрируйте пользовательскую нагрузку с внешнего сетевого балансировщика на L7-балансировщик

Выберите один из вариантов миграции:

  • Сохранить публичный IP-адрес для вашего сервиса.
  • Не сохранять публичный IP-адрес для вашего сервиса.

Сохранить публичный IP-адрес для вашего сервисаСохранить публичный IP-адрес для вашего сервиса

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

  2. Удалите внешний сетевой балансировщик. Выберите вариант, который соответствует способу первоначального развертывания вашего Ingress-контроллера NGINX:

    С помощью Helm-чарта
    С помощью манифеста
    1. В файле values.yaml, который вы использовали для конфигурации Ingress-контроллера NGINX, в секции controller.service.external установите значение параметра enabled: false. Остальные параметры в файле оставьте без изменений.

      controller:
        service:
          external:
            enabled: false
          ...
      
    2. Примените изменения конфигурации Ingress-контроллера NGINX с помощью команды:

      helm upgrade <имя_Ingress-контроллера_NGINX> -f values.yaml <чарт_для_Ingress-контроллера_NGINX> -n <пространство_имен>
      

    Удалите ресурс Service для внешнего сетевого балансировщика с помощью команды:

    kubectl delete service <имя_ресурса_Service_для_внешнего_сетевого_балансировщика>
    
  3. Дождитесь удаления внешнего сетевого балансировщика для Ingress-контроллера NGINX и удаления соответствующего ему объекта Service. Посмотреть информацию о сервисах вы можете с помощью команды:

    kubectl get service
    

    После этого ваш сервис не будет доступен через внешний сетевой балансировщик.

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

    CLI

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

    По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

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

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

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

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

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

Не сохранять публичный IP-адрес для вашего сервисаНе сохранять публичный IP-адрес для вашего сервиса

  1. Чтобы мигрировать пользовательскую нагрузку с внешнего сетевого балансировщика на L7-балансировщик, в DNS-сервисе, обслуживающем публичную зону вашего домена, измените значение A-записи для доменного имени сервиса на публичный IP-адрес L7-балансировщика. Если публичная зона домена была создана в Yandex Cloud DNS, то измените запись по инструкции.

    Примечание

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

  2. По мере распространения изменений в записи DNS наблюдайте за ростом запросов, поступающих на L7-балансировщик, на графиках статистики работы балансировщика.

  3. Наблюдайте за снижением нагрузки на внешний сетевой балансировщик с помощью метрик балансировщика processed_bytes и processed_packets. Для визуализации этих метрик можно создать дашборд. Если нагрузка на сетевом балансировщике долгое время отсутствует, то перенос на L7-балансировщик завершен.

  4. (Опционально) После переноса пользовательской нагрузки на L7-балансировщик удалите внешний сетевой балансировщик. Выберите вариант, который соответствует способу первоначального развертывания вашего Ingress-контроллера NGINX:

    С помощью Helm-чарта
    С помощью манифеста
    1. В файле values.yaml, который вы использовали для конфигурации Ingress-контроллера NGINX, в секции controller.service.external установите значение параметра enabled: false. Остальные параметры в файле оставьте без изменений.

      controller:
        service:
          external:
            enabled: false
          ...
      
    2. Примените изменения конфигурации Ingress-контроллера NGINX с помощью команды:

      helm upgrade <имя_Ingress-контроллера_NGINX> -f values.yaml <чарт_для_Ingress-контроллера_NGINX> -n <пространство_имен>
      

    Важно

    При изменении конфигурации Ingress-контроллера NGINX ваш сервис временно будет недоступен.

    Удалите ресурс Service для внешнего сетевого балансировщика с помощью команды:

    kubectl delete service <имя_ресурса_Service_для_внешнего_сетевого_балансировщика>
    
  5. (Опционально) Дождитесь удаления внешнего сетевого балансировщика для Ingress-контроллера NGINX и удаления соответствующего ему объекта Service. Посмотреть информацию о сервисах вы можете с помощью команды:

    kubectl get service
    

Была ли статья полезна?

Предыдущая
Обзор
Следующая
Terraform
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»