Ответ
Admission Webhook — это механизм в Kubernetes, который позволяет перехватывать и обрабатывать запросы к API-серверу (например, на создание Pod или Deployment) до их сохранения в хранилище etcd. Это мощный инструмент для внедрения кастомной логики валидации или модификации ресурсов.
Существует два основных типа:
- Mutating Admission Webhook: Может изменять объект запроса. Например, автоматически добавлять sidecar-контейнер для мониторинга или инжектировать переменные среды во все Pod'ы определенного приложения.
- Validating Admission Webhook: Может только проверять объект на соответствие политикам и отклонять запрос. Например, проверять, что у всех Pod'ов установлены корректные метки (labels) или что контейнеры не запускаются от имени root.
Пример конфигурации ValidatingWebhookConfiguration:
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: "pod-security-policy.example.com"
webhooks:
- name: "pod-security-policy.example.com"
rules:
- apiGroups: [""]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["pods"]
scope: "*"
clientConfig:
service:
namespace: "kube-system"
name: "pod-security-webhook"
path: "/validate-pod"
port: 443
admissionReviewVersions: ["v1"]
sideEffects: None
timeoutSeconds: 5
Ключевые моменты для продакшена:
- Вебхук-сервер должен работать по HTTPS. Для этого нужны корректно подписанные TLS-сертификаты, обычно управляемые через сертификаты, выпущенные встроенным в кластер CA.
- Необходимо тщательно проектировать правила (
rules), чтобы вебхук вызывался только для нужных ресурсов и операций, иначе можно создать нагрузку на API-сервер и замедлить работу кластера. - Вебхук должен быть быстрым и надежным. Длительный таймаут или недоступность вебхука могут заблокировать операции в кластере.