EKS with Kyverno - console-oriented production guide

EKS with Kyverno - console-oriented production guide

Kyverno validates and mutates Kubernetes resources without a separate language - policies are YAML. In enterprises it enforces labels, image registries, resource limits, and network defaults.

Install steps: Kyverno install on EKS
Checklist: DevOps checklist


Use cases

Policy typeExample
ValidateOnly images from ACCOUNT.dkr.ecr...
MutateInject resource limits or standard labels
GenerateCreate NetworkPolicy when Namespace created
VerifyImagesCosign/sigstore (advanced)

Console-relevant workflow

While policies are YAML, operators use:

  1. EKS console → cluster health, add-ons, access entries.
  2. CloudWatch / Container Insights for admission denials (via audit logs).
  3. IAM for CI roles applying policies via GitOps.

Install verification (post-Helm)

kubectl get pods -n kyverno
kubectl get crd | grep kyverno

Expect 3+ kyverno controller pods in HA install.


Representative policies (apply via kubectl)

Require standard labels

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-team-label
spec:
  validationFailureAction: Enforce
  rules:
 - name: check-team
      match:
        any:
 - resources:
              kinds: [Deployment]
      validate:
        message: "label team is required"
        pattern:
          metadata:
            labels:
              team: "?*"

Restrict registries

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: only-ecr-images
spec:
  validationFailureAction: Enforce
  rules:
 - name: ecr-only
      match:
        any:
 - resources:
              kinds: [Pod]
      validate:
        message: "Images must be from ECR"
        pattern:
          spec:
            containers:
 - image: "*.dkr.ecr.*.amazonaws.com/*"

IAM & RBAC

  • Cluster admins install policies; developers should not delete ClusterPolicy without break-glass.
  • Use EKS access entries to map SSO groups to cluster-admin vs namespace-scoped roles.

Security

  • Exclude kyverno and kube-system carefully when testing Enforce - avoid cluster lockout.
  • Start policies in Audit (validationFailureAction: Audit) before Enforce.
  • Backup policies in Git (Argo CD).

Commonly missed

MissImpact
Webhook timeout on large objectsRandom apply failures
Policies on Pods vs controllersBypass via bare Pods
No exceptions for system: namespacesBreak add-ons
Forgetting generate cleanupOrphan resources

Troubleshooting

kubectl describe policyreport -A
kubectl logs -n kyverno -l app.kubernetes.io/component=admission-controller

Docs: Kyverno policies · EKS best practices

← Install guide · Checklist