Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
Приложения в кластере Yandex Managed Service for Kubernetes можно защитить от DDoS-атак и ботов с помощью сервиса Yandex Smart Web Security. Для этого опубликуйте приложения через ресурс Ingress, которому назначен профиль безопасности Smart Web Security и который использует Ingress-контроллер Application Load Balancer.
Совет
Вместо Ingress-контроллера Application Load Balancer рекомендуется использовать новый контроллер Yandex Cloud Gwin.
Опираясь на ресурс Ingress будет развернут L7-балансировщик с профилем безопасности, подключенным к виртуальным хостам балансировщика. Бэкенды приложений, которые указаны в ресурсе Ingress, будут защищены с помощью Smart Web Security: все поступающие к бэкендам HTTP-запросы будут обработаны в соответствии с правилами в профиле безопасности.
Чтобы через Ingress создать L7-балансировщик с подключенным профилем безопасности:
- Установите Ingress-контроллер Application Load Balancer.
- Создайте тестовое приложение.
- Создайте профиль безопасности.
- Создайте ресурс Ingress.
- Создайте DNS-запись для домена.
- Проверьте результат.
Если созданные ресурсы вам больше не нужны, удалите их.
Необходимые платные ресурсы
В стоимость поддержки описываемого решения входят:
- Плата за 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 (см. тарифы Smart Web Security).
Перед началом работы
-
Подготовьте необходимую инфраструктуру:
ВручнуюTerraform-
Создайте сервисный аккаунт, который будет использоваться Ingress-контроллером Application Load Balancer.
Назначьте аккаунту следующие роли на каталог, в котором будет создан кластер:
-
Важно
Эта роль необходима для корректной интеграции L7-балансировщика Application Load Balancer с профилем безопасности.
-
Создайте сервисный аккаунт, который будет использоваться кластером и группой узлов.
Назначьте аккаунту следующие роли на каталог, в котором будет создан кластер:
-
Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Также настройте группы безопасности, необходимые для работы Application Load Balancer.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Создайте кластер. При создании кластера выберите:
- Cозданный ранее сервисный аккаунт. Используйте его для ресурсов и для узлов.
- Созданные ранее группы безопасности, которые должны быть назначены кластеру.
- Опцию, которая назначает кластеру публичный адрес. Такой адрес нужен, чтобы можно было использовать Kubernetes API из интернета.
-
Создайте группу узлов в кластере. При создании группы узлов выберите:
- Созданные ранее группы безопасности, которые должны быть назначены группе узлов.
- Опцию, которая назначает узлам публичный адрес. Такой адрес нужен, чтобы можно было скачивать образы из интернета.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации кластера 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-адреса.
Базовое правило по умолчанию не указывается в манифесте и создается автоматически.
-
-
Укажите в файле конфигурации:
- Идентификатор каталога.
- Версию Kubernetes для кластера и групп узлов Kubernetes.
- CIDR кластера Kubernetes, CIDR сервисов.
- Имя сервисного аккаунта кластера Managed Service for Kubernetes.
- Имя сервисного аккаунта Application Load Balancer.
- Имя профиля безопасности Smart Web Security.
- IP-адрес, трафик с которого будет разрешен.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Примечание
Если вы развернули инфраструктуру с помощью Terraform, выполнять шаг с Созданием профиля безопасности не нужно.
-
-
Убедитесь, что у вас есть домен и вы можете управлять ресурсными записями в зоне DNS для этого домена. Тестовое приложение будут доступно через Ingress на поддомене этого домена.
Если у вас еще нет домена, зарегистрируйте домен у любого регистратора доменных имен. Чтобы управлять ресурсными записями домена с помощью Yandex Cloud DNS, создайте публичную зону DNS и делегируйте домен.
Примечание
В качестве примера используется домен
example.comи поддоменdemo.example.com.Используйте ваши домены при прохождении этого практического руководства.
-
Установите kubectl
и настройте его на работу с созданным кластером.
Установите Ingress-контроллер Application Load Balancer
-
Установите Ingress-контроллер Application Load Balancer в пространство имен
yc-alb.При установке укажите сервисный аккаунт, который был создан ранее для использования с контроллером.
Использование отдельного пространства имен
yc-albпозволит отделить ресурсы контроллера от ресурсов тестового приложения и Ingress. -
Убедитесь, что контроллер был успешно установлен:
kubectl logs deployment.apps/yc-alb-ingress-controller -n yc-albВ логах должны содержаться сообщения об успешном старте Ingress-контроллера.
... INFO Starting EventSource {"controller": "ingressgroup", ...} ... INFO Starting Control