Skip to content

KCA - Kyverno Certified Associate

Multiple-choice exam | 90 minutes | Passing score: 75% | $250 USD | Launched 2024

The KCA (Kyverno Certified Associate) validates your ability to use Kyverno for Kubernetes policy management. Unlike CKA/CKS which are performance-based, the KCA is a multiple-choice exam — but don’t let that fool you. The questions are scenario-heavy and expect you to read, write, and debug real Kyverno YAML policies.

KubeDojo covers ~95% of KCA topics through our existing Platform Engineering and CKS tracks, plus two dedicated KCA modules covering advanced policies, CLI operations, and policy management.

Why KCA matters: Kyverno is the most popular YAML-native policy engine in the Kubernetes ecosystem. As organizations shift from “deploy fast” to “deploy safely,” policy-as-code skills are in high demand. KCA proves you can enforce governance without writing a line of Rego.


These modules cover the areas between KubeDojo’s existing Kyverno toolkit module and the KCA exam requirements:

#ModuleTopicDomains Covered
1Advanced Kyverno PoliciesverifyImages, CEL expressions, cleanup policies, advanced validate/mutate/generateDomain 5 (32%)
2Kyverno Operations & CLIkyverno apply/test/jp, policy exceptions, metrics, HA deploymentDomains 2, 3, 6 (40%)

DomainWeightKubeDojo Coverage
Fundamentals of Kyverno18%Excellent (Kyverno toolkit module)
Installation, Configuration & Upgrades18%Good (Kyverno module + CKS modules)
Kyverno CLI12%Excellent (Kyverno Operations & CLI — apply/test/jp)
Applying Policies10%Excellent (Kyverno + OPA modules)
Writing Policies32%Excellent (Advanced Kyverno Policies — CEL, verifyImages, cleanup)
Policy Management10%Excellent (Kyverno Operations & CLI — exceptions, metrics, HA)

  • Understanding Kyverno’s role as a Kubernetes admission controller
  • Policy types: ClusterPolicy vs Policy (namespace-scoped)
  • YAML structure of a Kyverno policy
  • How Kyverno integrates with the Kubernetes API server via webhooks

Core module:

ModuleTopicRelevance
Kyverno 4.7Architecture, policy model, validate/mutate/generateDirect
OPA & Gatekeeper 4.2Policy engine concepts, admission control patternsContext

Kubernetes foundations (admission controllers):

ModuleTopicRelevance
CKS Admission ControllersValidatingWebhookConfiguration, MutatingWebhookConfigurationDirect
CKS Pod Security AdmissionBuilt-in admission control, PSA vs policy enginesContext
CKS API Server SecurityAPI server admission chainContext
  • Admission webhook flow: API request -> mutating webhooks -> validating webhooks -> persist to etcd
  • ClusterPolicy applies cluster-wide; Policy is namespace-scoped (same syntax, different scope)
  • Kyverno runs as a Deployment with multiple replicas, not a DaemonSet
  • Policies are Kubernetes CRDs — managed with kubectl, GitOps, Helm like any other resource

Domain 2: Installation, Configuration & Upgrades (18%)

Section titled “Domain 2: Installation, Configuration & Upgrades (18%)”
  • Installing Kyverno via Helm charts
  • Understanding Kyverno CRDs and their lifecycle
  • Configuring RBAC for Kyverno service accounts
  • High Availability (HA) deployment patterns
  • Upgrading Kyverno across versions

Kyverno-specific:

ModuleTopicRelevance
Kyverno 4.7Installation, Helm values, basic configurationDirect

Supporting Kubernetes concepts:

