Certifications · CKS

CKS — the exam

The CKS — Certified Kubernetes Security Specialist — sits at the top of this course's five-exam ladder, and it's the only one of the five with a hard prerequisite: you cannot even register without an active, non-expired CKA already in hand. It's performance-based, roughly two hours, dropped onto live clusters with a list of hardening and incident-response tasks graded purely on the cluster state you leave behind — no multiple choice, no credit for describing the right answer instead of typing it. Where the CKA asks whether you can operate a cluster and the CKAD asks whether you can ship an application onto one, the CKS asks a meaner question: can you keep a cluster safe once somebody is actively trying to break it? This page is the CKS hub for this course — the prerequisite explained clearly, the CNCF's official six-domain breakdown from curriculum v1.34, worked examples for the two domains people most often underprepare, and where to go next inside this course to actually drill it.

☺ Explain it like I'm 10

Picture a big apartment building. Passing the CKA already handed you the building manager's master key ring — you can fix the elevator, read the water meters, let in a new tenant. The CKS asks for a second, harder badge: can you also be the building's night guard? That means checking every delivery box before it goes upstairs, so nobody smuggles in a package no one can vouch for. It means locking the doors between apartments so one bad tenant can't wander into another's unit. It means watching the hallway cameras for someone jiggling a doorknob, and keeping a logbook of who unlocked what and when. And you don't get handed this badge cold — you have to already be trusted with the master keys first.

🐢🐘Your hosts for this topic: Timmy the Turtle & Ellie the Elephant — Timmy owns four of the six domains outright (RBAC, admission, hardening, supply-chain gates); Ellie keeps the audit trail and the "what actually happened" memory that the Monitoring & Runtime Security domain grades you on.

What the CKS actually tests, and why it's the hardest badge on this ladder

☺ Like you're 10: It's a hands-on test on real clusters where you fix real security holes — and it's the hardest of the five because you have to already hold a different badge first.

The CKS is a performance-based exam from the CNCF and The Linux Foundation, in the same family as the CKA and CKAD. You get a remote desktop, several live clusters, and a list of tasks: restrict a namespace with a NetworkPolicy, fix an over-permissive Role, make a Pod run unprivileged with a seccomp profile, find the image with the critical CVE, turn on audit logging with the right policy, read a runtime alert and stop the workload that caused it. There is nothing to memorize in the multiple-choice sense — the grading script inspects the resulting objects after your session ends, and an elegant approach earns nothing extra over a correct one.

Its centre of gravity is different from both exams below it. The CKA is about operating the cluster; the CKAD is about authoring workloads inside a namespace someone else administers. CKS assumes you can already do both, then asks whether you can defend the result. Nearly every CKS task presumes fluency you were already tested on: switching contexts without hesitation, editing a static Pod manifest on a control-plane node, restarting a component and reading its logs. The exam clock does not budget time for re-learning kubectl.

Who should sit it

What it deliberately does not test

Not application authoring — Deployments, probes, ConfigMaps and the rest of the object model a developer touches daily belong to CKAD, and CKS assumes you already know it well enough not to be slowed down by it. Not first-time cluster bootstrapping either — kubeadm, node lifecycle and the base RBAC model are the CKA's territory, covered in this course's five-part Exam Blueprint, and CKS builds directly on top of it rather than re-testing it. What's left, once you subtract both, is exactly the six domains below: everything between "the cluster works" and "the cluster is safe."

◆ Key idea

The CKA and CKAD certify that things run. The CKS certifies that things run safely enough to survive contact with an adversary — a NetworkPolicy that actually blocks traffic instead of merely existing, a signature check the cluster enforces rather than trusts, an audit log someone would actually notice an intrusion in. It's the same cluster, examined by someone assuming it's already a target.

The one hard prerequisite: an active, non-expired CKA

☺ Like you're 10: You're not allowed to even sign up for this test unless you've already passed the other one, and it has to still be valid — not expired.

This is the detail that catches people out, so it's worth being blunt about it: the CKS is the only certification in the Kubernetes family with a formal, enforced gate. Not "recommended," not "helps" — checked at registration. You must hold a current CKA whose validity window has not lapsed. If yours has expired, or is about to, the practical fix is to renew or re-sit the CKA first — this course's CKA Study Plan is the place to start that clock again — and then book the CKS once it's current. Plenty of candidates plan the two together deliberately: pass the CKA, and while the material is still fresh, spend the next few months on the hardening layer before the CKA's two-year validity has any chance of becoming a problem.

