ValidatingAdmissionPolicy — validate resources at admission time without webhooks.
1apiVersion: admissionregistration.k8s.io/v12kind: ValidatingAdmissionPolicy3metadata:4 name: "require-labels"5spec:6 failurePolicy: Fail7 matchConstraints:8 resourceRules:9 - apiGroups: ["apps"]10 apiVersions: ["v1"]11 operations: ["CREATE", "UPDATE"]12 resources: ["deployments", "statefulsets"]13 validations:14 - expression: "has(object.metadata.labels) && has(object.metadata.labels.app)"15 message: "Deployment must have an 'app' label"16 - expression: "object.spec.replicas >= 1 && object.spec.replicas <= 10"17 message: "Replicas must be between 1 and 10"18 - expression: >19 all(object.spec.template.spec.containers, c,20 has(c.resources) && has(c.resources.limits) && has(c.resources.limits.memory))21 message: "All containers must have memory limits"22---23apiVersion: admissionregistration.k8s.io/v124kind: ValidatingAdmissionPolicyBinding25metadata:26 name: "require-labels-binding"27spec:28 policyName: "require-labels"29 matchResources:30 namespaceSelector:31 matchLabels:32 enforce-policies: "true"
1# Commands2kubectl get validatingadmissionpolicy3kubectl describe validatingadmissionpolicy require-labels45# Test policy (will fail)6kubectl create deployment test --image=nginx --replicas=3
Advantages: