Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Yandex Application Load Balancer
  • Начало работы
    • Все практические руководства
    • Организация виртуального хостинга
    • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
    • Интеграция L7-балансировщика с CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Запись логов балансировщика в PostgreSQL
    • Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием в Yandex Managed Service for Kubernetes
    • Настройка Gateway API в Yandex Managed Service for Kubernetes
    • Настройка L7-балансировщика Application Load Balancer с помощью Ingress-контроллера
    • Настройка логирования для L7-балансировщика Application Load Balancer с помощью Ingress-контроллера
    • Проверка состояния приложений в кластере Managed Service for Kubernetes с помощью L7-балансировщика Application Load Balancer
    • Реализация защищенной высокодоступной сетевой инфраструктуры с выделением DMZ на основе Next-Generation Firewall
    • Создание L7-балансировщика Application Load Balancer с профилем безопасности Smart Web Security
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи L7-балансировщика
  • История изменений
  • Обучающие курсы

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

  • Необходимые платные ресурсы
  • Перед началом работы
  • Установите Ingress-контроллер Application Load Balancer
  • Создайте тестовое приложение
  • Создайте профиль безопасности
  • Создайте ресурс Ingress
  • Создайте DNS-запись для домена
  • Проверьте результат
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer

Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer

Статья создана
Yandex Cloud
Обновлена 26 марта 2025 г.
  • Необходимые платные ресурсы
  • Перед началом работы
  • Установите Ingress-контроллер Application Load Balancer
  • Создайте тестовое приложение
  • Создайте профиль безопасности
  • Создайте ресурс Ingress
    • Создайте DNS-запись для домена
  • Проверьте результат
  • Удалите созданные ресурсы

Приложения в кластере Yandex Managed Service for Kubernetes можно защитить от DDoS-атак и ботов с помощью сервиса Yandex Smart Web Security. Для этого опубликуйте приложения через ресурс Ingress, которому назначен профиль безопасности Smart Web Security и который использует Ingress-контроллер Application Load Balancer.

Опираясь на ресурс Ingress будет развернут L7-балансировщик с профилем безопасности, подключенным к виртуальным хостам балансировщика. Бэкенды приложений, которые указаны в ресурсе Ingress, будут защищены с помощью Smart Web Security: все поступающие к бэкендам HTTP-запросы будут обработаны в соответствии с правилами в профиле безопасности.

Чтобы через Ingress создать L7-балансировщик с подключенным профилем безопасности:

  1. Установите Ingress-контроллер Application Load Balancer.
  2. Создайте тестовое приложение.
  3. Создайте профиль безопасности.
  4. Создайте ресурс Ingress.
  5. Создайте DNS-запись для домена.
  6. Проверьте результат.