DimensionCKACKS
Formal prerequisiteNone publishedActive, non-expired CKA — enforced at registration
Centre of gravityBootstrapping, operating and troubleshooting the cluster itselfHardening that cluster against an active adversary
Domains5 domains, 27 competencies6 domains, weights below
Where it sitsCore / professional tierSpecialist tier — the top of this course's ladder

The reasoning behind the gate is worth internalizing rather than resenting: CKS tasks routinely hand you a broken cluster and expect the CKA-level operational moves — editing a static manifest, restarting kube-apiserver, reading its logs for a syntax error — as a precondition to the security work, not as something the exam re-teaches you along the way.

🐢 Timmy's-eye view

"I sat my CKA on a Tuesday and didn't book CKS for another eight months — long enough that I had to double-check my validity window before I registered. That's the real lesson of the gate: it isn't just a hoop, it's the CNCF quietly insisting you treat the two exams as a pair, not two unrelated purchases years apart."

The official CKS domains — CNCF curriculum v1.34

☺ Like you're 10: The test is split into six parts, and they're not equal — half the marks live in just three of them.

Transcribed from the CNCF's published CKS Exam Curriculum, version 1.34: six domains, weights summing to exactly 15 + 15 + 10 + 20 + 20 + 20 = 100%. If a study guide you're reading doesn't add up to exactly 100, it's out of date or misquoting. Bars below are sorted by weight; the domain sections that follow keep the curriculum's own order and wording.

🔑Minimize Microservice Vulnerabilities
20%
🦫Supply Chain Security
20%
🐘Monitoring, Logging and Runtime Security
20%
🐦Cluster Setup
15%
🐢Cluster Hardening
15%
🦉System Hardening
10%
Domain (curriculum order)WeightCompetencies
Cluster Setup15%Use network security policy to restrict cluster-level access · review the security configuration of Kubernetes components against the CIS benchmark via kube-bench · properly set up Ingress objects with TLS · protect node metadata and endpoints · verify platform binaries before deploying
Cluster Hardening15%Use RBAC to minimize exposure · exercise caution using ServiceAccounts, including disabling auto-mount where it isn't needed · restrict access to the Kubernetes API · upgrade Kubernetes to avoid known CVEs
System Hardening10%Minimize the host OS footprint · apply least-privilege IAM · minimize external network access · use kernel hardening tools such as seccomp and AppArmor
Minimize Microservice Vulnerabilities20%Use appropriate Pod Security Standards / Pod Security Admission · manage Kubernetes Secrets · implement isolation techniques, including sandboxed runtimes such as gVisor and Kata · implement pod-to-pod encryption via Cilium or Istio
Supply Chain Security20%Minimize base image footprint · understand your supply chain (SBOM, CI/CD, artifact repositories) · restrict to permitted registries and sign/validate artifacts (e.g. cosign) · perform static analysis with tools such as Kubesec and KubeLinter
Monitoring, Logging and Runtime Security20%Perform behavioral analytics to detect malicious activity · detect threats across infrastructure, applications, network, data, users and workloads · identify phases of an attack and bad actors in the environment · ensure container immutability at runtime · use Kubernetes audit logs to monitor access
One workload's life, and which CKS domain is watching it Build & ship Supply Chain · 20% SBOM · scan sign (cosign) permitted registry Admit Hardening 15% + Microservice Vuln. 20% RBAC · PSA admission gate Run Cluster Setup 15% + System Hardening 10% NetworkPolicy seccomp/AppArmor · TLS Watch Monitoring & Runtime Security · 20% audit logs behavioral detection 20% 35% 25% 20%

Domain by domain: what you actually have to produce

☺ Like you're 10: Here's the real substance for each part of the test — the files you'd actually have to write, not just the topic names.

The gap between "I've read about this" and "I can do this in six minutes on a live cluster" is where the CKS lives. This course already has dedicated pages for most of the mechanics below — the sections here focus on what's specific to how the exam frames each domain, with links out for the full depth.

Cluster Setup & Cluster Hardening — the platform's own bones (15% + 15%)

Cluster Setup is mostly NetworkPolicy and CIS compliance. Know that policies are additive and deny-by-default the moment a Pod is selected by any policy, and that an empty podSelector: {} means "every Pod in this namespace" — this course's Networking & the CNI and Security: Defense in Depth cover the mechanics and the classic default-deny-then-one-allow-rule pattern in full, so it isn't repeated here. Add kube-bench for CIS benchmark checks against etcd, the kubelet and the API server; the notorious findings are kubelet anonymous auth left on, --profiling=false missing, and etcd running without client-certificate auth. Ingress TLS is a kubernetes.io/tls Secret referenced from a tls: block — see ingress-nginx and cert-manager. Protecting node metadata means blocking Pod egress to the cloud metadata endpoint (commonly 169.254.169.254) so a compromised Pod can't lift the node's cloud credentials — and verifying platform binaries means checking published checksums before you ever run an unfamiliar kubectl or kubelet build.

