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"}}'
|
|
```
|