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