Cluster Hardening is RBAC and ServiceAccounts examined from the attacker's side. This course's RBAC & Admission Control covers Roles, ClusterRoles and the admission pipeline in depth; the exam-specific twist is the ServiceAccount competency's exact wording — disable the defaults. Set automountServiceAccountToken: false on any Pod that never calls the API server, because a mounted token sitting in the container filesystem is a credential waiting to be read off disk. Restricting API access means no anonymous auth, no wildcard RoleBindings, and nothing bound to system:masters that doesn't need to be there. Upgrading to avoid CVEs is kubeadm upgrade plan / apply then a careful drain-and-upgrade per node — the same operational muscle the CKA blueprint already drilled, re-examined here as vulnerability management rather than routine maintenance.

System Hardening — the layer underneath the kubelet (10%)

The smallest domain by weight, and the one candidates most often treat as an afterthought. Minimizing the host OS footprint means fewer packages, fewer running services, fewer open ports on every node — a smaller thing for an attacker who does land on a node to work with. Least-privilege IAM applies the same principle to the node's own cloud identity: a node role that can read from one bucket shouldn't also be able to write to every bucket in the account. Minimizing external network access is node-level egress control, the same instinct as node-metadata protection above but applied broadly. And the two kernel tools the curriculum names explicitly — seccomp and AppArmor — restrict which syscalls and file paths a container can touch even if something inside it is compromised; see the worked seccompProfile field in the next section, and DevSecOps's Kubernetes Security Deep Dive for the full defense-in-depth layering these controls sit inside.

Minimizing microservice vulnerabilities — a namespace and a restricted Pod (20%)

PodSecurityPolicy is gone; its replacement is Pod Security Admission — three labels on a Namespace, three standards (privileged, baseline, restricted), and three modes (enforce rejects, audit writes to the audit log, warn messages the user at apply time). This course's RBAC & Admission Control covers PSA's place in the admission pipeline; here's the artifact you should be able to produce from memory — a namespace enforcing restricted, and a Pod that actually satisfies it:

apiVersion: v1
kind: Namespace
metadata:
  name: payments
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/enforce-version: latest
    pod-security.kubernetes.io/warn: restricted   # catches near-misses before they're rejected
---
apiVersion: v1
kind: Pod
metadata:
  name: ledger-api
  namespace: payments
spec:
  automountServiceAccountToken: false        # ServiceAccounts: disable the default
  securityContext:
    runAsNonRoot: true
    runAsUser: 10001
    seccompProfile:
      type: RuntimeDefault                   # System Hardening's seccomp competency, in practice
  containers:
    - name: api
      image: registry.internal/ledger-api@sha256:9f2c...   # digest, not a mutable tag
      securityContext:
        allowPrivilegeEscalation: false
        readOnlyRootFilesystem: true
        privileged: false
        capabilities:
          drop: ["ALL"]

Every field above is something restricted rejects if it's missing — apply this to a namespace labeled enforce: restricted without one of them and read the rejection message; it names exactly what's wrong. Beyond PSA, this domain also covers Secrets management — remember a Kubernetes Secret is base64, not encryption, so the real controls are etcd encryption at rest and tight RBAC on the secrets resource, covered further in the sibling Platform Engineering course's Secrets & Workload Identity page — isolation techniques, where a sandboxed runtime like gVisor or Kata is selected per-Pod with a RuntimeClass for genuinely untrusted workloads, and pod-to-pod encryption via Cilium's transparent encryption or Istio mTLS in STRICT mode.

Supply chain security — from base image to a gate that actually checks (20%)

Walk this domain as a pipeline. Start from a minimal base image (distroless or scratch) to shrink what a scanner even has to look at. Generate an SBOM and scan for CVEs — the sibling DevSecOps course's Trivy guide covers both in depth. Statically analyse the manifest itself with Kubesec or KubeLinter, looking for the same missing fields the worked Pod above already sets. Sign the artifact with cosign before it ever reaches a permitted registry:

# sign keylessly, tying the signature to a specific CI identity
cosign sign registry.internal/ledger-api@sha256:9f2c...

