Модуль admission-policy-engine обеспечивает применение политик безопасности и операционных политик в кластере Kubernetes. Политики применяются на основе проверок по Pod Security Standards и правил из следующих кастомных ресурсов:
- OperationPolicy — описывает операционную политику кластера;
- SecurityPolicy — описывает политику безопасности кластера;
- SecurityPolicyException — описывает исключения из политики безопасности кластера.
Обработка ресурсов OperationPolicy и SecurityPolicy выполняется модулем deckhouse. Deckhouse-контроллер модуля deckhouse с использованием addon-operator и хуков модуля на основе OperationPolicy и SecurityPolicy создает кастомные ресурсы для Gatekeeper. Gatekeeper использует созданные кастомные ресурсы для валидации создаваемых или обновляемых ресурсов Kubernetes.
Подробнее о концепции хуков можно узнать из документации addon-operator.
Подробнее с описанием модуля можно ознакомиться в разделе документации модуля.
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.
Архитектура модуля admission-policy-engine на уровне 2 модели C4 и его взаимодействие с другими компонентами Deckhouse Kubernetes Platform (DKP) изображены на следующей диаграмме:

Компоненты модуля
Модуль состоит из следующих компонентов:
-
Gatekeeper-controller-manager — это контроллер (Gatekeeper), выполняющий следующие операции:
-
управление кастомными ресурсами Gatekeeper;
-
валидация ресурсов Kubernetes, указанных в кастомных ресурсах из
constraints.gatekeeper.sh/*API-группы; -
мутация ресурсов Kubernetes, указанных в кастомных ресурсах AssignMetadata, Assign, ModifySet и AssignImage.
Правила безопасности задаются с помощью кастомных ресурсов ConstraintTemplate и кастомных ресурсов из API-группы
constraints.gatekeeper.sh/*. ConstraintTemplate описывает новые типы политик, на основании которых создаются конкретные политики безопасности для проверки ресурсов.Состоит из следующих контейнеров:
- manager — основной контейнер;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к метрикам контроллера.
-
-
Gatekeeper-audit — реализует функционал периодической проверки существующих ресурсов Kubernetes на соответствие политикам безопасности.
Состоит из следующих контейнеров:
- manager — основной контейнер;
- constraint-exporter — сайдкар-контейнер, предоставляющий дополнительные метрики по кастомным ресурсам
constraints.gatekeeper.sh/*иmutations.gatekeeper.sh/*; - kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к метрикам
managerиconstraint-exporter.
-
Ratify — опциональный компонент, состоящий из одного контейнера ratify. Он представляет собой реализацию провайдера Gatekeeper для проверки метаданных используемых артефактов. В DKP этот провайдер применяется для проверки подписи образов контейнеров и доступен в редакциях DKP SE+, EE, CSE Lite и CSE Pro.
Gatekeeper использует кастомный ресурс Provider для расширения функционала по валидации ресурсов Kubernetes. Ресурс Provider описывает эндпоинт сервиса, на который Gatekeeper передает запрос при выполнении ValidationWebhook. Некоторые модули DKP, такие как operator-trivy, могут создавать кастомные ресурсы Provider и тем самым расширять функционал проверок.
Взаимодействия модуля
Модуль взаимодействует со следующими компонентами:
-
Kube-apiserver:
- мониторинг ресурсов Kubernetes, указанных в кастомных ресурсах из API-групп
constraints.gatekeeper.sh/*иmutations.gatekeeper.sh/*; - работа с кастомными ресурсами ConstraintTemplate, Assign, AssignImage, AssignMetadata, ModifySet, а также с ресурсами из API-групп
constraints.gatekeeper.sh/*иconfig.ratify.deislabs.io/*.
- мониторинг ресурсов Kubernetes, указанных в кастомных ресурсах из API-групп
С модулем взаимодействуют следующие внешние компоненты:
-
Kube-apiserver — валидация ресурсов Kubernetes и проверка на соответствие заданным правилам безопасности.
-
Prometheus-main — сбор метрик модуля.