Certifications · ICA · Mock Exam · Set 2

ICA Mock Exam · Set 2

Twenty more items, split the way the real ICA is split — not fifty pure multiple-choice questions like the knowledge-only associates elsewhere on this shelf, but a mix of hands-on Task items, where you write the manifest or type the command yourself before checking a model solution, and ordinary MCQ items — weighted question-for-question to the same four official domains as the ICA curriculum: seven on Traffic Management, five on Securing Workloads, four on Installation, Upgrades & Configuration, four on Troubleshooting. This is the second of three papers on this shelf — see also Set 1 and Set 3 — and it assumes you already know the drill from a hybrid paper: a Task item wants typed, working YAML or a real istioctl command, not a description of one. None of these twenty repeat a scenario used elsewhere on this course. Answer each item in full before opening its model solution.

☺ Explain it like I'm 10

Most practice quizzes only ever ask you to pick an answer from a list. This one does that too — but sometimes, instead, it just hands you a blank page and says "build the thing," with no choices to pick from at all. That's the half a normal quiz can't fake, because the real ICA works that way. So this paper mixes nine "build it yourself" tasks — real YAML, real commands, checked against a model answer — with eleven ordinary pick-the-answer questions, all covering the same four topics the real exam covers. If you can only do the pick-the-answer half well, you're only half ready for exam day.

🦉🦫Your hosts for this topic: Professor Owl & Benny the Beaver — Owl keeps you honest about which of the four domains a scenario actually belongs to, and Benny is here for the nine Task items: he doesn't accept "I know roughly what that YAML looks like" as an answer.

How this paper is weighted

☺ Like you're 10: Same shape as the real test — the biggest topic still gets the most questions, and every topic gets a mix of "build it" and "pick it."

Twenty items divide the ICA's four official domain weights — 35, 25, 20, 20 — into whole numbers with no rounding: 7, 5, 4, 4. That total is deliberately modest. The Linux Foundation doesn't publish an exact item count for the ICA — candidate write-ups cluster loosely around fifteen to twenty items across the two-hour sitting, and this paper's size was chosen to sit inside that same range rather than to claim a real number. Within each domain, most items lean Task where the real curriculum's own competencies read as verbs (configuring, installing, troubleshooting), and MCQ where a scenario tests understanding of a rule rather than the ability to type it.

DomainOfficial weightItems hereWhere to revise
🐦 Traffic Management35%7 — Q1–Q7 (3 Task, 4 MCQ)Istio · ICA — the exam
🐢 Securing Workloads25%5 — Q8–Q12 (2 Task, 3 MCQ)ICA — the exam · Service Mesh Architecture
🦫 Installation, Upgrades & Config20%4 — Q13–Q16 (2 Task, 2 MCQ)Istio · ICA — the exam
🐘 Troubleshooting20%4 — Q17–Q20 (2 Task, 2 MCQ)ICA — the exam · Lock Down a Mesh Namespace drill
~120-minute pace · 20 items · 4 domains Traffic Mgmt 42 min · 35% Securing 30 min · 25% Install/Upgrade 24 min · 20% Troubleshoot 24 min · 20% 0 ~120 min Nine Task items, eleven MCQ items — mixed into every domain 9 Task items · 45% 11 MCQ items · 55% Every domain mixes both item types Read each Task stem for the exact constraint (a field, a percentage, a namespace) before you open the editor. The real exam's item count and Task/MCQ ratio aren't published — this paper's split is a study choice, not a claim.

Two item types, one exam

☺ Like you're 10: Some questions want you to pick an answer. Some want you to actually build the thing, from nothing, and show your work.

