Files
kyverno-2026-example/04-generation/01-configmaps-secrets/README.md
2026-04-08 20:22:14 +07:00

97 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Урок 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
```