# Урок 1.3 — Структура и синтаксис политик Kyverno ## Анатомия политики Откройте `annotated-policy.yaml` — в нём каждое поле прокомментировано. ## Операторы в паттернах | Оператор | Значение | Пример | |----------|----------|--------| | `?*` | поле существует и не пустое | `app: "?*"` | | `*` | wildcard, любое значение | `image: "*.azurecr.io/*"` | | `^(a\|b)$` | регулярное выражение | `env: "^(dev\|staging\|production)$"` | | `>=2` | числовое сравнение | `replicas: ">=2"` | | `=(field)` | опциональное поле | `=(privileged): false` | | `+(field)` | добавить только если нет (в mutate) | `+(label): value` | ## Структура match ```yaml match: any: # ИЛИ — любое из условий - resources: kinds: [Pod] namespaces: [production] all: # И — все условия одновременно - resources: kinds: [Deployment] - subjects: - kind: ServiceAccount name: my-sa ``` ## Практические задания ```bash # 1. Изучить структуру политики cat annotated-policy.yaml # 2. Применить политику kubectl apply -f annotated-policy.yaml # 3. Протестировать через kyverno CLI без кластера kyverno apply annotated-policy.yaml --resource test-resources/pod-good.yaml kyverno apply annotated-policy.yaml --resource test-resources/pod-bad.yaml # 4. Применить тестовые ресурсы в кластер kubectl apply -f test-resources/ # 5. Посмотреть результаты в PolicyReport kubectl get policyreports -n default -o yaml # 6. Удалить ресурсы kubectl delete -f test-resources/ kubectl delete -f annotated-policy.yaml ```