CertGrid
Cloud Native Study Guide

Istio Certified Associate (ICA) Study Guide

The Istio Certified Associate (ICA) validates working knowledge of the Istio service mesh: its control-plane/data-plane architecture, traffic management, security (mTLS and authorization), and observability. It is a 90-minute, performance- and knowledge-based exam aimed at platform engineers, SREs, and developers who configure and operate Istio on Kubernetes. A scaled score of 750 is required to pass.

Domain 1: Istio Architecture

Key concepts you must know · 173 practice questions

Domain 2: Traffic Management

Key concepts you must know · 178 practice questions

Domain 3: Security

Key concepts you must know · 151 practice questions

Domain 4: Observability

Key concepts you must know · 145 practice questions

Istio Certified Associate (ICA) exam tips

Study guide FAQ

What is the difference between sidecar mode and ambient mode?

Sidecar mode injects an Envoy proxy into every pod to handle both L4 and L7 traffic. Ambient mode is sidecar-less: a per-node ztunnel provides L4 connectivity and mTLS for all pods, and you add per-namespace/per-service-account waypoint proxies only where L7 features (advanced routing, L7 authorization) are needed, reducing per-pod overhead.

Why didn't my pods get a sidecar after I labeled the namespace?

Labeling a namespace with istio-injection=enabled only affects pods created after the label is applied, because injection happens through a mutating webhook at pod-creation time. Existing pods are not modified retroactively - you must restart or redeploy them (e.g. kubectl rollout restart) so the webhook injects the proxy.

How do I do a canary or weighted release in Istio?

Define version subsets (e.g. v1 and v2) in a DestinationRule using labels, then create a VirtualService with multiple http.route entries each carrying a weight (e.g. 95 to the v1 subset and 5 to the v2 subset, summing to 100). Gradually increase the v2 weight as it proves healthy, then shift 100% to v2.

What is the difference between PERMISSIVE and STRICT mTLS?

PERMISSIVE (the default) lets a workload accept both plaintext and mTLS traffic, which is essential during migration so non-injected or legacy clients keep working. STRICT accepts only mutually authenticated TLS, rejecting all plaintext. The common path is to run PERMISSIVE mesh-wide while onboarding, then tighten to STRICT once every client is in the mesh.