Every MCQ item below works like the ones you know from every other cert on this shelf: four options, one best answer, an explanation underneath. Every Task item works differently on purpose — it names a service, a namespace, and a concrete requirement, and it wants you to actually write the resource or type the command before you look. Resist the urge to read a Task stem and mentally nod "yes, I know roughly what goes there" without producing real YAML; that mental shortcut is exactly the gap a Task item exists to catch, and it's invisible until you're staring at a blank editor on exam day with a proctor watching the clock. Some Linux Foundation hands-on exams permit one browser tab of official documentation during the performance-based portion — the current candidate handbook is the only place to confirm whether that applies here, and if it does, practising with only that one tab open (not a full search engine) is itself part of the skill.

🦆 Dot's-eye view

"I can read a DestinationRule fine — I just can't seem to write one from a blank file without my fingers stalling on whether outlierDetection goes under trafficPolicy or sits beside it. That five-second hesitation is nothing when I've got docs open. It's everything when someone's timing me."

Sit it like the real thing

☺ Like you're 10: No notes, no open tabs beyond whatever the real exam actually allows, one sitting, straight through — and for the Task items, an actual terminal, not a guess written in your head.

Sit this with a real cluster in front of you — a local kind or minikube cluster with Istio installed is enough — so the nine Task items are graded by whether your YAML actually applies and does what the stem asked, not by whether it merely looks plausible. Time yourself against the pacing above: roughly 42 minutes of attention on Traffic Management items, 30 on Securing Workloads, 24 each on Installation/Upgrades and Troubleshooting, though in practice the Task items will eat more of your budget than the MCQ items do — expect that, and don't panic when it happens. This course does not re-teach the Kubernetes fluency the ICA assumes; if kubectl and Services still feel effortful, The Kubernetes Baseline You Need or the sibling Kubernetes course is the better use of today than this paper.

⚠ Exam details change — the official page is the authority

This is an independent, unofficial study resource, not affiliated with the CNCF or The Linux Foundation. What's safe to state structurally: the ICA is a CNCF/Linux Foundation exam combining performance-based tasks with multiple-choice items, delivered online under remote proctoring, with no formal prerequisite. What is not published: the real item count, the Task-to-MCQ ratio, and the pass mark — unlike the pure multiple-choice associates on this shelf, there's no official Multiple Choice Exam FAQ figure that cleanly applies here, so treat any specific number you read for the ICA, on this page or anyone else's, as unverified. Price, duration, retake policy, eligibility window, certification validity, and the pinned Istio version are all revised over time too. Confirm everything on the current official Linux Foundation ICA page and its candidate handbook before you register or pay for anything.

The paper — 20 items across four domains

☺ Like you're 10: Twenty questions, grouped by topic this time instead of shuffled — build something, then pick an answer, back and forth, all the way through.

Each item names its domain and type in parentheses. Task items give a scenario and a concrete requirement; open the model solution only after you've written your own version. MCQ items give four options and a worked explanation.

Block 1 — Traffic Management (Q1–Q7)

Q1 (Traffic Management, Task). The life-support service in namespace hab has two subsets, v1 and v2. Write a DestinationRule that caps the connection pool at 50 TCP connections, and configures outlier detection to eject an endpoint after 3 consecutive 5xx errors, with a 15-second base ejection time and a maximum ejection of 40% of the pool.

Model solution
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: life-support
  namespace: hab
spec:
  host: life-support.hab.svc.cluster.local
  subsets:
    - name: v1
      labels: { version: v1 }
    - name: v2
      labels: { version: v2 }
  trafficPolicy:
    connectionPool:
      tcp: { maxConnections: 50 }
    outlierDetection:
      consecutive5xxErrors: 3
      interval: 10s
      baseEjectionTime: 15s
      maxEjectionPercent: 40

Both fields live under one trafficPolicy — connection-pool sizing (circuit breaking) and outlier detection are siblings, not nested inside each other, and both belong to the DestinationRule, never the VirtualService.

Q2 (Traffic Management, MCQ). A VirtualService for docking-api routes 60% of traffic to subset v1 and 30% to subset v2, with no third route entry accounting for the remaining 10%. What does the curriculum's traffic-shifting competency say is wrong here?

Check the answer

B. Weights inside one route must sum to 100 — never leave a percentage of traffic with no declared destination.

