Files
kyverno-2026-example/02-validation/01-resource-validation/README.md
2026-04-08 20:22:14 +07:00

82 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Урок 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 |
## Применение политик
```bash
# Применить все политики из папки
kubectl apply -f .
# Проверить статус
kubectl get clusterpolicies
# Подробный статус
kubectl get clusterpolicies -o wide
```
## Локальное тестирование через Kyverno CLI
```bash
# Протестировать одну политику
kyverno apply require-resource-limits.yaml \
--resource test-resources/pod-no-limits.yaml
# Протестировать все политики против всех ресурсов
kyverno apply . --resource test-resources/ --table
# Запустить встроенные тесты
kyverno test tests/
```
## Тестирование в кластере
```bash
# Попытка создать под без 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 — миграция без риска
```bash
# Переключить политику в 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"}}'
```