✦ For everyone, free.

Practical knowledge for real and everyday life

Home

Kubernetes Extension Webhook Management

Kubernetes Extension Webhook Management enables secure, policy-driven control over cluster operations through custom webhook integrations.

Kubernetes Extension Webhook Management is the operational practice of deploying, scoping, and safeguarding admission webhooks in production, covering TLS certificate provisioning, namespace and object selectors that limit blast radius, timeout and failure policy tuning, and the circular-dependency hazards that arise when a webhook's own infrastructure is itself subject to admission control.


TLS Certificate Provisioning

The CA Bundle Requirement

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
webhooks:
  - name: validate.databases.example.com
    clientConfig:
      caBundle: LS0tLS1CRUdJTi...
      service:
        name: postgrescluster-validator
        namespace: databases-system
        path: "/validate"

The API server communicates with a webhook exclusively over TLS and validates the webhook's serving certificate against the caBundle embedded directly in the webhook configuration; without a correctly populated caBundle, every admission request to that webhook fails TLS verification, which typically manifests as every affected resource's create or update requests being rejected cluster-wide.

Automated Certificate Injection

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: postgrescluster-webhook-cert
  namespace: databases-system
spec:
  dnsNames:
    - postgrescluster-validator.databases-system.svc
  issuerRef:
    name: internal-ca-issuer
metadata:
  annotations:
    cert-manager.io/inject-ca-from: databases-system/postgrescluster-webhook-cert

Tools such as cert-manager automate both certificate issuance for the webhook's serving endpoint and injection of the resulting CA bundle into the corresponding caBundle field via a ca-injector component, removing the manual, error-prone, and easily-forgotten step of keeping a webhook's TLS trust configuration current as certificates rotate.


Scoping to Limit Blast Radius

namespaceSelector

webhooks:
  - namespaceSelector:
      matchExpressions:
        - key: kubernetes.io/metadata.name
          operator: NotIn
          values: ["kube-system", "kube-public"]

Excluding system namespaces from a webhook's scope via namespaceSelector is standard practice, since an unreachable or malfunctioning webhook that also intercepts kube-system resources risks blocking control-plane component reconciliation and can render a cluster difficult to recover from without direct etcd intervention.

objectSelector

webhooks:
  - objectSelector:
      matchLabels:
        webhook.example.com/managed: "true"

objectSelector narrows a webhook's scope further to only objects explicitly opted in via label, letting a webhook be introduced gradually to a subset of resources during rollout, rather than immediately affecting every matching object cluster-wide the moment the webhook configuration is applied.

Blast Radius = rules namespaceSelector objectSelector

Timeout and Failure Policy Tuning

timeoutSeconds

webhooks:
  - timeoutSeconds: 5

The API server enforces a hard ceiling of 30 seconds across all webhooks combined for a single admission request, but a well-behaved webhook should respond in well under a second; setting an aggressive timeoutSeconds for each individual webhook prevents one slow webhook from consuming the entire shared timeout budget and starving other webhooks configured for the same request.

failurePolicy Trade-off Revisited at the Infrastructure Level

webhooks:
  - failurePolicy: Ignore

While validation logic generally favors Fail to guarantee a rule is never silently skipped, infrastructure-level considerations sometimes favor Ignore during a webhook's initial rollout or for genuinely best-effort mutations, explicitly trading strict enforcement for cluster availability if the webhook service itself becomes unreachable.


sideEffects and reinvocationPolicy

Declaring Side Effect Behavior

webhooks:
  - sideEffects: None

sideEffects: None asserts the webhook has no effect beyond the admission response itself, which is required for the webhook to be safely callable during a dry-run request; a webhook that does have external side effects (writing an audit record to a third-party system, for instance) must declare sideEffects: NoneOnDryRun and implement dry-run awareness explicitly to avoid those side effects firing during a --dry-run request.

Reinvocation After Mutation

webhooks:
  - reinvocationPolicy: IfNeeded

Because multiple mutating webhooks can run in the same admission chain and one webhook's mutation might invalidate an earlier webhook's assumptions, reinvocationPolicy: IfNeeded causes earlier webhooks in the chain to be re-invoked if a later one modifies the object, ensuring the full chain converges to a mutually consistent result rather than applying each webhook exactly once regardless of intervening changes.


Avoiding Circular Admission Dependencies

The Bootstrap Problem

A webhook's own backing Pod, Service, and Deployment are themselves subject to admission control; if a cluster-wide mutating webhook inadvertently matches its own webhook service's Pod resource, and that webhook is unavailable (as it is, by definition, during its own startup), a circular dependency can prevent the webhook from ever starting.

webhooks:
  - namespaceSelector:
      matchExpressions:
        - key: webhook.example.com/exempt
          operator: DoesNotExist

Explicitly exempting the webhook's own namespace, or labeling its own namespace to bypass its own broad selector rules, is standard practice to prevent this class of self-inflicted deadlock, particularly for webhooks intended to apply broadly across the cluster.


Relationship to CRD Validation Management and the Extension Model

Webhook management is the deployment and safety-engineering layer beneath the validation-layer decisions covered under CRD validation management, and it is one of the concrete extensibility areas introduced by the broader Kubernetes extension model: correctly provisioned TLS, carefully scoped selectors, and circular-dependency avoidance are what determine whether a webhook's validation or mutation logic is actually reliably reachable in production, as distinct from merely being logically correct in isolation.

Admission req namespace/object selector Webhook