# verify — pin the identity; a wildcard '.*' accepts anyone's signature
cosign verify --certificate-identity-regexp '^https://github\.com/acme/.+' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  registry.internal/ledger-api@sha256:9f2c...

None of that matters if the cluster doesn't enforce it — the last mile is an admission-time gate, and the curriculum expects you to recognize the shape even if it doesn't demand a full policy engine's syntax from memory. At a light level, a permitted-registry-plus-signature gate looks like this:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: supply-chain-gate
spec:
  validationFailureAction: Enforce
  rules:
    - name: only-permitted-registry
      match: { any: [{ resources: { kinds: [Pod] } }] }
      validate:
        message: "Images must come from registry.internal"
        pattern:
          spec: { containers: [{ image: "registry.internal/*" }] }
    - name: images-must-be-signed
      match: { any: [{ resources: { kinds: [Pod] } }] }
      verifyImages:
        - imageReferences: ["registry.internal/*"]
          attestors: [{ entries: [{ keyless: { issuer: "https://token.actions.githubusercontent.com" } }] }]

Treat that as the shape to recognize, not a syntax to have memorized cold — this course keeps admission-controller depth deliberately light, since it isn't itself on the CKS curriculum's tool list by name. The sibling Golden Astronaut course covers Kyverno and OPA Gatekeeper as full project certifications in their own right, and DevSecOps's Kyverno guide goes considerably deeper into rule authoring if you want hands-on practice before exam day.

Monitoring, logging and runtime security — catching what got through (20%)

Prevention fails eventually, so the last fifth of the exam is detection. Behavioral analytics and attack-phase identification mean reading an alert and being able to say which stage of an intrusion you're looking at — reconnaissance, initial access, privilege escalation, exfiltration — rather than just "something's wrong." Container immutability at runtime is largely a restatement of the worked Pod above: readOnlyRootFilesystem: true, no shell or package manager baked into the image, deploy by digest rather than a mutable tag, and treat any container modified in place as compromised — replace it, don't patch it live. Kubernetes audit logs round the domain out: an audit Policy resource wired into the API server via --audit-policy-file, with four levels (None, Metadata, Request, RequestResponse) evaluated first-match-wins — which is exactly what lets you log Secrets access at Metadata only, while capturing full RBAC changes:

apiVersion: audit.k8s.io/v1
kind: Policy
omitStages: ["RequestReceived"]
rules:
  - level: Metadata          # who touched it, never the payload
    resources: [{ group: "", resources: ["secrets", "configmaps"] }]
  - level: RequestResponse   # RBAC changes are the classic escalation path — keep the whole object
    resources: [{ group: "rbac.authorization.k8s.io", resources: ["roles", "rolebindings"] }]
  - level: Metadata           # everything else in the cluster

Behavioral detection tooling like Falco sits on top of this, watching syscalls in real time rather than the API server's request log — see the sibling DevSecOps course's Falco guide for rule authoring, and Kubernetes Security Deep Dive's "continuous verification" section for how benchmarks, drift detection and this runtime backstop fit together as one layered system.

Exam logistics — confirm every number before you book

☺ Like you're 10: Here's roughly how test day works — but the exact rules and prices change, so check the official page before you pay for anything.

What follows reflects the exam as commonly documented at the time of writing. It is orientation, not a contract, and where it disagrees with the official page, the official page is right and this one is stale.

ItemWhat to expect (verify officially)
FormatOnline, remotely proctored, performance-based — hands-on tasks on live clusters. No multiple choice.
DurationRoughly two hours
PrerequisiteActive, non-expired CKA — enforced at registration. The only Kubernetes exam with a formal gate.
Graded onResulting cluster state, scored after your session ends. Partial credit per task is widely reported — never leave a task blank.
Curriculum versionTracks a specific recent Kubernetes release; this page reflects v1.34 — re-download the current curriculum before you revise
Documentation allowedHistorically wider than the CKA's — the Kubernetes docs plus a short list of named security-project docs. Confirm the exact allowlist in the exam's own Important Instructions before you rely on any tab.
Price, pass mark, retake, validityMove without notice — do not plan or budget around any figure quoted on a third-party page, this one included.
⚠ Verify officially before you book

