Kyverno — policy engine for Kubernetes, written in Go (not Rego like OPA).
Comparison with OPA Gatekeeper: | Criterion | Kyverno | OPA Gatekeeper | |---------|---------|----------------| | Language | YAML | Rego | | Simplicity | Simpler | More complex | | Mutate | Yes | No | | Verify Images | Yes | No | | Generate | Yes | No |
Example (require labels):
1apiVersion: kyverno.io/v12kind: ClusterPolicy3metadata:4 name: require-labels5spec:6 validationFailureAction: Enforce7 rules:8 - name: check-team-label9 match:10 any:11 - resources:12 kinds: ["Deployment", "StatefulSet"]13 validate:14 message: "Label "team" is required"15 pattern:16 metadata:17 labels:18 team: "?*"
Mutate (automatic label addition):
1apiVersion: kyverno.io/v12kind: ClusterPolicy3metadata:4 name: add-default-labels5spec:6 rules:7 - name: add-team8 match:9 any:10 - resources:11 kinds: ["Deployment"]12 mutate:13 patchStrategicMerge:14 metadata:15 labels:16 environment: production
Verify Images (Cosign):
1verifyImages:2 - imageReferences: ["ghcr.io/myorg/*"]3 attestors:4 - entries:5 - keys:6 publicKeys: "-----BEGIN PUBLIC KEY-----..."
Choice: Kyverno for Kubernetes-centric policies. OPA for multi-platform (API, infra, K8s).