Настройка Kyverno & Kyverno Policies
Приложение Kyverno
Чтобы интегрировать Kyverno & Kyverno Policies в Managed Service for Kubernetes:
- Установите приложение Kyverno & Kyverno Policies.
- Проверьте работу политики для профиля baseline.
- Создайте собственную политику Kyverno policies и проверьте ее работу.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
-
Создайте кластер и группу узлов 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 Policies
Установите приложение Kyverno & Kyverno Policies согласно инструкции со следующими настройками:
- Pod Security Standard profile —
baseline
. - Validation failure action —
enforce
.
Профиль Pod Security Standardbaseline
уже содержит минимально ограничительную политику, которая предотвращает известные превышения привилегий.
Проверьте работу политики для профиля baseline
-
Создайте под
nginx
со стандартными параметрами:kubectl run nginx --image nginx
Результат:
pod/nginx created
Такой под удовлетворяет требованиям правил политики для профиля
baseline
. -
Создайте под
nginx
в привилегированном режиме:kubectl run nginx --image nginx --privileged=true
Результат:
Error from server: admission webhook "validate.kyverno.svc-fail" denied the request: policy Pod/default/nginx for resource violation: disallow-privileged-containers: privileged-containers: 'validation error: Privileged mode is disallowed. The fields spec.containers[*].securityContext.privileged and spec.initContainers[*].securityContext.privileged must be unset or set to `false`. rule privileged-containers failed at path /spec/containers/0/securityContext/privileged/'
Правила политики для профиля
baseline
запрещают создание подов в привилегированном режиме.
Примечание
Несмотря на то, что политики предназначены для подов, Kyverno применяет их на все ресурсы, способные создавать поды.
Создайте собственную политику Kyverno policies и проверьте ее работу
-
Создайте политику, которая будет требовать, чтобы все поды имели метку
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
-
Создайте под
nginx
без 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/'
-
Создайте под
nginx
с меткойapp.kubernetes.io/name
:kubectl run nginx --image nginx --labels app.kubernetes.io/name=nginx
Результат:
pod/nginx created
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-