Files
2026-04-08 20:22:14 +07:00

69 lines
2.8 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
apiVersion: kyverno.io/v1
kind: ClusterPolicy # ClusterPolicy = все namespace, Policy = один namespace
metadata:
name: annotated-example-policy
annotations:
# Мета-информация для Kyverno UI и PolicyReport
policies.kyverno.io/title: "Пример структуры политики"
policies.kyverno.io/category: "Best Practices"
policies.kyverno.io/severity: medium # critical | high | medium | low
policies.kyverno.io/subject: "Pod"
policies.kyverno.io/description: >-
Пример политики с подробными комментариями.
Требует наличия лейбла app у всех Podов.
policies.kyverno.io/version: "1.0.0"
spec:
# Enforce = отклонять запросы при нарушении
# Audit = пропускать, но фиксировать в PolicyReport
validationFailureAction: Audit
# true = проверять также уже существующие ресурсы (через background controller)
background: true
rules:
- name: require-app-label # уникальное имя правила внутри политики
# match: к каким ресурсам применяется правило
match:
any: # ИЛИ: ресурс попадает хотя бы под одно условие
- resources:
kinds:
- Pod
namespaces:
- default
- production
- staging
# exclude: ресурсы-исключения (не будут проверяться)
exclude:
resources:
namespaces:
- kube-system
- kyverno
selector:
matchLabels:
kyverno.io/skip-validation: "true"
# preconditions: дополнительные условия применения правила
# (match фильтрует по типу, preconditions — по содержимому)
preconditions:
any:
- key: "{{ request.operation }}"
operator: In
value: ["CREATE", "UPDATE"] # не проверять DELETE
# validate: правило проверки
validate:
# Сообщение об ошибке (поддерживает переменные)
message: >-
Pod '{{ request.object.metadata.name }}'
в namespace '{{ request.object.metadata.namespace }}'
должен иметь лейбл 'app'.
Добавьте: metadata.labels.app: <имя-приложения>
# pattern: описание того, как должен выглядеть ресурс
pattern:
metadata:
labels:
app: "?*" # поле должно существовать и быть не пустым