Если созданные ресурсы вам больше не нужны, удалите их.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки описываемого решения входят:

  • Плата за DNS-зону и DNS-запросы (см. тарифы Cloud DNS).
  • Плата за кластер Managed Service for Kubernetes: использование мастера и исходящий трафик (см. тарифы Managed Service for Kubernetes).
  • Плата за узлы кластера (ВМ): использование вычислительных ресурсов, операционной системы и хранилища (см. тарифы Compute Cloud).
  • Плата за использование вычислительных ресурсов L7-балансировщика (см. тарифы Application Load Balancer).
  • Плата за публичные IP-адреса для узлов кластера и L7-балансировщика (см. тарифы Virtual Private Cloud).
  • Плата за количество запросов в сервис Smart Web Security (см. тарифы Virtual Private Cloud).

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

  1. Подготовьте необходимую инфраструктуру:

    Вручную
    Terraform
    1. Создайте сервисный аккаунт, который будет использоваться Ingress-контроллером Application Load Balancer.

      Назначьте аккаунту следующие роли на каталог, в котором будет создан кластер:

      • alb.editor,

      • vpc.publicAdmin,

      • compute.viewer,

      • smart-web-security.editor.

        Важно

        Эта роль необходима для корректной интеграции L7-балансировщика Application Load Balancer с профилем безопасности.

    2. Создайте сервисный аккаунт, который будет использоваться кластером и группой узлов.

      Назначьте аккаунту следующие роли на каталог, в котором будет создан кластер:

      • k8s.clusters.agent,
      • vpc.publicAdmin.
    3. Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.

      Также настройте группы безопасности, необходимые для работы Application Load Balancer.

      Важно

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

    4. Создайте кластер. При создании кластера выберите:

      • Cозданный ранее сервисный аккаунт. Используйте его для ресурсов и для узлов.
      • Созданные ранее группы безопасности, которые должны быть назначены кластеру.
      • Опцию, которая назначает кластеру публичный адрес. Такой адрес нужен, чтобы можно было использовать Kubernetes API из интернета.
    5. Создайте группу узлов в кластере. При создании группы узлов выберите:

      • Созданные ранее группы безопасности, которые должны быть назначены группе узлов.
      • Опцию, которая назначает узлам публичный адрес. Такой адрес нужен, чтобы можно было скачивать образы из интернета.
    1. Если у вас еще нет Terraform, установите его.

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

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

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

    5. Скачайте в ту же рабочую директорию файл конфигурации кластера alb-ready-k8s-cluster.tf. В файле описаны:

      • Сеть.

      • Подсеть.

      • Кластер Kubernetes.

      • Сервисный аккаунт, необходимый для работы кластера и группы узлов Managed Service for Kubernetes.

      • Сервисный аккаунт, необходимый для работы Ingress-контроллера Application Load Balancer.

      • Группы безопасности, которые содержат необходимые правила для кластера Managed Service for Kubernetes и входящих в него групп узлов.

        Часть правил необходима для работы Application Load Balancer.

        Важно

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

      • Профиль безопасности Smart Web Security с правилом Smart Protection и простым правилом для проверки работы профиля, которое будет разрешать трафик только с определенного IP-адреса.

        Базовое правило по умолчанию не указывается в манифесте и создается автоматически.

    6. Укажите в файле конфигурации:

      • Идентификатор каталога.
      • Версию Kubernetes для кластера и групп узлов Kubernetes.
      • CIDR кластера Kubernetes, CIDR сервисов.
      • Имя сервисного аккаунта кластера Managed Service for Kubernetes.
      • Имя сервисного аккаунта Application Load Balancer.
      • Имя профиля безопасности Smart Web Security.
      • IP-адрес, трафик с которого будет разрешен.
    7. Проверьте корректность файлов конфигурации Terraform с помощью команды:

      terraform validate
      

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

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

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

        terraform plan
        

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

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

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

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

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

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

    Примечание

    Если вы развернули инфраструктуру с помощью Terraform, выполнять шаг с Созданием профиля безопасности не нужно.

  2. Убедитесь, что у вас есть домен и вы можете управлять ресурсными записями в зоне DNS для этого домена. Тестовое приложение будут доступно через Ingress на поддомене этого домена.

    Если у вас еще нет домена, зарегистрируйте домен у любого регистратора доменных имен. Чтобы управлять ресурсными записями домена с помощью Yandex Cloud DNS, создайте публичную зону DNS и делегируйте домен.

    Примечание

    В качестве примера используется домен example.com и поддомен demo.example.com.

    Используйте ваши домены при прохождении этого практического руководства.

  3. Установите kubectl и настройте его на работу с созданным кластером.

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

  1. Установите Ingress-контроллер Application Load Balancer в пространство имен yc-alb.

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

    Использование отдельного пространства имен yc-alb позволит отделить ресурсы контроллера от ресурсов тестового приложения и Ingress.

  2. Убедитесь, что контроллер был успешно установлен:

    kubectl logs deployment.apps/yc-alb-ingress-controller -n yc-alb
    

    В логах должны содержаться сообщения об успешном старте Ingress-контроллера.

    Пример части результата выполнения команды
    ...    INFO    Starting EventSource    {"controller": "ingressgroup", ...}
    ...    INFO    Starting Controller     {"controller": "ingressgroup"}
    ...    INFO    Starting EventSource    {"controller": "grpcbackendgroup", "controllerGroup": "alb.yc.io", ...}
    ...    INFO    Starting Controller     {"controller": "grpcbackendgroup", "controllerGroup": "alb.yc.io", ...}
    ...    INFO    Starting EventSource    {"controller": "httpbackendgroup", "controllerGroup": "alb.yc.io", ...}
    ...    INFO    Starting Controller     {"controller": "httpbackendgroup", "controllerGroup": "alb.yc.io", ...}
    
    ...
    
    ...    INFO    Starting workers        {"controller": "ingressgroup", ...}
    ...    INFO    Starting workers        {"controller": "grpcbackendgroup", "controllerGroup": "alb.yc.io", ...}
    ...    INFO    Starting workers        {"controller": "httpbackendgroup", "controllerGroup": "alb.yc.io", ...}
    