Q3 (Traffic Management, Task). Write a VirtualService for comms-relay that routes any request carrying the exact header x-canary: true to subset canary, and for everything else applies fault injection — a 2% chance of a 500ms delay and a separate 2% chance of a 503 abort — plus a 3-second timeout and 2 retries at 1 second per try, retrying on 5xx and reset.

Model solution
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: comms-relay
  namespace: hab
spec:
  hosts: ["comms-relay"]
  http:
    - match:
        - headers:
            x-canary: { exact: "true" }
      route:
        - destination: { host: comms-relay, subset: canary }
    - fault:
        delay: { percentage: { value: 2 }, fixedDelay: 500ms }
        abort: { percentage: { value: 2 }, httpStatus: 503 }
      timeout: 3s
      retries:
        attempts: 2
        perTryTimeout: 1s
        retryOn: 5xx,reset
      route:
        - destination: { host: comms-relay, subset: v1 }

Header-based matching goes in its own http entry, evaluated in order — the canary match must come first, or the fault-injecting catch-all entry would swallow every request before the header rule ever runs.

Q4 (Traffic Management, MCQ). An engineer wants exactly two external APIs reachable from the mesh, with everything else blocked by default. Which combination achieves this?

Check the answer

B. ServiceEntry declares what's reachable; REGISTRY_ONLY is what makes anything undeclared unreachable by default. A and C solve unrelated problems; D governs identity, not egress.

Q5 (Traffic Management, Task). Write a VirtualService for nav-computer that shifts 80% of traffic to subset v1 and 20% to subset v2, with a 2-second timeout and 3 retries at 500ms per try, retrying on 5xx, reset, and connect-failure.

Model solution
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: nav-computer
  namespace: hab
spec:
  hosts: ["nav-computer"]
  http:
    - timeout: 2s
      retries:
        attempts: 3
        perTryTimeout: 500ms
        retryOn: 5xx,reset,connect-failure
      route:
        - destination: { host: nav-computer, subset: v1 }
          weight: 80
        - destination: { host: nav-computer, subset: v2 }
          weight: 20

Both subsets referenced here (v1, v2) need a matching DestinationRule that defines them — a VirtualService alone doesn't create subsets, it only routes to ones a DestinationRule has already declared.

Q6 (Traffic Management, MCQ). Which pairing correctly places each of the curriculum's five named resilience features on the resource that actually configures it?

Check the answer

B. Split cleanly: the VirtualService decides what happens to a request in flight (routing behavior); the DestinationRule decides what happens to the pool of endpoints behind one destination.

Q7 (Traffic Management, MCQ). A Gateway named beacon-gateway is deployed and listening, but a VirtualService written to route through it never receives any external traffic — only in-mesh calls reach it. What is the most likely cause?

Check the answer

A. Omitting gateways is the single most common reason a correctly-written route never receives outside traffic — the classic "why is my route being ignored?" moment.

Block 2 — Securing Workloads (Q8–Q12)

Q8 (Securing Workloads, Task). Write a PeerAuthentication that sets strict mTLS mesh-wide for namespace hab, and an AuthorizationPolicy that allows only the ServiceAccount flight-console to call GET and POST on paths under /api/o2-levels against the life-support app.

Model solution
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
  name: default
  namespace: hab
spec:
  mtls:
    mode: STRICT
---
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: allow-flight-console
  namespace: hab
spec:
  selector:
    matchLabels: { app: life-support }
  action: ALLOW
  rules:
    - from:
        - source:
            principals: ["cluster.local/ns/hab/sa/flight-console"]
      to:
        - operation:
            methods: ["GET", "POST"]
            paths: ["/api/o2-levels*"]

Naming a PeerAuthentication resource default with no selector makes it apply mesh-wide within the namespace — that name and that omission are both meaningful, not stylistic.

