CREATE and UPDATE operations. It runs the same validation checks as the controller but at admission time, before the change is persisted.
How it works
The webhook resolves the matching ApplicationPersona through the same ordered fallback chain the controller uses: theapp.kubernetes.io/name label on the Deployment, then the app label, then metadata.name, then spec.selector.matchLabels. If no persona matches, the deployment is allowed without validation.
Modes
Advisory mode (default)
All deployments are allowed. Validation issues are returned as Kubernetes admission warnings, which appear inkubectl output:
Enforcing mode
Deployments with validation errors are denied. Warnings are still attached to allowed responses.Validation checks
The webhook runs four validation functions:
The distinction matters in enforcing mode: errors cause denial, warnings are attached but do not block.
Enabling the webhook
Via Helm
Via CLI flag
TLS certificates
The webhook server requires TLS certificates. Options:- cert-manager (recommended) — The Helm chart supports cert-manager annotations for automatic certificate provisioning
- Manual certificates — Provide certificates via flags:
- Self-signed — controller-runtime generates self-signed certificates automatically for development
Fail-open behavior
The webhook is designed to fail open:- If the operator is down, Kubernetes skips the webhook (when configured with
failurePolicy: Ignore) - If the ApplicationPersona lookup fails (API error), the deployment is allowed with a log message
- If no persona matches the deployment on any rung of the discovery chain, the deployment is allowed without validation
Controller validation
Continuous validation via the reconciliation loop
Configuration
All webhook configuration options