# Урок 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 (нужна заранее) | ## Подготовка (применить до политик) ```bash # 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 и проверить генерацию ```bash # Создать тестовый 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 — защита от случайного удаления ```bash # Удалить NetworkPolicy вручную kubectl delete networkpolicy default-deny-all -n test-team # Kyverno восстановит её через несколько секунд sleep 10 kubectl get networkpolicy -n test-team # default-deny-all снова присутствует ``` ## Тест cascade delete ```bash # Удалить namespace — все сгенерированные ресурсы удалятся вместе с ним kubectl delete namespace test-team # Проверить что ресурсы не зависли kubectl get generaterequests -n kyverno ``` ## Мониторинг GenerateRequests ```bash # Просмотр очереди генерации 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 ```