Q9 (Securing Workloads, MCQ). Namespace hab has PeerAuthentication set to PERMISSIVE and a RequestAuthentication requiring a valid JWT from a specific issuer — but no AuthorizationPolicy at all. A request arrives with no JWT attached whatsoever. What happens?

Check the answer

B. This exact gap — a validator with nothing to actually enforce presence — is one of the most commonly missed distinctions on the security domain.

Q10 (Securing Workloads, Task). Using nothing but a single AuthorizationPolicy with an empty spec, write a policy that leaves namespace hab with zero permitted callers for any workload it selects.

Model solution
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: deny-all
  namespace: hab
spec:
  {}                    # action defaults to ALLOW, with zero rules
                         # => nothing at all is permitted

The trap for anyone new to this: the empty spec looks like it does nothing, but an ALLOW policy with zero rules matches zero requests — and the moment any ALLOW policy selects a workload, that workload becomes default-deny for everything else. Know this cold; it's the most-tested single fact in the domain.

Q11 (Securing Workloads, MCQ). A team wants an AuthorizationPolicy rule that requires a caller to hold both the ServiceAccount identity frontend and a valid JWT — not either one alone. They write two separate - source: entries under from, one with principals and one with requestPrincipals. What did they actually build?

Check the answer

B. To require both conditions, principals and requestPrincipals must sit inside the same - source: block. Splitting them into two blocks silently turns "and" into "or" — a hole, not a policy.

Q12 (Securing Workloads, MCQ). A Gateway resource deployed in namespace istio-ingress references tls.credentialName: beacon-tls, but the matching Kubernetes Secret was created in namespace hab instead. What's the most likely result?

Check the answer

B. Edge TLS termination looks for its Secret in the gateway's own namespace — a wrong namespace for the Secret is a quiet, easy-to-miss way to break TLS termination entirely.

Block 3 — Installation, Upgrades & Configuration (Q13–Q16)

Q13 (Installation, Task). Using Helm rather than istioctl, write the full command sequence to install Istio for the first time onto a fresh cluster: the CRDs and cluster roles, the control plane, and one ingress gateway named beacon-gateway in namespace istio-ingress.

Model solution
helm repo add istio https://istio-release.storage.googleapis.com/charts
helm install istio-base istio/base -n istio-system --create-namespace
helm install istiod     istio/istiod -n istio-system --wait
helm install beacon-gateway istio/gateway -n istio-ingress --create-namespace

The order is not arbitrary: base installs the CRDs everything else depends on, istiod needs those CRDs to exist first, and a gateway chart install can happen any time after istiod is up.

Q14 (Installation, MCQ). A team wants to enrol namespace cargo-bay in ambient mode, with no pod restarts or pod-spec changes required. Which single label achieves this?

Check the answer

B. Sidecar and ambient enrollment use two entirely different, mutually exclusive labels — applying the wrong one silently puts a namespace in the wrong data-plane mode.

Q15 (Installation, Task). Perform a canary upgrade of the control plane to revision 1-28-0, create a stable tag pointing at it, and then move exactly one namespace, hab, onto that revision.

Model solution
istioctl install --set revision=1-28-0 -y            # second, parallel control plane
istioctl tag set hab-stable --revision 1-28-0        # stable alias for later moves
kubectl label ns hab istio.io/rev=1-28-0 --overwrite # move ONE namespace
kubectl rollout restart deployment -n hab            # sidecars must be recreated

The restart is not optional — sidecar injection happens only at pod creation, so relabeling a namespace alone does nothing to pods that are already running.

Q16 (Installation, MCQ). A namespace already running pods is relabeled with istio-injection=enabled for the first time. After the label is applied, the existing pods still show no sidecar container. What single action fixes this?

Check the answer

B. This is one of the most exam-relevant install gotchas: a label change is never retroactive for already-running pods.

Block 4 — Troubleshooting (Q17–Q20)

Q17 (Troubleshooting, Task). Immediately after a traffic-shifting change to docking-api in namespace hab, clients start receiving 503 responses with NO_HEALTHY_UPSTREAM. Write the three-step diagnostic sequence, in order, and name the single most likely root cause.

