ICA Mock Exam · Set 3
This is the third and final timed paper in the ICA's three-set trio — thirty items covering the same four official domains as the ICA blueprint, but deliberately not shared out in the real exam's 35/25/20/20 proportions. Where Set 1 and Set 2 built even coverage across all four domains, Set 3 spends most of its budget on the two places real mesh incidents actually live: Troubleshooting, which carries eleven of these thirty items rather than its official fifth, and Securing Workloads, which carries nine. Because the real ICA is hybrid — hands-on tasks at a command line alongside multiple-choice items — most items here are written as diagnostic reading exercises: a manifest, a command's output, or a symptom, and four candidate fixes. Recognizing the right answer on a screen and typing it correctly under a proctor's eye are different skills; this paper drills the first and points you to the labs for the second.
Most study papers on this shelf spread their questions evenly across everything a test covers, the way a fair quiz should. This one doesn't — it's built more like the week before a check-up, where the doctor stops asking about your general health and starts poking specifically at the two things that go wrong most often. Here that means: "something in the mesh just broke, find out what" and "is this security rule actually as tight as you think it is." You'll still see questions about routing traffic and installing the mesh, just fewer of them, because those are the parts people study for — troubleshooting and security are the parts people find out they didn't, usually during an actual incident.
AuthorizationPolicy and its relatives, and Ellie, who never forgets a metric or a log line, walks the 37% that's pure troubleshooting: read the symptom, name the layer, name the command.How this paper is weighted, and why it leans where it leans
☺ Like you're 10: The real test gives routing the biggest slice. This practice paper gives troubleshooting and security the biggest slice instead, on purpose, because that's where the previous two papers left the most room to grow.
The ICA's four official domain weights — Traffic Management 35%, Securing Workloads 25%, Installation/Upgrades/Configuration 20%, Troubleshooting 20% — come straight from the CNCF's published curriculum and are covered in full, with the reasoning behind every field, on the ICA blueprint. This paper's thirty items do not mirror that split. They lean hard into the two domains where reading a scenario correctly matters more than reciting a definition:
| Domain | Official curriculum weight | Questions in this paper |
|---|---|---|
| 🦫 Installation, Upgrades & Configuration | 20% | 5 (17%) |
| 🐦 Traffic Management | 35% | 5 (17%) |
| 🐢 Securing Workloads | 25% | 9 (30%) |
| 🐘 Troubleshooting | 20% | 11 (37%) |
A paper skewed like this one is a poor stand-in for the real exam's balance, and it isn't trying to be. Its job is narrower: to give you more reps at the two domains where "I recognized the concept" and "I could actually diagnose or lock down a live mesh" are furthest apart. Sit Set 1 or Set 2 first if you want a paper whose proportions track the real blueprint — this one assumes that baseline is already behind you.
Sit it like the real, hybrid thing
☺ Like you're 10: The real test has a typing half and a multiple-choice half. A page like this one can only give you the multiple-choice half — so treat every "which command" question here as a reminder to go type that exact command for real, not as the finish line.
Close every other tab and sit these thirty items in one block, the way you would the real paper's multiple-choice component. But be honest about what this format can and can't rehearse: the ICA is delivered online and remote-proctored as performance-based tasks at a real command line, plus multiple-choice items — no static page can simulate the first half. What it can do is train the diagnostic reading this exam actually rewards: given a manifest, a command's output, or a one-line symptom, choose the correct next action. That skill transfers directly to the hands-on half, because the real exam's tasks begin exactly the same way — something is broken or unconfigured, and you have limited time to name why before you start typing.
Neither the ICA's real question-and-task count nor its pass mark is published by the Linux Foundation — the ICA blueprint covers what is and isn't confirmed in full, and this paper's size of thirty was chosen only to fit a clean domain split, not to match a real sitting. Treat every command named in the answers below as something to actually run, not just recognize: pair this paper with the Lock Down a Mesh Namespace drill for the hands-on rep this format cannot provide on its own. As always, verify current price, duration, and logistics on the official Linux Foundation ICA page before you book anything.
The paper — 30 items across three blocks
☺ Like you're 10: Thirty questions, three blocks of ten, every domain still shows up in every block — read the question, pick one answer (or two, when it says so), then check yourself before moving on.
Each item names its domain in parentheses so you can total your score by domain afterward. A few are marked (Select TWO); full credit needs both correct letters.
Block 1 — Q1–10
Q1 (Traffic Management). A team wants to let workloads inside the mesh call api.partner-service.com, an endpoint outside the cluster, while continuing to block every other undeclared external host. Which resource, paired with which setting, achieves this?
- A. A
Gatewaywithtls.mode: MUTUAL - B. A
ServiceEntryfor the external host, withoutboundTrafficPolicy.mode: REGISTRY_ONLYset for the mesh - C. A
DestinationRulewith an emptytrafficPolicy - D. A
VirtualServicewith nohostsfield at all
Check the answer
B. A ServiceEntry registers the external host as a known destination, and REGISTRY_ONLY mode means anything not explicitly registered this way simply cannot leave the mesh — the two work as a pair, not independently.
Q2 (Traffic Management). A VirtualService defines routing rules for host: checkout but its spec has no gateways field at all. What is the practical effect of that omission?
- A. The rules apply to both in-mesh and ingress traffic identically
- B. The rules apply only to in-mesh (east-west) traffic; requests arriving through an ingress
Gatewaynever match them - C. Istio rejects the
VirtualServiceoutright as invalid - D. The rules apply only to ingress traffic and never to in-mesh calls
Check the answer
B. An unset gateways field defaults to mesh — in-mesh traffic only. To have a VirtualService govern ingress traffic too, it must explicitly name the Gateway in that field. This is the single most common "why is my ingress rule being ignored" mistake on the exam.
Q3 (Securing Workloads). Which PeerAuthentication mtls.mode accepts both plaintext and mutual-TLS connections at once, making it the standard setting for migrating a namespace toward zero trust without an outage?
- A.
STRICT - B.
DISABLE - C.
PERMISSIVE - D.
UNSET
Check the answer
C. PERMISSIVE accepts either — it lets already-mTLS'd callers keep working while callers that haven't been enrolled yet aren't cut off. The usual migration path is PERMISSIVE first, confirmed via telemetry that nothing plaintext still matters, then a cutover to STRICT.
Q4 (Securing Workloads). A RequestAuthentication is applied to a workload with a correctly configured jwtRules issuer. A request arrives with no Authorization header at all — no token present. What happens?
- A. The request is rejected, because
RequestAuthenticationalone requires a token on every request - B. The request is allowed through unauthenticated by
RequestAuthenticationalone — it only rejects invalid tokens, never missing ones; requiring a token needs a separateAuthorizationPolicymatching onrequestPrincipals - C. The request is silently converted to use
PeerAuthenticationinstead - D. Istio returns a 500 error because no
AuthorizationPolicyexists
Check the answer
B. This is one of the most-tested single facts in the Securing Workloads domain. RequestAuthentication validates a token if one is presented; it does not, by itself, mandate that one be presented. Making a token mandatory is a job for an AuthorizationPolicy rule that requires requestPrincipals to match.
Q5 (Securing Workloads). In what order does Istio evaluate AuthorizationPolicy action types against an incoming request?
- A. ALLOW → DENY → CUSTOM
- B. DENY → ALLOW → CUSTOM
- C. CUSTOM → DENY → ALLOW
- D. All three are evaluated simultaneously with no defined order
Check the answer
C. CUSTOM (external authorization checks) runs first, then DENY, then ALLOW. A matching DENY always wins outright over any ALLOW rule, regardless of which was written or applied more recently.
Q6 (Installation, Upgrades & Configuration). Installing Istio via Helm, which order of chart installation is correct?
- A.
istiod, thenbase, thengateway - B.
gateway, thenbase, thenistiod - C.
base(CRDs and cluster roles), thenistiod(control plane), thengatewayper ingress/egress gateway - D. Order doesn't matter — Helm resolves chart dependencies automatically for Istio
Check the answer
C. base must land first because it installs the CRDs everything else depends on; istiod needs those CRDs to start; gateway charts come last, one per gateway deployment you want.
Q7 (Installation, Upgrades & Configuration). A namespace is freshly labeled istio-injection=enabled. Pods that were already running in that namespace before the label was applied — what happens to them?
- A. They are automatically restarted with a sidecar injected
- B. Nothing — injection happens only at pod creation time, so existing pods are never retrofitted; they need an explicit restart (e.g.
kubectl rollout restart) to pick up the sidecar - C. They immediately gain a sidecar without any restart, because the mutating webhook patches running pods live
- D. The namespace label has no effect on sidecar injection at all
Check the answer
B. The injection webhook fires on pod creation. Labeling a namespace changes what happens to future pods; existing ones need a restart to be re-created and therefore re-injected.
Q8 (Troubleshooting). Before applying a new set of Istio manifests, or right after a change starts misbehaving, which single command should almost always run first?
- A.
istioctl proxy-config route - B.
kubectl delete namespaceand reapply everything from scratch - C.
istioctl analyze— a linter that catches missing subsets, conflicting policies, and unreferenced gateways before they surface as runtime errors - D.
istioctl x describe pod
Check the answer
C. istioctl analyze is the configuration-layer step in the three-step troubleshooting ladder — config, control plane, data plane — and it catches a large share of mistakes before they ever become a live 503.
Q9 (Troubleshooting). Reading this istioctl proxy-status output, what does the STALE value in the CDS column for one proxy most directly indicate?
NAME CDS LDS EDS RDS ISTIOD checkout-7d9f-abcde.launch STALE SYNCED SYNCED SYNCED istiod-6b8f9-xk2p1 frontend-5c7a-mnop9.launch SYNCED SYNCED SYNCED SYNCED istiod-6b8f9-xk2p1
- A. The proxy has no configuration at all and is completely unmanaged
- B. A configuration push to that proxy's cluster (CDS) data is stuck and hasn't been acknowledged — istiod sent it, but the proxy hasn't confirmed applying it
- C. The proxy's certificate has expired
- D.
STALEis a healthy, expected steady-state value and needs no action
Check the answer
B. SYNCED means the proxy has acknowledged the latest push for that resource type; STALE means a push went out but confirmation is stuck — worth investigating pod health or connectivity to istiod. (NOT SENT, not shown here, would mean istiod has nothing new to send at all.)
Q10 (Troubleshooting). A request that should be permitted returns RBAC: access denied. What kind of misconfiguration does that specific error text point to?
- A. A DNS resolution failure
- B. A missing
DestinationRulesubset - C. An
AuthorizationPolicyproblem — this is a policy decision, not a network fault, so the fix starts by reading policies selecting that workload, not by checking connectivity - D. An expired TLS certificate on the ingress
Gateway
Check the answer
C. That exact error string is Envoy's RBAC filter reporting a denied request — it is never a routing or connectivity symptom. Go straight to AuthorizationPolicy resources selecting the target workload.
Block 2 — Q11–20
Q11 (Traffic Management). Given this pair, what happens once it is applied?
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: checkout
namespace: launch
spec:
host: checkout.launch.svc.cluster.local
subsets:
- name: v1
labels: { version: v1 }
---
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: checkout
namespace: launch
spec:
hosts: ["checkout"]
http:
- route:
- destination: { host: checkout, subset: v1 }
weight: 90
- destination: { host: checkout, subset: v2 }
weight: 10- A. Traffic silently routes 100% to
v1and thev2weight is ignored - B. The
VirtualServicereferences av2subset that theDestinationRulenever defines —istioctl analyzeshould flag this before it's applied, and if applied anyway it produces errors for the 10% of traffic routed toward the undefined subset - C. Istio automatically creates the missing
v2subset from the label selector - D. The whole
VirtualServiceis rejected at apply time by the API server
Check the answer
B. A subset a VirtualService names has to exist in some DestinationRule for that host. This exact shape — one subset quietly missing — is the most common self-inflicted routing failure the exam tests, and it's exactly what the configuration-layer linter is for.
Q12 (Traffic Management). A VirtualService route sets timeout: 2s and retries: { attempts: 3, perTryTimeout: 1s }. What is the maximum time before the calling client receives a definitive response?
- A. Up to 3 seconds — three attempts at 1s each
- B. Up to 2 seconds — the overall route
timeoutbounds the entire request, including all retry attempts within it, and wins even if retries haven't been exhausted - C. Unbounded — retries continue until one succeeds, no matter how long that takes
- D. Exactly 1 second, because
perTryTimeoutalways overrides the route-leveltimeout
Check the answer
B. timeout is the ceiling on the whole request as the client experiences it. perTryTimeout only bounds a single attempt inside that budget — it never extends the overall deadline past the route's timeout.
Q13 (Securing Workloads, Select TWO). This AuthorizationPolicy is meant to require that a caller be both the frontend service account and present a valid JWT. What is actually wrong with it, and what is the consequence? Choose the two correct statements.
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: require-identity-and-jwt
namespace: launch
spec:
selector:
matchLabels: { app: checkout }
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/launch/sa/frontend"]
- source:
requestPrincipals: ["https://accounts.example.com/*"]
to:
- operation: { methods: ["GET", "POST"] }- A. Splitting the identity check and the JWT check into two separate
- source:list entries makes them ORed, not ANDed — either condition alone now satisfies the rule - B. This silently turns "identity and valid token" into "identity or valid token" — a caller with the right service-account identity and no token at all is allowed straight through
- C. This YAML is invalid and Istio rejects it at apply time
- D. Keys inside a single
sourceblock are always ORed regardless of how they're written - E. This policy correctly enforces both conditions as written
Check the answer
A and B. Keys within one source block are ANDed; separate - source: entries in a list are ORed. Fixing this means putting both principals and requestPrincipals inside the same source block — exactly the pattern shown correctly on the ICA blueprint.
Q14 (Securing Workloads). An AuthorizationPolicy is applied with an entirely empty spec: {} and a selector matching a workload. What is the effect on that workload?
- A. Nothing changes — an empty spec is a no-op
- B.
actiondefaults toALLOWwith zero rules, meaning nothing at all is permitted to reach that workload — this locks it down completely - C. All traffic is permitted by default, since no DENY rules are present
- D. Only traffic from outside the mesh is blocked; in-mesh calls proceed normally
Check the answer
B. An ALLOW policy with zero rules matches nothing, so nothing is allowed — a deliberately blunt way to lock a workload down completely, and worth knowing cold since it looks like a no-op at first glance.
Q15 (Securing Workloads). A workload has never had any AuthorizationPolicy select it, so all traffic reaches it freely. An operator then applies one narrowly scoped ALLOW policy permitting only GET requests from one service account. What happens to every other kind of request that used to work?
- A. Nothing — the new policy only adds a permission, it can't remove one that already existed
- B. The moment any ALLOW policy selects a workload, that workload becomes default-deny for everything not explicitly matched — so every request outside that one narrow rule is now rejected, even ones that worked a moment ago
- C. Old traffic patterns are grandfathered in for 24 hours before enforcement begins
- D. The workload reverts automatically to
PERMISSIVEmode
Check the answer
B. This is the sharpest edge in the whole domain: adding your first ALLOW policy to a previously unrestricted workload is itself the outage risk, because it flips the workload's default from allow to deny for everything the new policy doesn't explicitly cover.
Q16 (Installation, Upgrades & Configuration). What two components does enrolling a namespace in Istio's ambient mode rely on, in place of the per-pod sidecar used in sidecar mode?
- A. A second
istiodrevision and a canary tag - B. A per-node
ztunnelagent plus thecnichart, which redirects workload traffic to it — set via theistio.io/dataplane-mode=ambientnamespace label rather thanistio-injection=enabled - C. A dedicated ingress
Gatewayper namespace - D. A separate
PeerAuthenticationresource unique to ambient mode
Check the answer
B. Ambient moves the data-plane proxy off the pod entirely and onto a shared per-node ztunnel, wired up by the cni chart, and it's enrolled with an entirely different namespace label than sidecar mode uses.
Q17 (Installation, Upgrades & Configuration). A namespace carries both labels shown below at the same time. Which sidecar-injection behavior actually applies?
kubectl label namespace launch istio-injection=enabled kubectl label namespace launch istio.io/rev=1-27-0
- A. Istio rejects both labels and injection is disabled entirely
- B. The plain
istio-injection=enabledlabel wins, so pods are injected with the default revision — not the1-27-0revision the second label names - C. The
istio.io/revlabel always wins over the plain label, so pods get revision1-27-0 - D. Pods get two sidecars injected, one per matching label
Check the answer
B. When both are present, the plain label takes precedence — a detail that quietly defeats a canary migration if the old label isn't removed first (kubectl label ns launch istio-injection-) before adding the revision label.
Q18 (Troubleshooting). A client sees this after a routing change:
$ curl -v http://checkout.launch.svc.cluster.local/cart < HTTP/1.1 503 Service Unavailable < x-envoy-response-flags: UH * Connection closed
What does the UH response flag most precisely indicate, and what's the likeliest cause right after a routing change?
- A. "Upstream Health" — the client's own network is unhealthy
- B. "No Healthy Upstream" — the target cluster exists but currently has zero healthy endpoints behind it, commonly because a
VirtualServicenow routes to a subset aDestinationRuledoesn't define, or every real endpoint has been ejected by outlier detection - C. An expired mTLS certificate specifically
- D. A DNS failure resolving the service name
Check the answer
B. UH means Envoy found the target cluster but had no healthy endpoint to send the request to. Right after a routing edit, an undefined subset is the first thing to check — this is the same failure mode as Q11, seen from the client side instead of the manifest side.
Q19 (Troubleshooting). A pod is running in a namespace labeled for sidecar injection, but kubectl describe pod shows only one container — no istio-proxy sidecar at all. What's the most likely explanation?
- A. The workload's
Deploymentexplicitly opts out of the mesh - B. Sidecar injection isn't supported for that workload's image
- C. The namespace label was applied after this pod was already running, and injection only ever happens at pod creation — it needs a restart to be re-created with the sidecar
- D. The
istiodcontrol plane is down
Check the answer
C. This is the same fact tested from a different angle as Q7: injection is a creation-time event. A missing sidecar on an existing pod almost always means "labeled too late, never restarted" rather than any deeper problem.
Q20 (Troubleshooting). You need to know exactly which routes are configured on port 8080 for one specific running proxy. Which command answers that, for that one proxy?
- A.
istioctl analyze -n launch - B.
istioctl proxy-config route checkout-7d9f-abcde.launch --name 8080 - C.
kubectl -n istio-system get pods - D.
istioctl profile diff default demo
Check the answer
B. proxy-config route (and its siblings cluster, endpoint, listener, secret) is the data-plane step of the troubleshooting ladder — it asks one specific proxy what it actually believes, rather than what was intended.
Block 3 — Q21–30
Q21 (Traffic Management). On a DestinationRule's trafficPolicy, which setting implements circuit breaking, and which implements outlier detection, as two distinct mechanisms?
- A. Both are the same field under two different names
- B.
connectionPoolcaps concurrent connections and requests per host — circuit breaking;outlierDetectionwatches for consecutive errors and ejects individual unhealthy endpoints from the load-balancing pool — two separate, complementary protections - C.
connectionPoolhandles ejection;outlierDetectionhandles connection limits - D. Neither belongs on a
DestinationRule; both live on theVirtualService
Check the answer
B. Circuit breaking limits how much load any one endpoint takes; outlier detection reacts to endpoints that are already failing and removes them from rotation. Both live under trafficPolicy, and the exam expects you to name each by its correct field, not just say "resilience."
Q22 (Securing Workloads). To terminate TLS at an ingress Gateway, which two things does the Gateway resource need, and where must the referenced object live?
- A. A
tls.modeofSIMPLEorMUTUAL, plus acredentialNamenaming a Secret — and that Secret must live in theGateway's own namespace - B. Only a
credentialName;tls.modeis optional and defaults toMUTUAL - C. A
PeerAuthenticationresource is required instead of any field on theGatewayitself - D. The Secret can live in any namespace, referenced by full path
Check the answer
A. SIMPLE is server-only TLS; MUTUAL also requires a client certificate. Either way, the credential the gateway reads from has to sit in that gateway's own namespace — a cross-namespace Secret reference silently fails to be found.
Q23 (Securing Workloads). A platform team is about to tighten a busy namespace's AuthorizationPolicy from wide-open to a narrow ALLOW list. What's the safest rollout order for the action field, from least to most disruptive?
- A. Go straight to
DENYfor anything unmatched — fastest is safest - B.
AUDITfirst — logging what would be denied without actually blocking it — then move toDENY/tightenedALLOWonce the audit log shows no legitimate caller would be cut off - C. Rollout order doesn't matter;
AuthorizationPolicychanges are always non-disruptive - D. Apply
ALLOWandDENYversions simultaneously and let Istio pick the safer one
Check the answer
B. The same caution that governs PeerAuthentication (PERMISSIVE before STRICT) has an authorization-side equivalent: AUDIT lets you see what a stricter policy would have blocked before you actually enforce it.
Q24 (Securing Workloads). Mesh-wide istio-system sets PeerAuthentication to STRICT with no selector. A second PeerAuthentication in namespace launch sets PERMISSIVE for one specific port via portLevelMtls. For requests to that one port, in that namespace, which setting actually applies?
- A. The mesh-wide
STRICTsetting always wins over any namespace-level override - B. The more specific, narrower-scoped policy wins — a namespace-level policy overrides the mesh-wide default, and a port-level override within it takes precedence for that port specifically
- C. Both apply simultaneously, requiring the request to satisfy both
- D. Port-level
mtlssettings are not a real feature — only namespace and mesh-wide scopes exist
Check the answer
B. Scope precedence runs from broad to narrow: mesh-wide, then namespace, then workload, with port-level settings narrowing further still within whichever policy applies. Knowing this order is what lets you predict the effective mode without a trial-and-error curl.
Q25 (Installation, Upgrades & Configuration). Comparing an in-place upgrade to a canary upgrade, which correctly separates them?
- A. In-place installs a second
istiodunder a revision; canary replaces the running control plane directly, all at once - B. In-place replaces the running control plane directly in one step, all-or-nothing; canary installs a second
istiodunder a named revision and moves namespaces onto it one at a time via theistio.io/revlabel plus a restart - C. Both strategies are functionally identical; "canary" is just marketing language for the same mechanism
- D. Canary upgrades never require restarting any workloads
Check the answer
B. The defining trade-off: in-place is simple but all-or-nothing; canary is more moving parts (a second control plane, per-namespace relabeling, eventual retirement of the old revision) in exchange for a controlled, reversible rollout.
Q26 (Troubleshooting). After confirming a workload's proxy is correctly configured and routes are correct, requests are still failing with mTLS handshake errors. Which command specifically checks whether the workload's certificate actually arrived at its proxy?
- A.
istioctl proxy-config route - B.
istioctl proxy-config secret <pod> - C.
istioctl analyze - D.
istioctl profile diff
Check the answer
B. proxy-config secret is the specific data-plane check for certificate delivery — routes and clusters can be perfectly correct while the workload identity certificate itself never made it to the proxy.
Q27 (Troubleshooting). Immediately after a canary upgrade moves half a fleet's namespaces to a new istiod revision, which command tells you which individual proxies are still connected to the old control plane revision?
- A.
istioctl proxy-status— its output lists whichistiodinstance (and therefore which revision) each proxy is currently synced to - B.
istioctl x precheck - C.
kubectl get namespaces --show-labels - D. There is no way to determine this per-proxy; you can only check per-namespace labels
Check the answer
A. The ISTIOD column in proxy-status output names the exact control-plane pod each proxy talks to — during a canary window that column is the fastest way to see who's moved and who hasn't.
Q28 (Troubleshooting). Immediately after a namespace is flipped from PERMISSIVE to STRICT mTLS, a wave of new connection failures begins. What's the most likely cause, and where should you look first?
- A. The
istiodcontrol plane has crashed - B. Something calling into that namespace from outside the mesh's mTLS guarantee — an unlabeled namespace, a liveness probe hitting the pod directly, or a client calling a pod IP rather than the mesh-aware Service — since
STRICTnow rejects any connection that can't present a mesh certificate - C. A DNS misconfiguration unrelated to the mTLS change
- D.
STRICTmode never causes new failures if the mesh was already healthy underPERMISSIVE
Check the answer
B. STRICT is unforgiving of anything that isn't itself inside the mesh's identity system. The fix is almost never on the target workload — it's finding whichever caller was never enrolled and either enrolling it or routing it differently.
Q29 (Troubleshooting). A teammate wants a single, readable summary of one pod's effective mTLS mode, the policies selecting it, and its routes, without manually cross-referencing several separate proxy-config subcommands. Which command is built for exactly that?
- A.
istioctl proxy-config cluster - B.
istioctl x describe pod <pod>— a plain-English summary purpose-built to answer "what does the mesh currently believe about this one pod," pulling from policy, mTLS, and routing state together - C.
istioctl install --dry-run - D.
kubectl describe podalone, with noistioctlinvolvement
Check the answer
B. x describe pod exists specifically to collapse several individually-narrow proxy-config queries into one readable answer, which makes it a fast first move once you already suspect a specific pod.
Q30 (Troubleshooting, Select TWO). A specific call from frontend to checkout is being denied and you already suspect an AuthorizationPolicy is the cause, but you need to see exactly which rule fired and why. Which TWO actions get you there fastest?
- A. Turn up Envoy's own logging on the target proxy —
istioctl proxy-config log checkout-7d9f-abcde.launch --level rbac:debug— then read the resultingistio-proxycontainer logs for the specific denial reason - B. Run
istioctl x describe podagainst thecheckoutpod to see whichAuthorizationPolicyresources currently select it and what they require - C. Run
istioctl proxy-config secret, since all authorization failures are ultimately certificate problems - D. Run
istioctl profile diff default demoto compare installation profiles - E. Delete every
AuthorizationPolicyin the namespace and see if the call succeeds
Check the answer
A and B. Turning on RBAC-level Envoy debug logging shows the actual decision the proxy made and why; x describe pod shows which policies are even in play for that workload. Together they answer "which rule, and why" far faster than reasoning about the YAML alone. Certificates (C) are a PeerAuthentication concern, not an authorization one, and deleting policies (E) is diagnosis by demolition, not troubleshooting.
Score yourself
☺ Like you're 10: Count what you got right out of thirty, then look at which of the two big domains — troubleshooting or security — actually cost you the most, because that's the one worth another pass before exam day.
Neither the ICA's real item count nor its pass mark is published by the Linux Foundation, so there's no official percentage to compare this score against — the ICA blueprint covers exactly what is and isn't confirmed. Use this table to find your weakest domain, not to predict a real result.
| Domain | Questions in this paper | Your score | If most of your misses are here, go here |
|---|---|---|---|
| 🐦 Traffic Management | Q1, 2, 11, 12, 21 | /5 | ICA — the exam · Istio |
| 🐢 Securing Workloads | Q3, 4, 5, 13, 14, 15, 22, 23, 24 | /9 | ICA — the exam · Security & policy enforcement |
| 🦫 Installation, Upgrades & Config | Q6, 7, 16, 17, 25 | /5 | ICA — the exam · Helm |
| 🐘 Troubleshooting | Q8, 9, 10, 18, 19, 20, 26, 27, 28, 29, 30 | /11 | Service Mesh Architecture · Triage: networking |
| Total | 30 questions | /30 | Reread whichever domain cost you the most, then go type it |
Because this paper is intentionally skewed, a low Traffic Management or Installation score here means less than the same score would on Set 1 or Set 2, which cover both domains at full weight. What this paper actually measures well is whether Troubleshooting and Securing Workloads — nearly two-thirds of these thirty items combined — are solid. If they aren't yet, that's the honest, useful result to walk away with.
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, then go to a real terminal — reading alone doesn't fix a troubleshooting gap.
Traffic Management
VirtualService and DestinationRule together, ingress and egress, resilience fields named one by one, and the subset mismatch that causes most self-inflicted 503s.
🐢 · 25%Securing Workloads
PeerAuthentication, RequestAuthentication and AuthorizationPolicy — evaluation order, the ANDed/ORed trap, and the default-deny edge that makes your first ALLOW policy an outage risk.
🦫 · 20%Installation, Upgrades & Config
istioctl vs. Helm, sidecar vs. ambient enrollment, and canary vs. in-place upgrades with revisions and tags.
🐘 · 20%Troubleshooting
The three-step ladder — configuration, control plane, data plane — and the symptom-to-cause map that turns recognition into speed under a clock.
Beyond the domain pages, the wider revision kit still applies: flashcards for command recall, the self-check quiz for mixed review, the glossary for any term a question assumed you already knew, and the Kubernetes baseline check if any question here leaned on kubectl fluency you're still shaky on. This course doesn't re-teach core Kubernetes — the Kubernetes course's own CKA and CKS material is where that lives in full.
Foxy: Twenty-six out of thirty. I'll take it — troubleshooting's supposed to be my whole thing.
Ellie: Which four did you miss, Foxy? I remember every one of them, even if you'd rather I didn't.
Foxy: ...the UH flag one. I read "no healthy upstream" and went straight to checking DNS instead of the subset.
Timmy: That's not a troubleshooting gap, that's a Traffic Management gap wearing a troubleshooting costume. The symptom lives in one domain, the cause in another — that's exactly why this exam mixes them.
Gizmo: Easy fix — memorize "UH means restart the pod" and move on. Works often enough! 😈
Ellie: It works exactly zero percent of the time here, Gizmo — a missing subset doesn't fix itself because a pod restarted. Foxy, go reread the DestinationRule section, then come back and redo just that question cold.
Benny: And once you've done that — run the drill for real. Break a subset on a live cluster and watch the same flag show up yourself. It sticks differently once you've typed it.
1. Why does this paper give Troubleshooting and Securing Workloads more questions than their official curriculum weight, and what does a high score here not tell you? 2. What's the difference in effect between RequestAuthentication alone and pairing it with an AuthorizationPolicy that matches on requestPrincipals? 3. Within an AuthorizationPolicy's from field, which parts are ANDed and which are ORed, and what's the classic mistake that flips one into the other? 4. What does the UH Envoy response flag mean, and what should you check first when you see it right after a routing change? 5. Name the three-step troubleshooting ladder in order, and the one command that belongs to each step. 6. What's the practical risk of adding your very first AuthorizationPolicy ALLOW rule to a workload that's never had one before?
Check your answers
- Because those are the two domains where reading a live scenario correctly, not just recalling a definition, decides the outcome — and because they're where real mesh incidents concentrate. A high score here says nothing about your Traffic Management or Installation readiness, since both are deliberately under-represented; use Set 1 or Set 2 to judge those.
RequestAuthenticationalone validates a token if one is presented but rejects nothing when a token is simply absent. Pairing it with anAuthorizationPolicyrequiringrequestPrincipalsto match makes presenting a valid token mandatory, not optional.- Keys within one
sourceblock are ANDed; separate- source:entries in a list are ORed. The classic mistake is splitting two conditions that should both be required — like a service-account identity and a JWT — into two separate- source:blocks, which silently turns "and" into "or" and opens a hole. UHmeans "No Healthy Upstream" — the target cluster exists but has no healthy endpoint. Right after a routing change, check first for a subset theVirtualServicenames that theDestinationRuledoesn't define.- Configuration →
istioctl analyze. Control plane →istioctl proxy-status, confirming every column readsSYNCED. Data plane →istioctl proxy-config route|cluster|endpoint|secret(orx describe podfor a fast summary) against one specific proxy. - That workload flips from unrestricted to default-deny the instant any ALLOW policy selects it — every caller not explicitly covered by the new rule is cut off immediately, even ones that were working a moment before. Rolling out with
action: AUDITfirst is the safer path.
That's the full sitting. If Troubleshooting or Securing Workloads cost you more than a couple of points each, reread the linked pages, run the Lock Down a Mesh Namespace drill for real hands-on reps, then come back and redo just your missed questions in a few days rather than the whole paper again.