kyverno
Kubernetes-native policy management and security engine
Component Information
| Property | Value |
|---|---|
| Chart Version | 3.5.2 |
| Chart Type | application |
| Upstream Project | kyverno |
| Maintainers | Platform Engineering Team (repo) |
Why Kyverno?
Kyverno uses Kubernetes-native resources (policies are CRDs, like any other manifest) and doesn’t require learning a specialized language like Rego. Policies are written in YAML, which means the learning curve is lower if you already understand Kubernetes manifests.
Beyond validation, Kyverno supports:
- Validation: Accept or reject resources based on rules
- Mutation: Modify resources on admission (e.g., inject labels, add sidecars)
- Generation: Create new resources when a trigger resource is created (e.g., generate NetworkPolicy for every new namespace)
- Image Verification: Validate container image signatures using Sigstore/Cosign
The platform currently uses Kyverno primarily for validation. The mutation and generation capabilities are available for future use as governance requirements evolve. Kyverno also integrates with FinOps tools like Kubecost.
Architecture Role
Kyverno operates at Layer 2 of the platform, the Automation & Governance layer. It sits in the admission control path, evaluating every resource before it’s persisted to etcd.
Key integration points:
- Kubernetes API: Kyverno registers as a validating and mutating webhook
- ArgoCD: Policies evaluate resources that ArgoCD deploys
- PolicyReport CRDs: Kyverno generates reports that Policy Reporter consumes
- Prometheus: Exposes metrics on policy evaluations, violations, and webhook performance
Most policies currently run in audit mode, meaning violations are reported but don’t block
deployments. This follows the “paved road” philosophy: guide users toward best practices
without creating friction. The exception is enforce-namespace-labels, which runs in enforce
mode to guarantee that all namespaces have the metadata required for cost attribution and
governance.
See Security & Policy Model for the platform’s governance architecture.
Configuration Values
kyverno
Component Information
| Property | Value |
|---|---|
| Chart Version | 3.5.2 |
| Chart Type | `` |
| Upstream Project | N/A |
Configuration Values
The following table lists the configurable parameters:
Values
Deployment Strategy
| Key | Type | Default | Description |
|---|---|---|---|
| admissionController | object | {"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0},"type":"RollingUpdate"}} |
Rolling update strategy for zero-downtime updates |
Other Values
| Key | Type | Default | Description |
|---|---|---|---|
| admissionController.strategy | object | {"rollingUpdate":{"maxSurge":1,"maxUnavailable":0},"type":"RollingUpdate"} |
Deployment strategy for admission controller |
| admissionController.strategy.rollingUpdate.maxSurge | int | 1 |
Maximum surge pods during update |
| admissionController.strategy.rollingUpdate.maxUnavailable | int | 0 |
Maximum unavailable pods during update (0 for zero-downtime) |
| backgroundController.resources.limits.cpu | string | "250m" |
CPU limit for background controller |
| backgroundController.resources.limits.memory | string | "256Mi" |
Memory limit for background controller |
| backgroundController.resources.requests.cpu | string | "100m" |
CPU request for background controller |
| backgroundController.resources.requests.memory | string | "128Mi" |
Memory request for background controller |
| cleanupController.resources.limits.cpu | string | "250m" |
CPU limit for cleanup controller |
| cleanupController.resources.limits.memory | string | "256Mi" |
Memory limit for cleanup controller |
| cleanupController.resources.requests.cpu | string | "100m" |
CPU request for cleanup controller |
| cleanupController.resources.requests.memory | string | "128Mi" |
Memory request for cleanup controller |
| crds.install | bool | true |
Install Kyverno CRDs |
| livenessProbe | object | {"failureThreshold":3,"initialDelaySeconds":0,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":1} |
Liveness probe for the main admission controller. |
| livenessProbe.failureThreshold | int | 3 |
Failed probes tolerated before restart |
| livenessProbe.initialDelaySeconds | int | 0 |
Delay before starting liveness checks |
| livenessProbe.periodSeconds | int | 10 |
Frequency of liveness probes |
| livenessProbe.successThreshold | int | 1 |
Successful probes required to mark ready |
| livenessProbe.timeoutSeconds | int | 1 |
Timeout per liveness probe |
| priorityClassName | string | "platform-policy" |
Priority class for Kyverno admission controller |
| readinessProbe | object | {"failureThreshold":3,"initialDelaySeconds":0,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":1} |
Readiness probe for the main admission controller. |
| readinessProbe.failureThreshold | int | 3 |
Failed readiness probes tolerated |
| readinessProbe.initialDelaySeconds | int | 0 |
Delay before starting readiness checks |
| readinessProbe.periodSeconds | int | 10 |
Frequency of readiness probes |
| readinessProbe.successThreshold | int | 1 |
Successful probes required to be ready |
| readinessProbe.timeoutSeconds | int | 1 |
Timeout per readiness probe |
| reportsController.resources.limits.cpu | string | "250m" |
CPU limit for reports controller |
| reportsController.resources.limits.memory | string | "256Mi" |
Memory limit for reports controller |
| reportsController.resources.requests.cpu | string | "100m" |
CPU request for reports controller |
| reportsController.resources.requests.memory | string | "128Mi" |
Memory request for reports controller |
| resources | object | {"limits":{"cpu":"250m","memory":"256Mi"},"requests":{"cpu":"100m","memory":"128Mi"}} |
Resources for the main admission controller. |
| resources.limits.cpu | string | "250m" |
CPU limit for admission controller |
| resources.limits.memory | string | "256Mi" |
Memory limit for admission controller |
| resources.requests.cpu | string | "100m" |
CPU request for admission controller |
| resources.requests.memory | string | "128Mi" |
Memory request for admission controller |
| startupProbe | object | {"failureThreshold":30,"initialDelaySeconds":0,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":1} |
Startup probe for the main admission controller. |
| startupProbe.failureThreshold | int | 30 |
Failed startup probes tolerated |
| startupProbe.initialDelaySeconds | int | 0 |
Delay before starting startup probes |
| startupProbe.periodSeconds | int | 10 |
Frequency of startup probes |
| startupProbe.successThreshold | int | 1 |
Successful startup probes required |
| startupProbe.timeoutSeconds | int | 1 |
Timeout per startup probe |