init
This commit is contained in:
81
02-validation/01-resource-validation/README.md
Normal file
81
02-validation/01-resource-validation/README.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# Урок 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"}}'
|
||||
```
|
||||
Reference in New Issue
Block a user