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

Урок 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: Начальная версия