Модуль 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) изображены на следующей диаграмме:

Архитектура модуля admission-policy-engine

Компоненты модуля

Модуль состоит из следующих компонентов:

  1. Gatekeeper-controller-manager — это контроллер (Gatekeeper), выполняющий следующие операции:

    Правила безопасности задаются с помощью кастомных ресурсов ConstraintTemplate и кастомных ресурсов из API-группы constraints.gatekeeper.sh/*. ConstraintTemplate описывает новые типы политик, на основании которых создаются конкретные политики безопасности для проверки ресурсов.

    Состоит из следующих контейнеров:

    • manager — основной контейнер;
    • kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к метрикам контроллера.
  2. Gatekeeper-audit — реализует функционал периодической проверки существующих ресурсов Kubernetes на соответствие политикам безопасности.

    Состоит из следующих контейнеров:

    • manager — основной контейнер;
    • constraint-exporter — сайдкар-контейнер, предоставляющий дополнительные метрики по кастомным ресурсам constraints.gatekeeper.sh/* и mutations.gatekeeper.sh/*;
    • kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищенного доступа к метрикам manager и constraint-exporter.
  3. 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/*.

С модулем взаимодействуют следующие внешние компоненты:

  1. Kube-apiserver — валидация ресурсов Kubernetes и проверка на соответствие заданным правилам безопасности.

  2. Prometheus-main — сбор метрик модуля.

Дополнительные ресурсы