Всем привет!



Kyverno – это инструмент для работы с политиками в Kubernetes, который может использоваться как для сканирования ресурсов кластера на соответствие лучшим практикам, так и для реализации этих практик путем блокировки или изменения API запросов. Важной особенностью является то, что управление политиками осуществляется аналогично управлению ресурсами Kubernetes. Это значит, что а) изучение нового языка (как в случае с OPA используется Rego, например) не требуется и б) управление политиками можно реализовать через стандартные утилиты, такие как kubectl.



Что можно делать с Kyverno?

🍡Проверять, изменять или генерировать любые ресурсы (например, генерировать квоты для namespaces при необходимости)

🍡Блокировать ресурсы или генерировать отчеты о нарушении политик

🍡Проверять политики и ресурсы в CI/CD сборке до применения в кластере, используя Kyverno CLI и пр.



Как работает Kyverno?

🍡Kyverno запускается в кластере как динамический admission controller,

🍡Посредством webhook получает проверяющие или изменяющие HTTP запросы с kube-apiserver

🍡Применяет соответствующие политики контроля

Установить Kyverno можно или напрямую из манифеста, или используя Helm.



Более подробная информация находится здесь: https://kyverno.io/docs/



А есть ли примеры?

Примеры есть. Один из них представлен ниже.



Запрет на использование пользователя с правами root

apiVersion: kyverno.io/v1

kind: ClusterPolicy

metadata:

name: disallow-root-user

spec:

validationFailureAction: audit

rules:

- name: validate-runAsNonRoot

match:

resources:

kinds:

- Pod

validate:

message: "Running as root user is not allowed. Set runAsNonRoot to true"

anyPattern:

- spec:

securityContext:

runAsNonRoot: true

- spec:

securityContext:

runAsUser: ">0"

- spec:

containers:

- securityContext:

runAsNonRoot: true

- spec:

containers:

- securityContext:

runAsUser: ">0"



Больше примеров можно найти по ссылке: https://github.com/kyverno/kyverno/blob/main/samples/README.md