Model solution
# 1. CONFIGURATION — lint before blaming anything else
istioctl analyze -n hab

# 2. CONTROL PLANE — did the config actually reach every proxy?
istioctl proxy-status

# 3. DATA PLANE — what does one proxy actually believe?
istioctl proxy-config cluster  docking-api-7d9f-abcde.hab
istioctl proxy-config endpoint docking-api-7d9f-abcde.hab \
  --cluster "outbound|8080|v2|docking-api.hab.svc.cluster.local"

Most likely cause: the VirtualService's new weighted route names a subset (commonly the newly-introduced one) that no DestinationRule defines. istioctl analyze catches this before you even reach the second or third step, which is exactly why it always comes first.

Q18 (Troubleshooting, MCQ). An application team reports their calls to life-support now fail with RBAC: access denied. Which layer is almost certainly responsible?

Check the answer

B. RBAC: access denied is Istio's own authorization layer talking — go straight to the AuthorizationPolicy resources selecting that workload, not the network.

Q19 (Troubleshooting, Task). Right after namespace hab is flipped to PeerAuthentication mode: STRICT, one deployment's liveness probe starts failing, even though the application itself is healthy. Name the most likely cause and the fix.

Model solution

Cause: the kubelet issues liveness and readiness probes directly to the pod, outside the mesh's mTLS — under STRICT mode this plaintext probe traffic is normally rejected. Istio mitigates the common case by automatically rewriting HTTP and gRPC probes to route through the sidecar so they still succeed under STRICT; a probe still failing after the flip usually means either automatic probe rewriting was disabled (via the traffic.sidecar.istio.io/rewriteAppHTTPProbers annotation set to "false") or the probe is a raw TCP socket probe, which rewriting doesn't cover.

kubectl get pod <pod> -n hab -o yaml | grep rewriteAppHTTPProbers
istioctl proxy-config secret <pod>.hab   # confirm the workload cert actually arrived

Fix: remove the disabling annotation (or switch a TCP probe to an HTTP one where the application supports it) so the kubelet's probe is rewritten to go through the sidecar rather than hitting the pod directly.

Q20 (Troubleshooting, MCQ). Running istioctl proxy-status, one proxy shows STALE in its CDS column while every other proxy shows SYNCED. What does STALE mean here, as distinct from NOT SENT?

Check the answer

B. Recognizing the two error states apart, instantly, is a control-plane troubleshooting skill worth drilling on its own — they point at different problems.

Score yourself

☺ Like you're 10: Count what you got right out of twenty, then look at whether it was the "build it" half or the "pick it" half that cost you the most points.

Unlike the pure multiple-choice associates on this shelf, the Linux Foundation does not publish a confirmed pass mark for the ICA — there is no Multiple Choice Exam FAQ figure to calibrate against here, because the ICA isn't a pure multiple-choice exam. Treat 80% or better across both papers as a target to clear comfortably, not a confirmed cut score.

DomainItems in this paperYour scoreIf you're under two-thirds, go here
🐦 Traffic ManagementQ1–Q7/7Istio
🐢 Securing WorkloadsQ8–Q12/5ICA — the exam
🦫 Installation, Upgrades & ConfigQ13–Q16/4Istio
🐘 TroubleshootingQ17–Q20/4ICA — the exam
Total20 items/20No published cut score — clear 80%+ comfortably
◆ Key idea

Score the Task items and the MCQ items separately, not just by domain. Missing an MCQ item means a fact needs another read. Missing a Task item — especially one where your YAML was close but wrong in a specific field — means the fact is known but not yet typeable under pressure, and that gap is exactly what flashcards can't close. If you're clean on MCQ but shaky on Task, the fix isn't more reading; it's more time at a real terminal.

If you sat Set 1 first, compare domain breakdowns side by side. A domain still weak on both papers is real, not noise — reread it properly before you book anything. When you're ready to confirm that reading translated into typing speed, Set 3 is the third paper on this shelf.

