Контроль допуска (Admission Control) — механизм обработки запросов Kubernetes, который на основе заданных политик определяет, следует ли разрешить или отклонить запрос на создание, обновление или удаление объектов.
Container Security позволяет создавать свои собственные политики контроля допуска, используя встроенный инструмент управления политиками.
Container Security поддерживает создание политик валидации:
Kubernetes — нативные Kubernetes-политики валидации. Политика применяется для объектов, определенных в биндинге.
Kyverno (весь кластер) — расширенные политики валидации, которые применяются для объектов всего кластера.
Kyverno (пространство имен) — расширенные политики валидации, которые применяются для объектов указанного пространства имен в кластере.
Для политик валидации используются следующие режимы проверки validationActions:
Deny
Warn
Audit
В режиме Deny при нарушении политики валидации действие с объектом, например создание или изменение, заблокируется.
В режимах Audit и Warn нарушение правила не препятствует действию с объектом. Операция разрешается, но информация о несоответствии:
Фиксируется в отчете, если указан режим Audit.
Отображается сразу, если указан режим Warn.
Поды — один из самых распространенных типов объектов в Kubernetes, и поэтому они являются основой большинства правил валидации. Однако создание подов напрямую почти не практикуется.
Вместо прямого создания подов в Kubernetes обычно используют высокоуровневые контроллеры, которые управляют подами автоматически. К таким контроллерам относятся Deployment, DaemonSet, StatefulSet, Job и CronJob.
Создавать отдельные политики, ориентированные непосредственно на поды, для Deployment, DaemonSet, StatefulSet, Job и CronJob было бы трудоемко и избыточно.
Container Security устраняет эту проблему: если политика валидации Kyverno написана специально для пода, система генерирует соответствующие политики и для контроллеров более высокого уровня.
Поведение автоматической генерации политики управляется параметром spec.autogen.podControllers.controllers в Kyverno-политике. Достаточно перечислить в аннотации контроллеры, для которых которых будут автоматически создаваться политики:
spec:autogen:podControllers:controllers:- deployments- statefulsets
В примере Container Security сгенерирует правила для Deployment и StatefulSet.
Container Security может проверять объекты, созданные в кластере до создания политики, на соответствие политикам валидации Kyverno. Такая проверка необходима для оценки влияния новых политик валидации на кластер перед их переводом в режим «Deny».
Чтобы фоновое сканирование выполнялось, необходимо в YAML-конфигурации политики для параметра spec.background.evaluation.enabled указать значение true:
spec:evaluation:background:enabled: true
Если в ходе фонового сканирования обнаруживаются объекты, нарушающие действующую политику, информация об этом публикуется в отчете.
Фоновое сканирование не блокирует существующие ресурсы, подпадающие под действие правила.
Для отключения фонового сканирования в YAML-конфигурации политики для параметра spec.background.evaluation.enabled необходимо указать значение false:
spec:evaluation:background:enabled: false