CKS Track

The Certified Kubernetes Security Specialist exam tests whether you can harden a cluster and its workloads and investigate a compromise. It requires a passed CKA and assumes that level of speed. Most tasks involve a tool outside core Kubernetes (Falco, Trivy, kube-bench, AppArmor) or editing control plane static Pod manifests, so the exam rewards hands-on tool practice far more than reading.

Exam format, shell setup and time management are in the Certifications hub. This page covers what to study.

DomainWeightPractice in this wiki
Cluster Setup15%Lab + practice for NetworkPolicy; guided labs for the CIS benchmark, Ingress TLS and metadata
Cluster Hardening15%Lab + practice for RBAC and ServiceAccounts; guided labs for API access
System Hardening10%Guided labs for seccomp and host footprint; AppArmor not run; host IAM is reading only
Minimize Microservice Vulnerabilities20%Lab + practice for Pod Security; guided labs for Secrets encryption, sandboxing and encryption in transit
Supply Chain Security20%Guided labs; signature verification at admission is a gap
Monitoring, Logging and Runtime Security20%Guided labs for Falco, audit logging and immutability; one unguided investigation

The third column says what kind of practice exists, using the labels defined in the hub. It is not a readiness score. Most CKS labs are still guided: they show a control working once. Only CKS-01, CKS-13 and CKS-14 have unguided tasks with checks.

Objectives are summarised from the Linux Foundation CKS page and curriculum as checked on 2026-10-13 (exam on Kubernetes v1.35; this wiki’s baseline is 1.37).

Which version each CKS lab was run on

CKS-01, CKS-13 and CKS-14 were run on Kubernetes v1.37.0 on 2026-10-13. CKS-02 to CKS-12 were run earlier on kind v0.31 with Kubernetes v1.35.0, which is the version the exam used on the check date, and have not been re-run on v1.37. Expect small differences in output on v1.37, and note that kind v0.33 or newer is needed for it. Each lab’s header states its own test environment.

Where the labs run

Most CKS labs run on the kind cluster from Lab CKAD-01 and reach the node with docker exec in place of ssh. They edit the API server manifest repeatedly, so take the backup each lab asks for, and note that several labs write that backup to the same path: the copy is a safety net for the lab you are in, not a way back to an earlier lab. Run one CKS lab at a time and finish its cleanup before starting the next; if a lab leaves the API server unhealthy, recreate the cluster as Lab CKAD-01 describes. Lab CKS-04 changes how Secrets are stored and cannot be undone by restoring a manifest alone. Lab CKS-09 and Lab CKS-11 create their own clusters, which changes your kubectl context; run kubectl config use-context kind-k8s-lab afterwards. They also need more memory than the other labs. AppArmor needs a virtual machine node.


Prerequisites


1. Cluster Setup (15%)

ObjectiveReadPractise
Use network security policies to restrict cluster-level accessNetworkPolicy, Network Policies (Security)Lab CKS-01, Lab CKS-11
Use the CIS benchmark to review component configurationCompliance Frameworks, Cluster Hardening, Node HardeningLab CKS-02
Properly set up Ingress with TLSIngress, TLS and mTLSLab CKAD-09
Protect node metadata and endpointsSecurity Baseline, Node HardeningLab CKS-11
Verify platform binaries before deployingCovered in the labLab CKS-07

Task drills

  • Write a default-deny policy for a namespace, then allow one tier to reach another on a single port and nothing else.
  • Block Pod egress to the cloud metadata address 169.254.169.254 with an ipBlock and except, while leaving other egress open.
  • Run kube-bench against a control plane node, pick three failed checks for the API server, kubelet and etcd, and fix each one.
  • Create a TLS Secret from a certificate and key, and serve an Ingress host over HTTPS with it.
  • Download a Kubernetes release binary, compare its sha512sum with the published checksum, and say whether the binary on the node matches.

2. Cluster Hardening (15%)

ObjectiveReadPractise
Use RBAC to minimize exposureRBAC, RBAC (Security)Lab CKS-01, Lab CKS-13
Exercise caution in using service accountsService AccountsLab CKS-01, Lab CKS-13
Restrict access to the Kubernetes APIAuthentication vs Authorization, Cluster Hardening, Admission Controllers, CertificatesLab CKS-02, Lab CKS-08
Upgrade Kubernetes to avoid vulnerabilitiesUpgrade StrategyLab CKA-04

Task drills

  • Audit an over-permissive Role (wildcards, secrets access, escalate or bind) and reduce it to the verbs a workload actually uses.
  • Find every subject bound to cluster-admin and remove one that should not be.
  • Disable token automounting on the default ServiceAccount of a namespace, and give one workload a dedicated ServiceAccount with a short-lived projected token.
  • Turn off anonymous authentication on the API server and confirm the NodeRestriction admission plugin and Node,RBAC authorization modes are set.
  • Stop a Service from exposing the API server through a NodePort, and confirm the insecure and profiling endpoints are off.
  • Upgrade a cluster by one patch version to pick up a fix, control plane first.

3. System Hardening (10%)

ObjectiveReadPractise
Minimize host OS footprintNode Hardening, Linux CIS Hardening, systemd Service HardeningLab CKS-12
Use least-privilege identity and access managementPAM, OIDC IntegrationReading only
Minimize external access to the networkiptables, firewalld, ss, PortsLab CKS-12
Use kernel hardening tools such as AppArmor and seccompSeccomp and AppArmor, AppArmor, seccomp, sysctlLab CKS-05 (seccomp run; AppArmor not run)

Task drills

  • On a node, list listening sockets with ss -tlnp, identify a service that should not be running, stop and disable it, and remove its package.
  • Find the process bound to a given port and the binary behind it.
  • Load an AppArmor profile on a node with apparmor_parser, confirm it with aa-status, and apply it to a container through securityContext.appArmorProfile.
  • Place a custom seccomp profile under the kubelet’s seccomp directory and reference it from a Pod with type Localhost. Then switch another Pod to RuntimeDefault.
  • Prevent a kernel module from loading by blacklisting it.

4. Minimize Microservice Vulnerabilities (20%)

ObjectiveReadPractise
Use appropriate Pod Security StandardsPod Security Standards, SecurityContext, Pod Security (Security)Lab CKS-01
Manage Kubernetes SecretsSecrets, Secret Encryption, etcd Encryption, Secrets (Security)Lab CKS-04
Understand and implement isolation techniquesRuntime Sandboxing, Multi-TenancyLab CKS-10
Implement Pod-to-Pod encryptionNetworking Deep Dive, Istio, TLS and mTLSLab CKS-11

Policy engines appear in tasks as something already installed that you must read and adjust, so know OPA and Gatekeeper and Kyverno well enough to edit a constraint or policy.

Task drills

  • Label a namespace to enforce the restricted Pod Security Standard, then fix a Deployment until it is admitted.
  • Find every Pod in a cluster that runs privileged, as root, or with a hostPath, and remediate or delete as the task directs.
  • Write an EncryptionConfiguration for Secrets, wire it into the API server manifest with the flag and a volume mount, re-encrypt existing Secrets, and prove it by reading the raw key from etcd with etcdctl.
  • Read a Secret straight out of etcd to show that it was stored unencrypted.
  • Create a RuntimeClass for gVisor (runsc) and run a Pod with it; confirm from dmesg inside the Pod that it is sandboxed.
  • Fix a Gatekeeper constraint or Kyverno policy so that it rejects images from an untrusted registry.
  • Enable transparent encryption between Pods with Cilium and prove it from a packet capture. Encryption gives confidentiality on the wire.
  • Separately, read how a CiliumNetworkPolicy requires mutual authentication. That proves the identity of the peer and is a different control from encryption; one does not imply the other.

5. Supply Chain Security (20%)

ObjectiveReadPractise
Minimize base image footprintImage Hardening, Dockerfile Best Practices, Images and LayersLab CKS-07
Understand your supply chain (SBOM, CI/CD, artifact repositories)SBOMs, CD Integration, RegistriesLab CKS-07
Secure your supply chain (permitted registries, signing)Admission Controllers, Kyverno, SBOMs (cosign)Lab CKS-08, Lab CKS-09
Perform static analysis of workloads and imagesVulnerability Scanning, Image HardeningLab CKS-07

Task drills

  • Rewrite a Dockerfile as a multi-stage build on a minimal base, with a non-root USER, a pinned tag and no secrets in layers.
  • Scan the images of every Pod in a namespace with trivy image, and delete the Pods whose images have CRITICAL vulnerabilities.
  • Generate an SBOM for an image in SPDX or CycloneDX format, and find which image in a set contains a given package version.
  • Configure the ImagePolicyWebhook admission plugin: admission configuration file, kubeconfig for the backend, defaultAllow: false, the API server flags and the volume mount.
  • Restrict a namespace to images from one registry using a policy engine or a ValidatingAdmissionPolicy.
  • Review a Pod manifest and a Dockerfile by eye and with a scanner (kubesec scan, KubeLinter), and fix the two worst findings in each.

6. Monitoring, Logging and Runtime Security (20%)

ObjectiveReadPractise
Perform behavioural analytics to detect malicious activityRuntime Detection (Falco, Tetragon)Lab CKS-06
Detect threats across infrastructure, apps, networks and workloadsRuntime Detection, auditd, Kubernetes SecurityLab CKS-06, Lab CKS-03
Investigate and identify phases of attack and bad actorsAssume Breach Principle, kubectl Debug ToolkitLab CKS-06, Lab CKS-03, Lab CKS-14 (unguided)
Ensure immutability of containers at runtimeSecurityContextLab CKS-05
Use Kubernetes audit logs to monitor accessAudit LoggingLab CKS-03

Task drills

  • Read Falco output on a node (journalctl -u falco or its log file), identify which Pod spawned a shell or wrote under /etc, and scale its Deployment to zero.
  • Change the output format of an existing Falco rule to include specific fields, and override a rule in the local rules file instead of editing the default one.
  • Find the container running an unexpected process using crictl ps, crictl inspect and the process ID on the node.
  • Make a container immutable: read-only root filesystem, emptyDir only for the paths that must be writable, no privilege escalation.
  • Write an audit policy that logs Secrets at Metadata, a named namespace at RequestResponse and drops everything else, then enable it on the API server with log path, max age, max backups and the two volume mounts.
  • From an audit log, find who deleted a given Secret and when.

Gaps in the wiki

ObjectiveWhat is missingUse instead
AppArmorLab CKS-05 includes it, but that section was not run because kind nodes do not expose AppArmorRun the section on a virtual machine node, and pin the Pod to the node where the profile is loaded
Signature verification at admissionLab CKS-09 signs and verifies with the CLI and enforces digests. A digest policy admits an unsigned image; no lab makes the cluster check signaturesKyverno verifyImages
A working ImagePolicyWebhook backendLab CKS-08 configures the plugin with no backend, which proves the fail-closed path only, not TLS, the ImageReview exchange or an allow/deny decisionImagePolicyWebhook
Cilium mutual authenticationLab CKS-11 covers encryption; authentication.mode: required needs SPIRE and is not practisedCilium mutual authentication
Least-privilege identity and access managementHost and cloud IAM are reading only. Kubernetes RBAC is covered by Lab CKS-13OIDC Integration
Investigation with detection toolingLab CKS-14 investigates from API and node evidence only. No lab correlates audit-log and Falco evidence for an unknown actorRepeat Lab CKS-14 on a cluster with Lab CKS-03’s audit policy enabled
Unguided practice for CKS-02 to CKS-12These labs are guided walk-throughs with no independent task or checkThe CKS practice set and the domain drills
Re-run on Kubernetes v1.37CKS-02 to CKS-12 were last run on v1.35.0Run them on a v1.35 cluster, which matches the exam, or expect minor output differences
Independent gradingThe practice tasks give checks you run yourself; nothing scores you automaticallyThe exam simulator, if your registration includes it

Study plan

The plan below is a revision schedule for someone with a recent CKA, at about an hour a day. It does not include provisioning a virtual machine for AppArmor. Finishing it is not a pass prediction.

WeekFocusPractice
1L07 overview, domain 2 (RBAC, ServiceAccounts, API access)Lab CKS-01, Lab CKS-13, domain 2 drills
2Domain 1 (NetworkPolicy, CIS benchmark, Ingress TLS)Lab CKS-02, Lab CKAD-09
3Domain 4 (Pod Security Standards, Secrets encryption, sandboxing, policy engines)Lab CKS-04, Lab CKS-10, Lab CKS-11
4Domain 3 (AppArmor, seccomp, host footprint), domain 5 (images, Trivy, SBOM, admission)Lab CKS-05, Lab CKS-12, Lab CKS-07, Lab CKS-08, Lab CKS-09
5Domain 6 (Falco, audit logging, immutability, investigation)Lab CKS-03, Lab CKS-06, Lab CKS-14
6The timed practice set, weak spots, the simulator sessions if you have themCKS practice set

Ready when

  • You can edit the API server manifest, add a flag with its volume and mount, and recover promptly when the API server fails to restart, using crictl and the container’s log to find the mistake.
  • You can write an audit policy and an EncryptionConfiguration starting from the documentation page, and verify each from evidence: a log entry, a ciphertext prefix in etcd.
  • For every control you apply, you can name one request that must still succeed and one that must now fail, and you test both.
  • You know where each tool keeps its configuration and output on a node: Falco rules, AppArmor profiles, seccomp profiles, audit logs.
  • You finish the CKS practice set inside two hours at or above the pass mark, using only the sites the CKS allows.
  • If you have the simulator, your second session is at or above the pass mark.

Further reading

Across the wiki