CCA Study Plan
The CCA blueprint lays out what the eight domains cover. This page decides when you study each one, and for how long — and it refuses to split fourteen days into eight equal slivers. Architecture (20%) and Network Policy (18%) are 38% of the paper between them and open the plan on days 1–5. eBPF, the domain almost everyone quietly over-prepares because it sounds like the "real" engineering, is worth exactly 10% — the same as three other domains — and gets capped at a single day here on purpose. What follows is a day-by-day schedule, an hours budget derived straight from the published weights, a hands-on lab day even though the real exam never opens a terminal, and a readiness gate you check honestly before sitting a timed mock.
Imagine Pip has one delivery route and fourteen days to learn every stop before flying it for real. The stops on her route aren't equal — two houses receive most of the parcels between them (that's Architecture and Network Policy, 38% of her deliveries), while one house has a shiny new mailbox everybody assumes must get the most mail, when really it only gets a tenth of it, same as three other ordinary houses on the block (that's eBPF). A smart courier doesn't memorize every mailbox equally hard. She spends most of her practice rounds at the two busiest houses, and gives the shiny mailbox exactly the attention its actual mail volume deserves — no more, no matter how interesting it looks.
Spend the fourteen days where the marks are
☺ Like you're 10: Don't give every topic the same number of days. Give the big ones more days and the small ones fewer — that's the entire idea.
The CNCF publishes eight weighted domains for the CCA, and this plan does nothing cleverer than turning that percentage straight into a day count and an hours budget. Read the full domain table and competency list on the CCA blueprint first if you haven't already — this page assumes you already know roughly what each domain covers and spends its words purely on pacing it.
hours for a domain = total domain-study hours × that domain's weight.
This plan spends 20 hours of domain study across twelve days — under two hours a day, which is realistic for a 90-minute knowledge exam that doesn't need eleven-week devotion. Applying that formula to the eight published weights:
| Domain | Weight | Days | Hours (of 20) |
|---|---|---|---|
| 🦉 Architecture | 20% | 3 | 4.0h |
| 🐢 Network Policy | 18% | 2 | 3.6h |
| 🐦 Service Mesh | 16% | 2 | 3.2h |
| 🐘 Network Observability | 10% | 1 | 2.0h |
| 🦫 Installation & Configuration | 10% | 1 | 2.0h |
| 🐙 Cluster Mesh | 10% | 1 | 2.0h |
| 🐼 eBPF | 10% | 1 | 2.0h |
| 🐦 BGP & External Networking | 6% | 1 | 1.2h |
| Total | 100% | 12 | 20.0h |
Look at the hours column, not the day column, when you want the honest picture. eBPF, Network Observability, Installation and Cluster Mesh all get exactly the same 2.0 hours — one ordinary day each. Candidates who disappear into kernel internals for a week are spending five or six times this domain's actual budget on a tenth of the paper, and every one of those extra hours is borrowed, unpaid, from Architecture and Network Policy.
Before day one — pick your pace
☺ Like you're 10: Fourteen days is a guess that fits most people. If Kubernetes and networking already feel familiar, you can move faster. If they don't yet, give yourself more runway.
"Fourteen days" assumes you're already comfortable reading a Kubernetes manifest and know roughly what a Service and a plain NetworkPolicy do — CCA doesn't re-teach Kubernetes itself, and every scenario question on the exam is phrased in terms of Pods, Deployments and Services it assumes you already recognize. If any of that is still new, this course's own Kubernetes Baseline You Need or the sibling Kubernetes course is worth a detour before day one here.
| Your starting point | Lane | What to change |
|---|---|---|
Comfortable with core Kubernetes objects and plain NetworkPolicy; haven't run Cilium specifically | Standard — 14 days | Run the plan exactly as written. |
| Solid Kubernetes fundamentals, but eBPF and identity-based networking are genuinely new concepts | Extended — 19–20 days | Multiply every hours figure by 1.4, and read the eBPF & the Cilium datapath lesson before Day 1 so the vocabulary isn't brand new mid-plan. |
| Already run Cilium in production, or hold a Kubernetes CKA/CKS | Compressed — 8–9 days | Multiply every hours figure by 0.55, and skip straight to the warning callouts inside each day-range section instead of a full first read. |
The 14-day schedule
☺ Like you're 10: Here's the whole two weeks on one strip — which days belong to which topic, sized by how much of the test they're actually worth.
The bar below is the table that follows it, drawn to scale. Block width is day count, not domain count — Architecture and Network Policy together take up more than a third of the strip; eBPF gets one thin sliver, same width as three other domains.
| Days | Domain (weight) | What to do |
|---|---|---|
| 1–3 | Architecture (20%) | Learn the components and both config axes cold: cilium-agent, cilium-operator, IPAM mode, routing mode. |
| 4–5 | Network Policy (18%) | Write a CiliumNetworkPolicy from memory; drill the three enforcement modes and the DNS-first trap. |
| 6–7 | Service Mesh (16%) | Ingress vs. Gateway API, sidecarless vs. sidecar, WireGuard/IPsec for traffic in transit. |
| 8 | Network Observability (10%) | Hubble's verdicts and drop reasons; how to switch on L7 visibility without narrowing what's allowed. |
| 9 | Installation & Configuration (10%) | The cilium CLI's verbs by shape — install, status, connectivity test, config, sysdump. |
| 10 | Cluster Mesh (10%) | The three hard prerequisites and what a global Service annotation does. |
| 11 | eBPF (10%) | One jargon-free paragraph on why eBPF scales where iptables doesn't. No BPF program required. |
| 12 | BGP & External Networking (6%) | Egress gateway vs. plain masquerading; what the BGP control plane advertises. |
| 13 | Hands-on lab | Install Cilium and Hubble for real on a local cluster; watch the concepts above actually happen. |
| 14 | Readiness gate & timed mock | Work the practice question bank, then sit Mock Exam · Set 1 under real time pressure. |
Days 1–5 — Architecture and Network Policy, the 38%
☺ Like you're 10: Almost forty cents of every dollar this exam is worth lives in just two ideas: how the pieces fit together, and how the doors decide who gets in.
On days 1–3, read the Architecture section of the CCA blueprint twice and draw the components from memory before checking your sketch: cilium-agent runs on every node and programs that node's eBPF maps; cilium-operator runs once per cluster and does the non-per-node work — cluster-pool IPAM allocation, garbage-collecting stale CiliumIdentity and CiliumEndpoint objects. Then write out the two config axes as two short lists: IPAM mode (kubernetes, cluster-pool — the default, eni, azure) and routing mode (tunnel, encapsulating in VXLAN/Geneve, versus native, where the underlay already routes your PodCIDRs).
On days 4–5, move to Network Policy. The one sentence worth having automatic: Cilium enforces on a label-derived security identity, not an IP address, which is exactly why policy survives a pod being rescheduled onto a new IP. Write this policy from memory, then diff your version against the reference below field by field:
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: payments-api
namespace: prod
spec:
endpointSelector: # WHICH pods this policy protects
matchLabels:
app: payments
ingress:
- fromEndpoints: # WHO may call — by LABELS, never by IP
- matchLabels:
app: checkout
io.kubernetes.pod.namespace: prod
toPorts:
- ports: [{ port: "8080", protocol: TCP }]
egress:
- toEndpoints: # DNS FIRST — or toFQDNs can never resolve
- matchLabels:
io.kubernetes.pod.namespace: kube-system
k8s-app: kube-dns
toPorts:
- ports: [{ port: "53", protocol: ANY }]
rules:
dns: [{ matchPattern: "*" }]
- toFQDNs: # egress by hostname, not by IP range
- matchName: "api.stripe.com"
toPorts:
- ports: [{ port: "443", protocol: TCP }]In default enforcement mode, an unselected endpoint allows everything. The moment a policy's endpointSelector matches a pod, that direction becomes default-deny — so adding one egress rule for your database silently denies every other egress destination that pod had, DNS included. The three modes are default, always (default-deny from the start) and never (not enforced). Get this cold before day 6; it's the single idea the CCA leans on hardest, in both the Architecture and Network Policy domains at once.
Days 6–8 — Service Mesh and Network Observability
☺ Like you're 10: Day 6–7 is how traffic gets routed in and encrypted between hops. Day 8 is how you watch it happen and prove what dropped.
Service Mesh (16%) is bigger than eBPF, Hubble or Cluster Mesh individually — candidates who study "Cilium the CNI" and skip "Cilium the mesh" quietly give away a sixth of the paper. Cilium's mesh is sidecarless: the datapath already inspects every packet, so an Envoy proxy runs once per node, only when an L7 rule needs it, instead of once per pod. Know the curriculum's own framing of Gateway API over Ingress: role-oriented (GatewayClass/Gateway/HTTPRoute split across separate RBAC), spec-native routing instead of vendor annotations, portable across implementations. For traffic in transit, Cilium encrypts node-to-node with WireGuard or IPsec — a config change, not an app change.
Day 8 is Hubble. Because the agent already inspects every packet to enforce policy, exporting the verdict is nearly free — but L7 visibility is not on by default. A flow is only parsed above L4 when a policy attaches L7 rules to it. To get visibility without narrowing what's allowed, write rules that match everything:
# The single most useful command in an incident, and a CCA favorite hubble observe --verdict DROPPED -f # prod/checkout-7d9f:52344 -> prod/payments-6b4c:8080 \ # Policy denied DROPPED (TCP Flags: SYN) <-- identity, not just an IP hubble observe --type l7 --protocol http --http-status 403 # L7 verdicts hubble status # is relay seeing every node?
"I opened a ticket saying 'the platform is broken, my service can't reach payments.' The platform engineer ran one hubble observe --verdict DROPPED -f and pointed at my own team's policy, denying it, with the rule name attached. Forty seconds, not a day of three teams proving it wasn't them."
Days 9–11 — Installation, Cluster Mesh, and the eBPF trap
☺ Like you're 10: Three ordinary-sized days for three ordinary-sized topics — including the one everybody assumes is the whole exam.
Day 9, Installation and Configuration: this exam is multiple-choice, so recognize the verbs rather than drilling flags.
cilium install --version <x.y.z> # always pin a version cilium status --wait # agents, operator, Hubble: OK? cilium connectivity test # pod-to-pod, pod-to-service, DNS, egress cilium config view # query the running cilium-config cilium sysdump # one archive with everything support needs
Day 10, Cluster Mesh: three hard prerequisites are exam favorites — a globally unique cluster name, a globally unique cluster ID, and strictly non-overlapping PodCIDRs across every meshed cluster. Making a Service global across the mesh is one annotation:
apiVersion: v1
kind: Service
metadata:
name: payments
namespace: prod
annotations:
service.cilium.io/global: "true" # merge endpoints from ALL meshed clusters
spec:
selector: { app: payments }
ports: [{ port: 8080, targetPort: 8080 }]Day 11 is eBPF — and it gets exactly the same 2.0-hour, one-day budget as the three domains above it, not a fortnight. The three competencies are answerable in prose; you never write a BPF program for this exam. Explain, in one paragraph you could say out loud, why an eBPF datapath scales where iptables doesn't: iptables walks a linear rule chain per packet, and that chain grows with every Service; eBPF programs, verified safe and JIT-compiled to native code, do effectively constant-time hash-map lookups instead, with shared state — endpoints, identities, service backends — held in eBPF maps. That paragraph, plus knowing what kubeProxyReplacement means, is the whole domain.
eBPF is the domain candidates most reliably over-study, because it sounds like the "real" systems-engineering part of the exam. It is 10% — tied with Hubble, Installation and Cluster Mesh, and worth barely half of Network Policy alone. Every extra hour spent reading kernel-verifier internals past day 11 is an hour not spent re-drilling the default-deny trap from days 4–5, where it actually costs you marks.
Days 12–14 — the hands-on lab, BGP, and the readiness gate
☺ Like you're 10: The last three days: one small remaining topic, one afternoon making it all real on an actual cluster, then an honest check before you book.
Day 12, BGP and External Networking, the smallest domain at 6%: pods leaving the cluster are normally masqueraded behind their node's IP — fine until a partner firewall wants a stable, allowlistable source, which is what an egress gateway is for. Inbound, Cilium's BGP control plane peers with physical routers and advertises PodCIDRs and LoadBalancer VIPs, so on-prem clusters get real routed addresses without an overlay.
Day 13 is the hands-on lab. CCA itself never opens a terminal — but one afternoon on a real cluster makes half the paper self-evident in a way reading alone doesn't:
kind create cluster --name cca-study cilium install --version 1.16.0 cilium status --wait cilium connectivity test # apply the Day 4-5 CiliumNetworkPolicy, then watch the denied path live kubectl apply -f payments-api.yaml hubble observe --verdict DROPPED -f # delete the DNS egress rule and watch everything else quietly break — # the exact trap the exam keeps setting kubectl delete -f payments-api.yaml
Day 14 is the gate. Don't open Mock Exam · Set 1 until every box below is honestly true, not "true if I squint":
- ① The 38% — Architecture and Network Policy
- ② The remaining six domains
- ③ The whole exam
Five or more checked, spanning all three categories, is a reasonable green light. Fewer than that, don't force the calendar — return to the specific day range above, not a general re-read of everything. Once clear, work the CCA practice questions, then sit Mock Exam · Set 1 under real conditions — 90 minutes, no notes — and mark it against the published 75% pass mark. If it's close but not comfortable, hold your booking, spend one more evening on whichever domain the mock exposed, and sit Mock Exam · Set 2 before committing a date. One score near the line is noise; two consistent scores above it is signal.
This is an independent, unofficial study resource — not affiliated with the CNCF or The Linux Foundation. As of writing in 2026, the Linux Foundation's own CCA page states a 90-minute, multiple-choice, remote-proctored exam at US$250 including one retake, with a 12-month eligibility window and 2-year validity; the 75% pass mark comes from the Linux Foundation's separate Multiple Choice Exam FAQ. Question count and the exact Cilium version under test are not published. Every one of those figures — price, duration, retakes, pass mark — is revised without much notice. Read the current official CCA page and candidate handbook before you register or pay for anything; if this page disagrees with them, they are right and this page is stale. The full logistics table lives on the CCA blueprint.
Foxy: Fourteen days, eight domains — so roughly one and three-quarter days each?
Pip: Try telling that to Architecture and Network Policy. Together they're thirty-eight percent of the paper. They get five days, not three and a half.
Master Panda: And eBPF gets exactly one. I know it's tempting — it's the part that sounds like real kernel engineering. Ten percent is ten percent. Pace yourself.
Gizmo: Or — hot tip — spend the whole fortnight on eBPF! Verifiers! JIT compilation! Sounds so impressive at parties! 😈
Timmy: Nobody at the party is going to ask about the verifier, Gizmo. They're going to ask why the checkout pod can't reach DNS after someone added an egress rule.
Ellie: That's the bit I never get tired of. One hubble observe --verdict DROPPED and the argument about whose fault it is just... ends.
Olly: Give Cluster Mesh its one day too. Unique name, unique ID, non-overlapping PodCIDRs — three facts, memorize them once, done.
1. Which two CCA domains together make up 38% of the exam, and how many of the fourteen days does this plan give them combined? 2. How many study hours does the eBPF domain get under this plan's 20-hour budget, and which three other domains get exactly the same? 3. In default enforcement mode, what happens to an endpoint's traffic the moment a policy's endpointSelector matches it? 4. Why is L7 visibility not automatically on in Hubble, and how do you turn it on without narrowing what a policy allows? 5. Name the three hard prerequisites for Cluster Mesh. 6. What does Day 13's hands-on lab give you that days 1–12 of reading can't, even though the real CCA never opens a terminal? 7. What is the published CCA pass mark, and where does that figure actually come from?
Check your answers
- Architecture (20%) and Network Policy (18%) — 38% together. This plan gives them five of the fourteen days (days 1–5), the largest combined block on the schedule.
- 2.0 hours — one ordinary day. Network Observability, Installation & Configuration, and Cluster Mesh each get the identical 2.0-hour, one-day budget, since all four domains are tied at 10%.
- That direction becomes default-deny. The endpoint no longer allows everything in that direction; only what the matching policy explicitly permits gets through — which is why adding one egress rule silently blocks every other egress destination the pod previously had, DNS included.
- Because a flow is only parsed above Layer 4 when a policy explicitly attaches an L7
rulesblock to it — L7 parsing isn't free, so it isn't default. To gain visibility without narrowing traffic, write permissive rules that match everything, such ashttp: [{}]anddns: [{ matchPattern: "*" }], so traffic still passes while Hubble starts reporting methods, paths and status codes. - A globally unique cluster name, a globally unique cluster ID, and strictly non-overlapping PodCIDRs across every meshed cluster.
- It turns concepts you've only read about into things you've watched happen — the denied flow actually appearing in
hubble observe, the DNS-first trap actually breaking egress when you delete the rule — which sticks far better against an unfamiliar scenario question than recognition-only reading does. - 75%. It isn't on the CCA product page itself — it comes from the Linux Foundation's separate Multiple Choice Exam FAQ, which states that a score of 75% or above is required to pass any Multiple Choice Exam, CCA included. Always confirm the current figure on the official page before booking.