Files
2026-04-08 20:22:14 +07:00
..
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00

Урок 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