Урок 2.1 — Создание политик валидации ресурсов
Файлы
| Файл | Описание |
|---|---|
require-resource-limits.yaml |
Обязательные CPU и memory limits |
disallow-latest-tag.yaml |
Запрет тега :latest |
allow-only-trusted-registries.yaml |
Только внутренние реестры |
require-labels.yaml |
Обязательные стандартные лейблы |
require-min-replicas-production.yaml |
Минимум 2 реплики в production |
Применение политик
# Применить все политики из папки
kubectl apply -f .
# Проверить статус
kubectl get clusterpolicies
# Подробный статус
kubectl get clusterpolicies -o wide
Локальное тестирование через Kyverno CLI
# Протестировать одну политику
kyverno apply require-resource-limits.yaml \
--resource test-resources/pod-no-limits.yaml
# Протестировать все политики против всех ресурсов
kyverno apply . --resource test-resources/ --table
# Запустить встроенные тесты
kyverno test tests/
Тестирование в кластере
# Попытка создать под без limits (должна быть ошибка)
kubectl apply -f test-resources/pod-no-limits.yaml
# Создать корректный под
kubectl apply -f test-resources/pod-with-limits.yaml
# Попытка создать под с образом :latest
kubectl apply -f test-resources/pod-latest-image.yaml
# Посмотреть PolicyReport после создания
kubectl get policyreports -n default
kubectl describe policyreport -n default
# Найти все нарушения
kubectl get policyreports -A -o json | \
jq -r '.items[] | .metadata.namespace as $ns |
.results[] | select(.result == "fail") |
"\($ns)/\(.resources[0].name): \(.policy)/\(.rule): \(.message)"'
Режим Audit — миграция без риска
# Переключить политику в Audit режим для оценки нарушений
kubectl patch clusterpolicy require-resource-limits \
--type merge \
-p '{"spec":{"validationFailureAction":"Audit"}}'
# Посмотреть нарушения без блокировки
kubectl get policyreports -A -o json | \
jq '[.items[].results[] | select(.result == "fail") | .policy] |
group_by(.) | map({policy: .[0], violations: length}) |
sort_by(-.violations)[]'
# После исправления — переключить обратно
kubectl patch clusterpolicy require-resource-limits \
--type merge \
-p '{"spec":{"validationFailureAction":"Enforce"}}'