This page is an independent, unofficial study resource — not affiliated with the CNCF or the Linux Foundation. Price, duration, pass mark, retake policy, permitted documentation and curriculum version all change over time. Confirm current details on the official Linux Foundation CKS page and the CNCF certification page before you pay for anything, and read the Candidate Handbook in your LF portal. The curriculum itself is published openly at github.com/cncf/curriculum. See Kubernetes Certifications for this course's full ladder, and the sibling Golden Astronaut course for the other nine CNCF certifications, LFCS, and the full Kubestronaut and Golden Kubestronaut program if the CKS is one stop on a longer road for you.

How to prepare using this course

☺ Like you're 10: There's already a page here for almost everything on the test — this is the short list of where to start.

Read How to Study for a CNCF Exam first for the general method, then work this exam's own pages: CKS Study Plan for a full week-by-week schedule sized to the domain weights above, CKS Practice Tasks for graded reps, and Mock Exam · Set 1 and Set 2 for full timed runs. Capstone Part 5 — Security & RBAC is where the worked Pod above stops being something you read and starts being something you write against a real cluster, and Drill — Harden an RBAC Configuration drills the Cluster Hardening domain specifically. Keep a running list of anything that trips you up in Field Notes, and use the glossary whenever a term above doesn't fully click.

🐢 Timmy's workshop · 40 min

On kind or minikube, against a clock. (1) Label a namespace pod-security.kubernetes.io/enforce=restricted and try to deploy a privileged Pod — read the rejection carefully, it names every rule you broke. (2) Fix it into the shape of the worked Pod above. (3) Apply a default-deny NetworkPolicy in that namespace, confirm with kubectl exec that a request to another Pod now hangs, then write the one allow-rule that re-opens it — remember NetworkPolicy is only enforced if your CNI enforces it; kind's default kindnet and a stock minikube silently accept the objects and ignore them, so bring the cluster up with Cilium or Calico first. (4) Turn on audit logging at Metadata level, make a change as a bound ServiceAccount, and find that action in the log. Comfortable inside forty minutes, and you've found your real study plan for the domains that weigh the most.

🎬 At the Pod Squad
🦊

Foxy: I already have my CKA. Why not just study CKS material straight from a dump site and skip the whole "practice on a cluster" part?

🐢

Timmy: Because it's performance-based, Foxy. There's nothing to leak. They hand you a cluster with a real hole in it and grade whatever state you leave behind — a memorized answer doesn't type a NetworkPolicy into a terminal for you.

👺

Gizmo: Fine, skip the dump then — but you don't really need the CKA prerequisite if you already "basically know" Kubernetes, right? Just try registering anyway. 😏

🐢

Timmy: It's enforced, Gizmo, not a suggestion. No active CKA on file, no seat in the exam.

🐘

Ellie: And even once you're in — the Monitoring domain is a fifth of your score, and most candidates never once look at an audit log before exam day. I keep the record for a reason.

🐰

Remy: Which is exactly why the forty-minute workshop above is worth doing more than once. Speed under a two-hour clock only comes from reps, not reading.

🐢 Timmy's checkpoint

1. What is the CKS's one formal prerequisite, and how strictly is it enforced? 2. Name the six CKS domains and their weights. 3. Which three domains together make up 60% of the exam? 4. What do the three Pod Security Standards levels have, and what do the three enforcement modes do? 5. In the worked Pod example, what's the difference between the container-level securityContext and the Pod-level one? 6. Why does an empty podSelector: {} combined with policyTypes: [Ingress, Egress] matter for a default-deny NetworkPolicy?

Check your answers
  1. An active, non-expired CKA, checked at registration — the only Kubernetes exam with a formal, enforced gate.
  2. Cluster Setup 15% · Cluster Hardening 15% · System Hardening 10% · Minimize Microservice Vulnerabilities 20% · Supply Chain Security 20% · Monitoring, Logging and Runtime Security 20%.
  3. Minimize Microservice Vulnerabilities, Supply Chain Security, and Monitoring/Logging/Runtime Security — 20% each, 60% together.
  4. Standards: privileged, baseline, restricted — increasingly strict floors on what a Pod is allowed to request. Modes: enforce rejects the object, audit records it in the audit log without blocking, warn messages the user at apply time without blocking — all set as labels on the Namespace.
  5. The Pod-level securityContext (runAsNonRoot, runAsUser, seccompProfile) applies as defaults across every container in the Pod; the container-level one (allowPrivilegeEscalation, readOnlyRootFilesystem, capabilities) can further restrict, but not loosen, what the Pod-level context set.
  6. An empty podSelector: {} selects every Pod in the namespace, and with no ingress or egress rules listed under both policy types, it denies all traffic in both directions for every one of them — the baseline you then re-open selectively with a second, narrower policy.