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

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

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

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

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

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

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

Создайте внутренний сетевой балансировщик для 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. Если у вас еще нет Terraform, установите его.

  2. Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.

  3. Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его.

  4. Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.

  5. Скачайте в ту же рабочую директорию файл конфигурации в зависимости от используемого протокола:

    • HTTP — файл конфигурации alb-int-nlb-http.tf.
    • HTTPS — файл конфигурации alb-int-nlb-https.tf.

    В этих файлах описаны:

    • подсети для L7-балансировщика;
    • группа безопасности для L7-балансировщика;
    • статический адрес для L7-балансировщика;
    • импорт TLS-сертификата в Certificate Manager (если используется протокол HTTPS);
    • профиль безопасности Smart Web Security;
    • целевая группа, группа бэкендов и HTTP-роутер для L7-балансировщика;
    • L7-балансировщик.
  6. В конфигурационном файле задайте пользовательские параметры:

    1. Укажите значения переменных:

      • domain_name — имя домена вашего сервиса.
      • network_id — идентификатор сети, в которой находятся виртуальные машины из целевой группы сетевого балансировщика нагрузки.
      • ip_address_int_nlb — внутренний IP-адрес созданного ранее внутреннего сетевого балансировщика.
      • certificate (если используется протокол HTTPS) — путь к файлу самоподписанного пользовательского сертификата.
      • private_key (если используется протокол HTTPS) — путь к файлу с закрытым ключом.
  7. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

    Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  8. Создайте необходимую инфраструктуру:

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

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

  9. Укажите настройки автомасштабирования в L7-балансировщике:

    1. В консоли управления перейдите в каталог, в котором создан L7-балансировщик.
    2. Выберите сервис Application Load Balancer.
    3. Нажмите на имя нужного балансировщика.
    4. Нажмите и выберите Редактировать.
    5. В блоке Настройки автомасштабирования укажите ограничения на количество ресурсных единиц.

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

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

  2. Перейдите в созданный L7-балансировщик и слева выберите Проверки состояния. Убедитесь, что все проверки состояния 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-адрес, который ранее был у внешнего сетевого балансировщика:

    1. Откройте конфигурационный файл, который вы использовали для создания L7-балансировщика (alb-int-nlb-http.tf или alb-int-nlb-https.tf).

    2. Измените в описании балансировщика значение параметра address в блоке listener.endpoint.address.external_ipv4_address:

      resource "yandex_alb_load_balancer" "<имя_балансировщика>" {
        ...
        listener {
          ...
          endpoint {
            address {
              external_ipv4_address {
                address = <публичный_IP-адрес_сервиса>
              }
            }
            ports = [ <порт_сервиса> ]
          }
        }
      }
      

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

    3. Примените изменения:

      1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

      2. Проверьте корректность конфигурационного файла с помощью команды:

        terraform validate
        

        Если конфигурация является корректной, появится сообщение:

        Success! The configuration is valid.
        
      3. Выполните команду:

        terraform plan
        

        В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

      4. Примените изменения конфигурации:

        terraform apply
        
      5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

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

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

    1. Откройте конфигурационный файл, который вы использовали для создания L7-балансировщика (alb-int-nlb-http.tf или alb-int-nlb-https.tf).

    2. Удалите из файла описание ресурса 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"
        }
      }
      
    3. Примените изменения:

      1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

      2. Проверьте корректность конфигурационного файла с помощью команды:

        terraform validate
        

        Если конфигурация является корректной, появится сообщение:

        Success! The configuration is valid.
        
      3. Выполните команду:

        terraform plan
        

        В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

      4. Примените изменения конфигурации:

        terraform apply
        
      5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

Не сохранять публичный 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
    

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

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