ModuleTopicRelevance
CKS Kubernetes UpgradesUpgrade strategies, version skewContext
Helm & KustomizeHelm install, upgrade, rollback patternsDirect
  • Helm install: helm install kyverno kyverno/kyverno -n kyverno --create-namespace
  • HA mode: 3 replicas, pod anti-affinity, separate webhook and background controller
  • CRDs: ClusterPolicy, Policy, ClusterPolicyReport, PolicyReport, AdmissionReport, UpdateRequest
  • RBAC: Kyverno needs permissions to watch/list resources it governs
  • Webhook configuration: failurePolicy: Fail vs Ignore — critical for production stability
  • Resource filters: Exclude kyverno namespace and system resources from policy evaluation

  • Using kyverno apply to test policies against resources offline
  • Using kyverno test for policy unit testing
  • Using kyverno jp for JMESPath expression debugging
  • Integrating Kyverno CLI into CI/CD pipelines
ModuleTopicRelevance
Kyverno 4.7CLI basics, CI/CD integrationPartial
Kyverno Operations & CLIkyverno apply/test/jp, policy exceptions, metrics, HA deploymentDirect
DevSecOps 4.3Security in CI/CD pipelines (policy-as-code pattern)Context
CKS Static AnalysisPre-deploy scanning conceptsContext
Terminal window
# Apply a policy against a resource (offline, no cluster needed)
kyverno apply policy.yaml --resource deployment.yaml
# Run policy test suites
kyverno test ./tests/
# Debug JMESPath expressions (used in preconditions and variables)
kyverno jp query "request.object.metadata.labels.app" -i resource.json
# CI/CD pipeline usage -- fail the build if policies are violated
kyverno apply policies/ --resource manifests/ --detailed-results
  • kyverno apply: Tests policies against resources without a cluster. Essential for shift-left.
  • kyverno test: Runs test cases defined in YAML. Each test specifies a policy, resource, and expected result (pass/fail/skip).
  • kyverno jp: Interactive JMESPath query tool. Invaluable for debugging complex match conditions.
  • Test file structure: kyverno-test.yaml with policies:, resources:, and results: fields.

  • Resource selection with match and exclude blocks
  • Targeting specific resource kinds, namespaces, labels, and annotations
  • Using preconditions for conditional policy execution
  • Policy ordering and conflict resolution
