Лабораторная 5.4: Развёртывание вебхуков и сертификаты
Связанный урок: Урок 5.4: Развёртывание вебхуков и сертификаты
Навигация: ← Предыдущая лабораторная: Мутирующие вебхуки | Обзор модуля
Цели
- Понять требования к сертификатам для вебхуков
- Развернуть оператор с вебхуками в кластер
- Настроить cert-manager для управления сертификатами
- Устранять неполадки вебхуков
Предварительные требования
- Завершение Лабораторной 5.3
- Оператор Database с вебхуками
- Понимание TLS и сертификатов
- Кластер kind с установленным cert-manager (из
scripts/setup-kind-cluster.sh)
Понимание требований к сертификатам вебхуков
Вебхукам нужны TLS-сертификаты, потому что API-сервер Kubernetes взаимодействует с вебхуками по HTTPS. Сертификат должен быть доверенным для API-сервера.
Два подхода:
- cert-manager (рекомендуется) — автоматически управляет сертификатами в кластере
- Ручные сертификаты — только для особых случаев
Примечание: проект, сгенерированный kubebuilder, уже настроен для работы с cert-manager.
config/default/kustomization.yamlвключает ресурсы cert-manager.
Упражнение 1: проверка настройки Cert-Manager
Задача 1.1: проверьте, что Cert-Manager запущен
# If you used scripts/setup-kind-cluster.sh, cert-manager is already installed
kubectl get pods -n cert-manager
# Should show:
# cert-manager-xxx Running
# cert-manager-cainjector-xxx Running
# cert-manager-webhook-xxx Running
Задача 1.2: установите Cert-Manager (если не установлен)
# Only if cert-manager is not running
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.0/cert-manager.yaml
# Wait for cert-manager to be ready
kubectl wait --for=condition=Available deployment/cert-manager -n cert-manager --timeout=120s
kubectl wait --for=condition=Available deployment/cert-manager-webhook -n cert-manager --timeout=120s
kubectl wait --for=condition=Available deployment/cert-manager-cainjector -n cert-manager --timeout=120s
Упражнение 2: изучение конфигурации Cert-Manager в Kubebuilder
Задача 2.1: проверьте конфигурацию сертификата
cd ~/postgres-operator
# Check cert-manager configuration
cat config/certmanager/certificate-*.yaml
Это определяет ресурс Certificate, который cert-manager будет использовать для генерации TLS-сертификатов для вебхука.
Задача 2.2: проверьте Kustomization
# Check how cert-manager is integrated
cat config/default/kustomization.yaml
config/default/kustomization.yaml должен включать ../certmanager для активации интеграции с cert-manager.
Упражнение 3: развёртывание оператора с вебхуками
Задача 3.1: соберите образ оператора
cd ~/postgres-operator
# Build the container image
make docker-build IMG=postgres-operator:latest
# For Podman users:
# make docker-build IMG=postgres-operator:latest CONTAINER_TOOL=podman
Задача 3.2: загрузите образ в Kind
# For Docker:
kind load docker-image postgres-operator:latest --name k8s-operators-course
# For Podman:
# podman save localhost/postgres-operator:latest -o /tmp/postgres-operator.tar
# kind load image-archive /tmp/postgres-operator.tar --name k8s-operators-course
# rm /tmp/postgres-operator.tar
Задача 3.3: разверните в кластер
# Deploy operator with webhooks
make deploy IMG=postgres-operator:latest
# For Podman users:
# make deploy IMG=localhost/postgres-operator:latest
Задача 3.4: проверьте развёртывание
# Check deployment
kubectl get deployment -n postgres-operator-system
# Check pods
kubectl get pods -n postgres-operator-system
# Wait for pod to be ready
kubectl wait --for=condition=Ready pod -l control-plane=controller-manager -n postgres-operator-system --timeout=120s
Упражнение 4: проверка конфигурации вебхука
Задача 4.1: проверьте конфигурации вебхуков
# Check validating webhook
kubectl get validatingwebhookconfigurations
# Check mutating webhook
kubectl get mutatingwebhookconfigurations
# Get details
kubectl describe validatingwebhookconfiguration postgres-operator-validating-webhook-configuration
Задача 4.2: проверьте сертификаты
# Check certificate was created by cert-manager
kubectl get certificate -n postgres-operator-system
# Check certificate status
kubectl describe certificate -n postgres-operator-system
# Check the secret containing TLS certs
kubectl get secret -n postgres-operator-system | grep tls
Задача 4.3: проверьте сервис вебхука
# Check webhook service
kubectl get service -n postgres-operator-system
# Check service endpoints
kubectl get endpoints -n postgres-operator-system
Упражнение 5: тестирование вебхуков
Задача 5.1: протестируйте мутирующий вебхук (значения по умолчанию)
# Create resource with minimal spec
kubectl apply -f - <<EOF
apiVersion: database.example.com/v1
kind: Database
metadata:
name: webhook-test
spec:
databaseName: mydb
username: admin
storage:
size: 10Gi
EOF
# Check if defaults were applied
echo "Image (should be defaulted):"
kubectl get database webhook-test -o jsonpath='{.spec.image}'
echo
echo "Replicas (should be defaulted):"
kubectl get database webhook-test -o jsonpath='{.spec.replicas}'
echo
echo "Labels (should include managed-by):"
kubectl get database webhook-test -o jsonpath='{.metadata.labels}'
echo
Задача 5.2: протестируйте валидирующий вебхук (отклонение)
# Try to create invalid resource
kubectl apply -f - <<EOF
apiVersion: database.example.com/v1
kind: Database
metadata:
name: invalid-test
spec:
image: nginx:latest # Invalid - not a postgres image
databaseName: mydb
username: admin
storage:
size: 10Gi
EOF
# Should be rejected with validation error
Задача 5.3: протестируйте валидацию обновления
# Try to reduce storage (should fail)
kubectl patch database webhook-test --type merge -p '{"spec":{"storage":{"size":"5Gi"}}}'
# Should be rejected
Упражнение 6: устранение неполадок вебхуков
Задача 6.1: проверьте логи оператора
# Get operator logs
kubectl logs -n postgres-operator-system deployment/postgres-operator-controller-manager
# Look for webhook-related messages
kubectl logs -n postgres-operator-system deployment/postgres-operator-controller-manager | grep -i webhook
Задача 6.2: проверьте статус сертификата
# Check certificate status
kubectl get certificate -n postgres-operator-system -o wide
# Describe for details
kubectl describe certificate -n postgres-operator-system
# Check cert-manager logs if certificate not ready
kubectl logs -n cert-manager deployment/cert-manager
Задача 6.3: распространённые проблемы и их решения
Проблема: сертификат не готов
# Check cert-manager is running
kubectl get pods -n cert-manager
# Check certificate events
kubectl describe certificate -n postgres-operator-system
Проблема: отказ в соединении с вебхуком
# Check service endpoints
kubectl get endpoints -n postgres-operator-system
# Check pod is running
kubectl get pods -n postgres-operator-system
Проблема: несоответствие CA bundle
# Check CA bundle in webhook config
kubectl get validatingwebhookconfiguration -o jsonpath='{.items[0].webhooks[0].clientConfig.caBundle}' | base64 -d | openssl x509 -text -noout | head -20
Очистка
# Delete test resources
kubectl delete databases --all
# Undeploy operator
make undeploy
Итоги лабораторной
В этой лабораторной вы:
- Проверили настройку cert-manager
- Изучили интеграцию kubebuilder с cert-manager
- Развернули оператор с вебхуками в кластер
- Проверили конфигурацию вебхуков и сертификаты
- Протестировали функциональность вебхуков
- Изучили приёмы устранения неполадок
Ключевые уроки
- Вебхукам нужны TLS-сертификаты — API-сервер должен им доверять
- cert-manager автоматически управляет сертификатами в кластере
- Проекты kubebuilder предварительно настроены для cert-manager
- Вебхуки не могут легко работать через
make run(требуют развёртывания в кластере) - Используйте
kubectl describeи логи для устранения неполадок - Проблемы с сертификатами распространены — сначала проверяйте статус cert-manager
Решения
Эта лабораторная посвящена развёртыванию и сертификатам. Для реализации вебхуков см.:
- Validating Webhook — из Лабораторной 5.2
- Mutating Webhook — из Лабораторной 5.3
Поздравляем!
Вы завершили Модуль 5! Теперь вы понимаете:
- Контроль допуска и вебхуки
- Валидирующие вебхуки для пользовательской валидации
- Мутирующие вебхуки для установки значений по умолчанию
- Управление сертификатами с cert-manager
- Развёртывание вебхуков и устранение неполадок
В Модуле 6 вы изучите тестирование и отладку операторов!