Where each domain is taught

☺ Like you're 10: Every question above traces back to one of a handful of pages — go back to the page, not to the wider internet.

Nothing in this paper examines anything outside this course's own material. The ICA blueprint is the primary source for all four domains; where a topic needs the wider mesh-architecture picture, it lives in this course's own deep-dive material.

Beyond the domain pages, the wider revision kit still applies: the glossary for any term a stem assumed you already knew, flashcards for the vocabulary, and the ICA study plan for how to sequence all three papers against your remaining prep time. The Lock Down a Mesh Namespace drill is the closest thing on this course to a fourth Task item, run on your own cluster with no answer key waiting underneath it.

🎬 At Mission Control
🦫

Benny: Nine out of nine Task items ran clean for me on the first try. Turns out typing the YAML for real, every night this week, actually works.

🦊

Foxy: I got the YAML right but bombed Q11 — the ANDed-versus-ORed one. I put principals and requestPrincipals in two separate source blocks like it was obviously fine.

🦉

Professor Owl: Two blocks means "either," Foxy, not "both." One block, two keys, is what "and" actually looks like in this policy language.

🐢

Timmy: That's the single most-tested trap in the security domain for a reason — it looks harmless and it quietly opens a hole instead of closing one.

👺

Gizmo: Or just never write an AuthorizationPolicy at all. No policy, no ambiguity about AND versus OR! 😈

🦫

Benny: No policy also means no security, Gizmo — the whole namespace stays wide open. That's not a shortcut, that's the outage this domain exists to prevent.

🦊

Foxy: Fine, fine. Set 3 next — I want a rematch on that exact question type before I book anything for real.

🐢 Timmy's checkpoint

1. Name the four ICA domains and their weights. 2. Which resource defines subsets, and what happens when a VirtualService routes to one that doesn't exist? 3. What's the difference between what a Task item is testing and what an MCQ item is testing, and why does this paper mix both? 4. Inside one AuthorizationPolicy source block, are two keys ANDed or ORed — and what changes if they're split into two separate - source: entries instead? 5. Why does relabeling a namespace for sidecar injection do nothing to pods that are already running? 6. Give the three-step troubleshooting ladder in order, and the command you'd run at each step.

Check your answers
  1. Traffic Management 35%; Securing Workloads 25%; Installation, Upgrades, and Configuration 20%; Troubleshooting 20%.
  2. DestinationRule defines subsets. A VirtualService routing to a subset no DestinationRule defines produces 503s with NO_HEALTHY_UPSTREAMistioctl analyze catches it before it's ever applied.
  3. An MCQ item tests whether you recognize the correct fact among distractors. A Task item tests whether you can actually produce that fact, unaided, as working YAML or a real command — a strictly harder and different skill, which is exactly why the real hybrid exam, and this paper, test both.
  4. ANDed — keys inside one source block (like principals plus requestPrincipals) must all match. Splitting them into two separate - source: list entries makes them ORed instead — silently turning "identity and token" into "identity or token."
  5. Sidecar injection happens only at pod creation — it's a mutating admission webhook that fires when a pod is first created, not a controller that continuously retrofits already-running pods. A label change only affects pods created after it, so existing pods need kubectl rollout restart deployment to be recreated under the new label.
  6. Configurationistioctl analyze. Control planeistioctl proxy-status, checking every column reads SYNCED. Data planeistioctl proxy-config cluster|endpoint|route|secret against one specific proxy.
⏱️ The three ICA papers

Set 1 · Set 2 (you are here) · Set 3. All three are weighted to the same 7 · 5 · 4 · 4 domain split and mix Task and MCQ items the way the real hybrid exam does, so scores across papers are directly comparable domain for domain. See the ICA study plan for where each paper fits against your remaining prep time, the practice tasks & questions bank for shorter drills in between, and ICA — the exam for the full domain writeup and official logistics.