82 lines
2.8 KiB
Markdown
82 lines
2.8 KiB
Markdown
# Урок 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"}}'
|
||
```
|