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

Урок 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"}}'