Настройка Kyverno & Kyverno Policies
Приложение Kyverno
Чтобы интегрировать Kyverno & Kyverno Policies в Managed Service for Kubernetes:
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
-
Создайте кластер и группу узлов Managed Service for Kubernetes.
ВручнуюTerraform-
Если у вас еще нет сети, создайте ее.
-
Если у вас еще нет подсетей, создайте их в зонах доступности, где будут созданы кластер Kubernetes и группа узлов.
-
Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации.
-
Настройте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации кластера k8s-cluster.tf
. В файле описаны:-
Сеть.
-
Кластер Managed Service for Kubernetes.
-
Сервисный аккаунт, необходимый для работы кластера и группы узлов Managed Service for Kubernetes.
-
Группы безопасности, которые содержат необходимые правила для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
-
Укажите в файле конфигурации:
- Идентификатор каталога.
- Версию Kubernetes для кластера и групп узлов Managed Service for Kubernetes.
- CIDR кластера Kubernetes.
- Имя сервисного аккаунта. Оно должно быть уникальным в рамках каталога.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
-
-
Установите kubectl
и настройте его на работу с созданным кластером.
Создайте политику Kyverno
-
Установите приложение Kyverno & Kyverno Policies согласно инструкции.
-
Создайте политику, которая будет требовать, чтобы все поды имели Kubernetes-метку
app.kubernetes.io/name
.-
Сохраните спецификацию для создания объекта
ClusterPolicy
в YAML-файл с названиемpolicy.yaml
:apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: require-labels spec: validationFailureAction: enforce rules: - name: check-for-labels match: any: - resources: kinds: - Pod validate: message: "label 'app.kubernetes.io/name' is required" pattern: metadata: labels: app.kubernetes.io/name: "?*"
-
Выполните команду:
kubectl apply -f ./policy.yaml
Результат:
clusterpolicy.kyverno.io/require-labels created
-
-
(Опционально) Установите Policy Reporter в кластер Managed Service for Kubernetes, чтобы получить возможность сохранять и обрабатывать результаты срабатывания политики.
Проверьте работу Kyverno & Kyverno Policies
-
Создайте под без Kubernetes-метки
app.kubernetes.io/name
:kubectl run nginx --image nginx
Результат:
Error from server: admission webhook "validate.kyverno.svc-fail" denied the request: resource Pod/default/nginx was blocked due to the following policies require-labels: check-for-labels: 'validation error: label ''app.kubernetes.io/name'' is required. Rule check-for-labels failed at path /metadata/labels/app.kubernetes.io/name/'
-
Создайте под с Kubernetes-меткой
app.kubernetes.io/name
:kubectl run nginx --image nginx --labels app.kubernetes.io/name=nginx
Результат:
pod/nginx created
Примечание
Несмотря на то, что политики предназначены для подов, Kyverno применяет их на все ресурсы, способные создавать поды.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
В командной строке перейдите в директорию, в которой расположен актуальный конфигурационный файл Terraform с планом инфраструктуры.
-
Удалите конфигурационный файл
k8s-cluster.tf
. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Все ресурсы, которые были описаны в конфигурационном файле
k8s-cluster.tf
, будут удалены. -