Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Smart Web Security
  • Начало работы
    • Все практические руководства
    • Создание L7-балансировщика с профилем безопасности
    • Создание L7-балансировщика с профилем безопасности через Ingress-контроллер Application Load Balancer
    • Защита API Gateway при помощи Smart Web Security
    • Централизованная публикация в интернете и защита приложений от DDoS
      • Обзор
        • Обзор
        • Консоль управления
        • Terraform
    • Обзор
    • Профили безопасности
    • WAF
    • ARL (лимит на запросы)
    • Правила
    • Условия
    • Списки
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений

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

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

Миграция сервисов с балансировщика NLB с целевыми ресурсами из кластера Yandex Managed Service for Kubernetes на L7-балансировщик ALB с помощью Terraform

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

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

  1. Ознакомьтесь с рекомендациями по миграции сервисов.
  2. Создайте инфраструктуру. На этом этапе вы подключите профиль безопасности Smart Web Security к виртуальному хосту L7-балансировщика.
  3. Установите Ingress-контроллер Application Load Balancer и создайте ресурсы в кластере Managed Service for Kubernetes. На этом этапе вы подключите профиль безопасности Smart Web Security к L7-балансировщику.
  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. В аннотациях Ingress-ресурса не поддерживается указание минимального количества ресурсных единиц L7-балансировщика. Группа ресурсных единиц автоматически масштабируется в зависимости от внешней нагрузки на узлы балансировщика.

  5. Функциональные возможности балансировщика Application Load Balancer могут отличаться от возможностей, используемых в вашем балансировщике, развернутом в кластере Managed Service for Kubernetes. Ознакомьтесь с описанием Ingress-контроллера Application Load Balancer и принципами его работы.

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

  1. Если у вас еще нет Terraform, установите его.

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

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

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

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

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

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

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

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

    terraform validate
    

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

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

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

      terraform plan
      

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

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

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

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

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

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