Создайте тестовое приложениеСоздайте тестовое приложение

Создайте приложение и соответствующий ему сервис, который будет опубликован (exposed) с помощью Ingress:

  1. Создайте манифест demo-app1.yaml для развертывания приложения:

    demo-app1.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: demo-app1
      labels:
        tutorial: sws
    data:
      nginx.conf: |
        worker_processes auto;
        events {
        }
        http {
          server {
            listen 80 ;
            location = /_healthz {
              add_header Content-Type text/plain;
              return 200 'ok';
            }
            location / {
              add_header Content-Type text/plain;
              return 200 'Index';
            }
            location = /app1 {
              add_header Content-Type text/plain;
              return 200 'This is APP#1';
            }
          }
        }
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: demo-app1
      labels:
        app: demo-app1
        tutorial: sws
        version: v1
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: demo-app1
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 0
      template:
        metadata:
          labels:
            app: demo-app1
            version: v1
        spec:
          terminationGracePeriodSeconds: 5
          volumes:
            - name: demo-app1
              configMap:
                name: demo-app1
          containers:
            - name: demo-app1
              image: nginx:latest
              ports:
                - name: http
                  containerPort: 80
              livenessProbe:
                httpGet:
                  path: /_healthz
                  port: 80
                initialDelaySeconds: 3
                timeoutSeconds: 2
                failureThreshold: 2
              volumeMounts:
                - name: demo-app1
                  mountPath: /etc/nginx
                  readOnly: true
              resources:
                limits:
                  cpu: 250m
                  memory: 128Mi
                requests:
                  cpu: 100m
                  memory: 64Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: demo-app1
      labels:
        tutorial: sws
    spec:
      selector:
        app: demo-app1
      type: NodePort
      ports:
        - name: http
          port: 80
          targetPort: 80
          protocol: TCP
    
  2. Разверните приложение:

    kubectl apply -f demo-app1.yaml
    

    Будут созданы объекты ConfigMap, Deployment и Service для приложения demo-app1.

  3. Убедитесь, что все объекты были созданы успешно:

    kubectl get configmap,deployment,svc -l tutorial=sws
    
    Пример результата выполнения команды
    NAME                  DATA   AGE
    configmap/demo-app1   1      ...
    
    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/demo-app1   2/2     2            2           ...
    
    NAME                TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)      AGE
    service/demo-app1   NodePort   ...          <none>        80:.../TCP   ...
    

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

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

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

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

  2. В списке сервисов выберите Smart Web Security.

  3. Нажмите кнопку Создать профиль и выберите По преднастроенному шаблону.

    Профиль будет содержать несколько преднастроенных правил безопасности:

    • Правило Smart Protection с полной защитой для всего трафика. Это правило является приоритетным по отношению к базовому правилу по умолчанию.

    • Базовое правило по умолчанию, которое запрещает весь трафик, не попавший под более приоритетные правила.

      Совет

      Создание преднастроенного профиля с полной защитой Smart Protection является предпочтительным. Рекомендуем использовать его, чтобы обеспечить наибольшую безопасность защищаемого ресурса.

  4. Задайте данные профиля:

    • Имя — имя профиля, например test-sp1.

    • Действие для базового правила по умолчанию — действие, которое должно выполнять базовое правило.

      Оставьте выбранным действие Запретить, чтобы базовое правило запрещало весь трафик.

  5. Добавьте правило безопасности:

    1. Нажмите кнопку Добавить правило.

    2. Укажите основные настройки правила:

      • Имя — имя правила, например test-rule1.

      • Приоритет — укажите такое значение, чтобы правило имело приоритет над преднастроенными правилами. Например, можно указать значение 999800.

        Примечание

        Чем меньше значение параметра, тем больший приоритет у правила. Приоритеты преднастроенных правил:

        • базовое правило по умолчанию — 1000000;
        • правило Smart Protection с полной защитой — 999900.
      • Тип правила — выберите Базовое.

      • Действие — выберите Разрешить.

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

      1. Выберите область действия правила на трафик При условии.
      2. Выберите условие IP.
      3. Выберите условие на IP Совпадает или принадлежит диапазону.
      4. Укажите публичный IP-адрес, например 203.0.113.200.
    4. Нажмите кнопку Добавить.

    В списке правил безопасности появится созданное правило.

  6. Нажмите кнопку Создать.

