Что такое Admission Webhook в Kubernetes?

«Что такое Admission Webhook в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Admission Webhook — это механизм в Kubernetes, который позволяет перехватывать и обрабатывать запросы к API-серверу (например, на создание Pod или Deployment) до их сохранения в хранилище etcd. Это мощный инструмент для внедрения кастомной логики валидации или модификации ресурсов.

Существует два основных типа:

  1. Mutating Admission Webhook: Может изменять объект запроса. Например, автоматически добавлять sidecar-контейнер для мониторинга или инжектировать переменные среды во все Pod'ы определенного приложения.
  2. 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-сервер и замедлить работу кластера.
  • Вебхук должен быть быстрым и надежным. Длительный таймаут или недоступность вебхука могут заблокировать операции в кластере.