Установите Ingress-контроллер Application Load Balancer и создайте ресурсы в кластере Managed Service for KubernetesУстановите Ingress-контроллер Application Load Balancer и создайте ресурсы в кластере Managed Service for Kubernetes

  1. Установите Ingress-контроллер Yandex Application Load Balancer.

  2. Создайте ресурс IngressClass для Ingress-контроллера L7-балансировщика:

    1. Создайте YAML-файл, в котором опишите ресурс IngressClass.

      Пример ресурса IngressClass:

      apiVersion: networking.k8s.io/v1
      kind: IngressClass
      metadata:
        labels:
          app.kubernetes.io/component: controller
        name: ingress-alb
      spec:
        controller: ingress.alb.yc.io/yc-alb-ingress-controller
      
    2. Создайте ресурс IngressClass с помощью команды:

      kubectl apply -f <файл_с_ресурсом_IngressClass>
      
  3. Создайте ресурс Ingress:

    1. Ознакомьтесь с описанием полей и аннотаций ресурса Ingress и примером.

    2. Создайте YAML-файл, в котором опишите ресурс Ingress:

      • Заполните раздел annotations для настроек L7-балансировщика:

        • ingress.alb.yc.io/subnets — идентификаторы подсетей в трех зонах доступности для узлов L7-балансировщика. Идентификаторы перечисляются через запятую без пробелов.

        • ingress.alb.yc.io/security-groups — идентификатор одной или нескольких групп безопасности для L7-балансировщика. Идентификаторы нескольких групп перечисляются через запятую без пробелов.

        • ingress.alb.yc.io/external-ipv4-address — зарезервированный ранее статический публичный IP-адрес.

        • ingress.alb.yc.io/group-name — имя группы ресурсов Ingress. Ресурсы Ingress объединяются в группы, каждая из которых обслуживается отдельным экземпляром Application Load Balancer с отдельным публичным IP-адресом.

        • ingress.alb.yc.io/security-profile-id — идентификатор созданного ранее профиля безопасности Smart Web Security.

          Важно

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

        • ingress.alb.yc.io/autoscale-min-zone-size — минимальное количество ресурсных единиц в каждой зоне доступности в соответствии с ожидаемой нагрузкой на ваш сервис.

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

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

      • При использовании протокола HTTPS заполните раздел tls:

        • hosts — доменное имя вашего сервиса, которому соответствует TLS-сертификат.
        • secretName — TLS-сертификат вашего сервиса в Yandex Certificate Manager в формате yc-certmgr-cert-id-<идентификатор_сертификата>.
      • Заполните раздел rules в соответствии с правилами распределения входящего трафика по бэкендам в зависимости от доменного имени (поле host) и запрашиваемого ресурса (поле http.paths):

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

        • pathType — тип указания на запрашиваемый ресурс:

          • Exact — путь в URI запроса должен совпадать со значением поля path.
          • Prefix — путь в URI запроса должен начинаться со значения поля path.
        • path — путь в URI входящего запроса (если тип Exact) или его начало (если тип Prefix).

        • backend — указание на бэкенд или группу бэкендов, которые должны обрабатывать запросы с указанным доменным именем и путем в URI. Укажите либо сервис-бэкенд (service), либо группу бэкендов (resource), но не оба одновременно:

          • service — сервис Managed Service for Kubernetes, который должен обрабатывать запросы в качестве бэкенда:

            • name — имя сервиса Managed Service for Kubernetes. Ресурс Service, на который указывает это поле, должен быть описан по конфигурации.
            • port — порт сервиса, к которому будет обращаться Ingress. Для порта сервиса укажите либо номер (number), либо имя (name), но не оба одновременно.

            Важно

            Сервисы Managed Service for Kubernetes, используемые в качестве бэкендов, должны иметь тип NodePort.

          • resource — указание на группу бэкендов HttpBackendGroup, которые должны обрабатывать запросы. Бэкендами в такой группе могут быть сервисы Managed Service for Kubernetes и бакеты Yandex Object Storage. При использовании группы бэкендов доступна расширенная функциональность Application Load Balancer. Также можно указывать относительные веса бэкендов для пропорционального распределения трафика между ними.

            • kind — HttpBackendGroup.
            • name — имя группы бэкендов. Оно должно совпадать с именем, указанным в поле metadata.name ресурса HttpBackendGroup. Ресурс HttpBackendGroup, на который указывает это поле, должен быть описан по конфигурации.
            • apiGroup — alb.yc.io.

      Пример ресурса Ingress:

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: <имя_ресурса>
        annotations:
          ingress.alb.yc.io/subnets: <идентификатор_подсети_ru-central1-a,идентификатор_подсети_ru-central1-b,идентификатор_подсети_ru-central1-d>
          ingress.alb.yc.io/security-groups: <идентификатор_группы_безопасности_L7-балансировщика>
          ingress.alb.yc.io/external-ipv4-address: <статический_публичный_IP-адрес>
          ingress.alb.yc.io/group-name: <имя_группы_ресурсов>
          ingress.alb.yc.io/security-profile-id: <идентификатор_профиля_безопасности_Smart_Web_Security>
          ingress.alb.yc.io/autoscale-min-zone-size: <минимальное_количество_ресурсных_единиц_L7-балансировщика_в_каждой_зоне>
      spec:
        ingressClassName: <имя_ресурса_IngressClass>
        tls:
          - hosts:
              - <имя_домена_сервиса>
            secretName: yc-certmgr-cert-id-<идентификатор_сертификата>
        rules:
          - host: <имя_домена_сервиса>
            http:
              paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: <имя_сервиса_Kubernetes>
                    port:
                      number: <номер_порта,_например_443>
      
    3. Создайте ресурс Ingress с помощью команды:

      kubectl apply -f <файл_с_ресурсом_Ingress>
      
  4. По конфигурации ресурса Ingress будет развернут L7-балансировщик. Дождитесь завершения его создания и привязки к Ingress публичного IP-адреса. Этот IP-адрес понадобится для проверки запросов. Посмотреть информацию о ресурсе вы можете с помощью команды:

    kubectl get ingress <имя_ресурса_Ingress> -w
    

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

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

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

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

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

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

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

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

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

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

  2. В сетевом балансировщике удалите все обработчики для освобождения статического публичного IP-адреса. После этого ваш сервис не будет доступен через сетевой балансировщик.

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

    1. Откройте YAML-файл с описанием ресурса Ingress.

    2. В разделе annotations для поля ingress.alb.yc.io/external-ipv4-address укажите публичный IP-адрес, который ранее был у сетевого балансировщика.

    3. Примените изменения с помощью команды:

      kubectl apply -f <файл_с_ресурсом_Ingress>
      
  4. Дождитесь завершения изменения публичного IP-адреса у ресурса Ingress. Посмотреть информацию о ресурсе вы можете с помощью команды:

    kubectl get ingress <имя_ресурса_Ingress> -w
    

    После изменения IP-адреса восстановится доступность вашего сервиса через L7-балансировщик.

  5. Перейдите в L7-балансировщик:

    1. В консоли управления перейдите в каталог, в котором находится кластер Managed Service for Kubernetes.
    2. Выберите сервис Managed Service for Kubernetes.
    3. Выберите нужный кластер.
    4. Слева выберите Сеть, а в правой части — вкладку Ingress. Для вашего Ingress-ресурса в столбце Балансировщик перейдите по ссылке на L7-балансировщик.
    5. Наблюдайте за пользовательской нагрузкой, поступающей на L7-балансировщик, на графиках статистики работы балансировщика.
  6. Удалите освободившийся статический публичный IP-адрес, который был зарезервирован для L7-балансировщика:

    1. Откройте конфигурационный файл, который вы использовали для создания L7-балансировщика (alb-k8s-http.tf или alb-k8s-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.

  7. (Опционально) После переноса пользовательской нагрузки на L7-балансировщик удалите сетевой балансировщик.

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

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

    Примечание

    Распространение изменений в записи DNS зависит от значения времени жизни записи (TTL) и количества звеньев цепочки DNS-запросов. Это может занять продолжительное время.

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

    1. В консоли управления перейдите в каталог, в котором находится кластер Managed Service for Kubernetes.
    2. Выберите сервис Managed Service for Kubernetes.
    3. Выберите нужный кластер.
    4. Слева выберите Сеть, а в правой части — вкладку Ingress. Для вашего Ingress-ресурса в столбце Балансировщик перейдите по ссылке на L7-балансировщик.
    5. Наблюдайте за пользовательской нагрузкой, поступающей на L7-балансировщик, на графиках статистики работы балансировщика.
  3. Наблюдайте за снижением нагрузки на сетевой балансировщик с помощью метрик балансировщика processed_bytes и processed_packets. Для визуализации этих метрик можно создать дашборд. Отсутствие нагрузки на сетевом балансировщике в течение продолжительного времени свидетельствует о том, что перенос пользовательской нагрузки на L7-балансировщик завершен.

  4. (Опционально) После переноса пользовательской нагрузки на L7-балансировщик удалите сетевой балансировщик.

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

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