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

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

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

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

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

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

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

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

  1. Дополнительно к защите от 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-атак.

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

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

  4. Ознакомьтесь с автомасштабированием и ресурсными единицами в L7-балансировщике.

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

  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: <номер_порта_для_HTTP,_например_80>
          targetPort: <номер_порта_пода_Ingress-контроллера_NGINX_для_HTTP,_например_80>
          protocol: TCP
          name: http
        - port: <номер_порта_для_HTTPS,_например_443>
          targetPort: <номер_порта_пода_Ingress-контроллера_NGINX_для_HTTPS,_например_443>
          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.

      Важно

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

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

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

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

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

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

      Важно

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

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

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

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

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

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

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

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

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

  7. Протестируйте запрос к сервису через 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-сервисе, обслуживающем публичную зону вашего домена, измените значение А-записи для доменного имени сервиса на публичный 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 ООО «Яндекс.Облако»