В списке профилей безопасности появится созданный профиль. Запишите идентификатор этого профиля безопасности — он потребуется позднее.

Создайте ресурс IngressСоздайте ресурс Ingress

В этом ресурсе Ingress будут описаны параметры балансировщика Application Load Balancer. Ingress-контроллер, установленный ранее, развернет балансировщик с указанными параметрами после создания ресурса Ingress.

Согласно правилам Ingress, трафик к виртуальному хосту demo.example.com по пути /app1 будет направляться к бэкенду service/demo-app1. Созданный ранее профиль безопасности будет использоваться, чтобы защитить этот бэкенд.

Чтобы создать ресурс Ingress:

  1. Создайте файл demo-ingress.yaml с описанием ресурса Ingress:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: demo-ingress
      annotations:
        ingress.alb.yc.io/subnets: "<список_идентификаторов_подсетей>"
        ingress.alb.yc.io/security-groups: "<идентификатор_группы_безопасности>"
        ingress.alb.yc.io/external-ipv4-address: "auto"
        ingress.alb.yc.io/group-name: "demo-sws"
        ingress.alb.yc.io/security-profile-id: "<идентификатор_профиля_безопасности>"
    spec:
      rules:
        - host: demo.example.com
          http:
            paths:
              - path: /app1
                pathType: Exact
                backend:
                  service:
                    name: demo-app1
                    port:
                      number: 80
    

    Где:

    • ingress.alb.yc.io/subnets — список идентификаторов подсетей, в которых будет расположен балансировщик.

      Если вы создали инфраструктуру с помощью Terraform, используйте идентификатор подсети, которая имеет имя subnet-a.

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

      Если вы создали инфраструктуру с помощью Terraform, укажите идентификатор группы, которая имеет имя alb-traffic.

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

      Примечание

      Профиль безопасности будет применен только к виртуальным хостам для ресурса Ingress, в котором задана аннотация. Для ресурса Ingress, который описан выше, профиль будет применен к единственному виртуальному хосту demo.example.com.

      Этот ресурс Ingress — единственный в группе Ingress demo-sws. Профиль безопасности не будет применен к виртуальным хостам других ресурсов Ingress, если такие ресурсы будут позднее добавлены в группу.

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

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