Урок 4.1 — Автоматическое создание ConfigMaps и Secrets
Файлы
| Файл | Триггер | Что создаёт |
|---|---|---|
generate-namespace-config.yaml |
Namespace | ConfigMap с мета-данными namespace |
generate-default-networkpolicy.yaml |
Namespace | NetworkPolicy deny-all |
generate-resource-quota.yaml |
Namespace | ResourceQuota по tier |
quota-defaults-configmap.yaml |
— | ConfigMap с квотами (нужен заранее) |
clone-registry-secret.yaml |
Namespace | Копия registry Secret |
generate-developer-rolebinding.yaml |
Namespace+label | RoleBinding для команды |
developer-clusterrole.yaml |
— | ClusterRole developer (нужна заранее) |
Подготовка (применить до политик)
# 1. Создать ConfigMap с квотами
kubectl apply -f quota-defaults-configmap.yaml
# 2. Создать ClusterRole developer
kubectl apply -f developer-clusterrole.yaml
# 3. Создать мастер-секрет для registry (замените данные на реальные)
kubectl create secret docker-registry registry-credentials-master \
--docker-server=registry.company.com \
--docker-username=robot-account \
--docker-password=your-token \
--namespace=kyverno
# 4. Применить все политики
kubectl apply -f generate-namespace-config.yaml
kubectl apply -f generate-default-networkpolicy.yaml
kubectl apply -f generate-resource-quota.yaml
kubectl apply -f clone-registry-secret.yaml
kubectl apply -f generate-developer-rolebinding.yaml
Тест: создать namespace и проверить генерацию
# Создать тестовый namespace
kubectl create namespace test-team \
--dry-run=client -o yaml | \
kubectl apply -f -
kubectl label namespace test-team \
team=platform \
tier=standard \
environment=staging
# Подождать ~5 секунд для генерации, затем проверить
kubectl get configmap,networkpolicy,resourcequota,rolebinding \
-n test-team
# Детали сгенерированных ресурсов
kubectl get configmap namespace-config -n test-team -o yaml
kubectl get networkpolicy default-deny-all -n test-team -o yaml
kubectl get resourcequota default-quota -n test-team -o yaml
Тест synchronize — защита от случайного удаления
# Удалить NetworkPolicy вручную
kubectl delete networkpolicy default-deny-all -n test-team
# Kyverno восстановит её через несколько секунд
sleep 10
kubectl get networkpolicy -n test-team
# default-deny-all снова присутствует
Тест cascade delete
# Удалить namespace — все сгенерированные ресурсы удалятся вместе с ним
kubectl delete namespace test-team
# Проверить что ресурсы не зависли
kubectl get generaterequests -n kyverno
Мониторинг GenerateRequests
# Просмотр очереди генерации
kubectl get generaterequests -n kyverno -o wide
# Детали при ошибке
kubectl describe generaterequests -n kyverno | grep -A 20 "Status:"
# Метрики генерации
kubectl port-forward -n kyverno svc/kyverno-svc-metrics 8000:8000 &
curl -s http://localhost:8000/metrics | grep kyverno_generate