Kubernetes ValidatingAdmissionPolicy is a built-in Kubernetes admission control resource that validates API requests using Common Expression Language (CEL) rules before Kubernetes stores the object. In practical terms, it lets you enforce rules such as required labels, allowed image registries, replica limits, or security settings without running a custom validating webhook server.
A ValidatingAdmissionPolicy checks create, update, delete, or connect requests sent to the Kubernetes API server. If a request violates the policy, Kubernetes can deny it, warn the user, or record it in audit logs, depending on how the policy binding is configured.
Teams use it to apply guardrails at the API layer, so the same rules apply whether resources are created by kubectl, Helm, Argo CD, Terraform, Crossplane, or a CI/CD pipeline.
ValidatingAdmissionPolicy uses CEL expressions to inspect the requested object and related request data. A policy defines the validation logic, while a ValidatingAdmissionPolicyBinding decides where and how that policy applies.
object, oldObject, request, params, and namespaceObject.Deny, Warn, and Audit.For example, a CEL rule can reject a Deployment if it has more than 10 replicas, or reject a Pod if one of its containers uses an image from an unapproved registry.
team, environment, or cost-center on workloads.A platform team may want every Deployment in production to include an owner label. A ValidatingAdmissionPolicy can check that the label exists, and a binding can apply the rule only to namespaces with environment=production. If a developer deploys a workload without that label, the API server rejects the request before the Deployment is saved.
This is useful when many teams deploy through different paths. The same rule still applies whether a team uses Helm, GitOps, or a Terraform workflow such as deploying Kubernetes resources using Terraform.
ValidatingAdmissionPolicy is often compared with ValidatingAdmissionWebhook because both validate Kubernetes API requests. The main difference is operational complexity.
ValidatingAdmissionPolicy is a good fit for field-based checks that can be expressed in CEL. A webhook may still be better when the rule needs external data, complex business logic, or integration with another system.
ValidatingAdmissionPolicy works well as part of a layered control model. For example, a platform team can use it to validate application workloads, infrastructure custom resources, and namespace-level standards. If your team manages cloud infrastructure through Kubernetes APIs, such as with AWS resources using Crossplane on Kubernetes, admission policies can help enforce required fields before those resources reach controllers.
The best use cases are clear, deterministic rules. Start with a small set of high-value checks, test them with Warn or Audit actions, then move to Deny once teams understand the impact.