ModuleTopicRelevance
Kyverno 4.7match/exclude, resource selectionDirect
OPA & Gatekeeper 4.2Constraint selectors (comparison)Context
# Match/Exclude patterns
spec:
rules:
- name: require-labels
match:
any:
- resources:
kinds:
- Pod
namespaces:
- production
- staging
selector:
matchLabels:
app.kubernetes.io/managed-by: helm
exclude:
any:
- resources:
namespaces:
- kube-system
- clusterRoles:
- cluster-admin
  • match.any = OR logic (match any condition); match.all = AND logic (match all conditions)
  • exclude takes precedence over match — always processed after match
  • Preconditions: Use JMESPath expressions for conditional logic ({{ request.object.metadata.annotations.\"skip-policy\" }})
  • Resource filters: Global filters in Kyverno ConfigMap exclude resources from all policy evaluation

This is the largest domain. It requires deep hands-on practice.

  • Writing validate rules (deny non-compliant resources)
  • Writing mutate rules (auto-fix resources at admission)
  • Writing generate rules (auto-create companion resources)
  • Writing verifyImages rules (enforce image signatures and attestations)
  • Using CEL expressions in policies (Kubernetes 1.30+ alternative to JMESPath)
  • Writing cleanup policies (TTL-based resource deletion)

Well-covered (validate, mutate, generate):

ModuleTopicRelevance
Kyverno 4.7Validate, mutate, generate policies with examplesDirect
Advanced Kyverno PoliciesverifyImages, CEL expressions, cleanup policies, advanced patternsDirect
Security Mindset 4.1Why policy enforcement mattersContext
Defense in Depth 4.2Layered security modelContext

Additional depth (verifyImages, CEL, cleanup):

ModuleTopicRelevance
Supply Chain Security 4.4Cosign, image signing, attestations (verifyImages context)Direct
DevSecOps Supply Chain 4.4Supply chain theory, SLSA, SBOMContext

Validate (deny non-compliant resources):

spec:
validationFailureAction: Enforce # Enforce = block, Audit = warn only
rules:
- name: require-resource-limits
match:
any:
- resources:
kinds:
- Pod
validate:
message: "CPU and memory limits are required."
pattern:
spec:
containers:
- resources:
limits:
memory: "?*"
cpu: "?*"

Mutate (auto-fix at admission):

spec:
rules:
- name: add-default-securitycontext
match:
any:
- resources:
kinds:
- Pod
mutate:
patchStrategicMerge:
spec:
containers:
- (name): "*"
securityContext:
runAsNonRoot: true
readOnlyRootFilesystem: true

Generate (auto-create companion resources):

spec:
rules:
- name: generate-networkpolicy
match:
any:
- resources:
kinds:
- Namespace
generate:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
name: default-deny-ingress
namespace: "{{request.object.metadata.name}}"
data:
spec:
podSelector: {}
policyTypes:
- Ingress

verifyImages (enforce image signatures) — covered in Advanced Kyverno Policies:

spec:
rules:
- name: verify-image-signature
match:
any:
- resources:
kinds:
- Pod
verifyImages:
- imageReferences:
- "ghcr.io/myorg/*"
attestors:
- entries:
- keys:
publicKeys: |-
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----

CEL expressions (alternative to JMESPath) — covered in Advanced Kyverno Policies:

spec:
rules:
- name: check-replicas-cel
match:
any:
- resources:
kinds:
- Deployment
validate:
cel:
expressions:
- expression: "object.spec.replicas >= 2"
message: "Deployments must have at least 2 replicas"

Cleanup policies (TTL-based deletion) — covered in Advanced Kyverno Policies:

apiVersion: kyverno.io/v2beta1
kind: ClusterCleanupPolicy
metadata:
name: cleanup-stale-pods
spec:
match:
any:
- resources:
kinds:
- Pod
selector:
matchLabels:
environment: test
conditions:
any:
- operator: Equals
key: "{{ target.status.phase }}"
value: Succeeded
schedule: "*/30 * * * *"
  1. Practice writing all 4 policy types (validate, mutate, generate, verifyImages) from scratch
  2. Understand validationFailureAction: Enforce vs Audit — this is heavily tested
  3. Learn JMESPath basics for variable substitution ({{ request.object.* }})
  4. Study CEL expressions — Kyverno added CEL support as an alternative to pattern-based validation
  5. Understand cleanup policies — cron-based TTL deletion of resources matching conditions

  • Reading and interpreting PolicyReports and ClusterPolicyReports
  • Configuring policy exceptions for legitimate bypasses
  • Monitoring Kyverno with metrics (Prometheus)
  • Managing policy lifecycle (audit -> enforce migration)
ModuleTopicRelevance
Kyverno 4.7Policy reports, audit modeDirect
PrometheusPrometheus metrics, ServiceMonitorContext
SRE SLOs 1.2Measuring policy compliance as an SLOContext
DevSecOps Fundamentals 4.1Policy-as-code lifecycleContext

PolicyReports:

Terminal window
# View cluster-wide policy results
kubectl get clusterpolicyreport -o wide
# View namespace-scoped results
kubectl get policyreport -n production -o wide
# Results have pass/fail/warn/error/skip counts

Policy Exceptions (bypass for legitimate cases):

apiVersion: kyverno.io/v2
kind: PolicyException
metadata:
name: allow-privileged-cni
namespace: kube-system
spec:
exceptions:
- policyName: disallow-privileged-containers
ruleNames:
- require-non-privileged
match:
any:
- resources:
kinds:
- Pod
namespaces:
- kube-system
names:
- "calico-node-*"

Kyverno metrics (Prometheus):

  • kyverno_admission_requests_total — total admission requests processed
  • kyverno_policy_results_total — policy evaluation results (pass/fail/error)
  • kyverno_policy_execution_duration_seconds — policy execution latency
  • All metrics exposed on :8000/metrics by default

Audit -> Enforce migration pattern:

  1. Deploy policy with validationFailureAction: Audit
  2. Monitor PolicyReports for violations
  3. Fix existing violations or create PolicyExceptions
  4. Switch to validationFailureAction: Enforce
  5. Monitor admission metrics for blocked requests

KCA PREPARATION PATH (recommended order)
══════════════════════════════════════════════════════════════
Week 1: Foundations & Architecture (18%)
├── KubeDojo Kyverno module 4.7 (start here)
├── CKS Admission Controllers module
├── OPA & Gatekeeper module (compare approaches)
└── Install Kyverno on a kind cluster
Week 2: Installation & Policy Basics (18% + 10%)
├── Helm install with custom values
├── Configure HA mode (3 replicas)
├── Practice match/exclude patterns
├── Write 10+ validate policies from scratch
└── Deploy Kyverno via ArgoCD (GitOps pattern)
Week 3: Writing Policies Deep Dive (32% -- spend the most time here!)
├── Mutate policies (patchStrategicMerge, patchesJson6902)
├── Generate policies (NetworkPolicy, ResourceQuota, LimitRange)
├── verifyImages with Cosign (use KubeDojo supply chain module)
├── CEL expressions (practice converting JMESPath -> CEL)
├── Cleanup policies (cron-based TTL deletion)
└── Kyverno policy library: study 20+ community policies
Week 4: CLI, Management & Review (12% + 10%)
├── kyverno apply / test / jp CLI commands
├── Write kyverno-test.yaml test suites
├── PolicyReports and ClusterPolicyReports
├── Policy exceptions for legitimate bypasses
├── Prometheus metrics and Grafana dashboards
└── Practice exam questions, review weak areas

  • Writing Policies is 32% of the exam — you MUST be able to write validate, mutate, generate, and verifyImages policies from memory
  • Know the difference between Enforce and Audit — this distinction appears in many questions
  • JMESPath is your friend — practice {{ request.object.* }} variable syntax until it’s second nature
  • CEL is new and testable — the exam tests both JMESPath and CEL approaches
  • Policy exceptions vs exclude — know when to use each (exceptions are for operational bypasses; exclude is for structural filtering)
  • CLI commands are easy points — memorize kyverno apply, kyverno test, and kyverno jp syntax
  • Read the policy library — many exam questions are variations of standard community policies: kyverno.io/policies

KubeDojo’s existing modules plus the two dedicated KCA modules now cover ~95% of the KCA curriculum:

TopicStatusNotes
verifyImages policiesCoveredAdvanced Kyverno Policies — Cosign, attestations, image verification
CEL expressions in KyvernoCoveredAdvanced Kyverno Policies — CEL validate expressions
Cleanup policiesCoveredAdvanced Kyverno Policies — ClusterCleanupPolicy, TTL-based deletion
Kyverno CLI deep diveCoveredKyverno Operations & CLI — apply, test, jp commands
Policy exceptionsCoveredKyverno Operations & CLI — PolicyException CRD
Kyverno Prometheus metricsCoveredKyverno Operations & CLI — admission, policy result, and execution metrics
HA deployment detailsCoveredKyverno Operations & CLI — replicas, anti-affinity, webhook config

CERTIFICATION PATH
══════════════════════════════════════════════════════════════
Entry Level:
├── KCNA (Cloud Native Associate) — K8s fundamentals
├── KCSA (Security Associate) — Security fundamentals
└── KCA (Kyverno Certified Associate) ← YOU ARE HERE
Professional Level:
├── CKA (K8s Administrator) — Cluster operations
├── CKAD (K8s Developer) — Application deployment
├── CKS (K8s Security Specialist) — Security hardening
└── CNPE (Platform Engineer) — Platform at scale
KCA pairs naturally with:
├── CKS — KCA covers policy engine depth, CKS covers broader security
├── KCSA — KCA is the hands-on follow-up to KCSA's theory
└── CNPE — Policy-as-code is a core platform engineering skill

KCA is unique among CNCF certifications because it focuses on a single project (Kyverno) rather than a broad domain. This makes it more focused but also deeper — expect detailed questions about Kyverno-specific features that wouldn’t appear on CKS.