Урок 5.3 — Переиспользуемые шаблоны политик (Helm Chart)
Структура
kyverno-policies/
├── Chart.yaml
├── values.yaml # дефолтные значения
├── values-staging.yaml # overrides для staging
├── values-production.yaml # overrides для production
├── templates/
│ ├── require-resource-limits.yaml
│ ├── disallow-privileged.yaml
│ ├── require-labels.yaml
│ └── generate-networkpolicy.yaml
└── tests/
├── kyverno-test.yaml
└── resources/
├── pod-compliant.yaml
├── pod-no-limits.yaml
├── pod-privileged.yaml
└── deployment-no-labels.yaml
Запуск тестов (без кластера)
cd kyverno-policies
# Сгенерировать манифесты из шаблонов и протестировать
helm template . -f values.yaml | \
kyverno apply - --resource tests/resources/ --table
# Запустить встроенные kyverno тесты
# (сначала нужно отрендерить шаблоны в обычные YAML)
helm template . -f values.yaml --output-dir /tmp/rendered-policies
kyverno test tests/ \
--policy-report \
--detailed-results
Деплой в кластер
# Staging — всё в Audit
helm upgrade --install kyverno-policies . \
--namespace kyverno \
--create-namespace \
-f values-staging.yaml
# Production — Enforce
helm upgrade --install kyverno-policies . \
--namespace kyverno \
--create-namespace \
-f values-production.yaml
# Проверить задеплоенные политики
kubectl get clusterpolicies -l helm.sh/chart=kyverno-policies-1.0.0
# Rollback если что-то пошло не так
helm rollback kyverno-policies 1 -n kyverno
PolicyException — управляемые исключения
# Применить временное исключение для legacy-сервиса
kubectl apply -f - <<EOF
apiVersion: kyverno.io/v2beta1
kind: PolicyException
metadata:
name: legacy-app-exception
namespace: production
annotations:
exception.company.com/expires: "2025-03-01"
exception.company.com/reason: "Migration in progress — JIRA-1234"
exception.company.com/approved-by: "platform-team"
spec:
exceptions:
- policyName: require-resource-limits
ruleNames:
- check-container-limits
match:
resources:
kinds:
- Pod
namespaces:
- production
names:
- legacy-app-*
EOF
# Посмотреть все активные исключения
kubectl get policyexceptions -A
CI/CD для Helm chart политик
# Линтинг
helm lint . -f values.yaml
helm lint . -f values-production.yaml
# Dry-run деплой
helm upgrade --install kyverno-policies . \
--namespace kyverno \
-f values-production.yaml \
--dry-run
# diff перед применением (требует helm-diff plugin)
helm plugin install https://github.com/databus23/helm-diff
helm diff upgrade kyverno-policies . \
--namespace kyverno \
-f values-production.yaml
Версионирование изменений
# При изменении политики — обновляйте версию в Chart.yaml
# и добавляйте запись в аннотацию политики:
annotations:
policies.kyverno.io/version: "1.1.0"
policies.kyverno.io/changelog: |
1.1.0: Добавлена проверка ephemeral containers
1.0.0: Начальная версия