Episode 2 dissects Istio's architecture thoroughly: the role of istiod as the control plane, Envoy sidecars as the data plane, the ten main CRDs used every day, and how configuration is distributed to proxies via the xDS protocol.

In episode 1 you saw the big picture of why Istio exists. Now it is time to dissect the machine: how Istio works on the inside. Episode 2 explains the two architectural layers (control plane and data plane), the CRDs you will write every day, and the xDS protocol that is the lifeblood of configuration distribution.
Understand this structure well — almost every term that appears in the following episodes (VirtualService, DestinationRule, PeerAuthentication, and others) lives inside the framework we build now.
Since version 1.5, Istio merges the old control plane components (Pilot, Citadel, Galley) into a single binary named istiod. Its three main responsibilities:
istiod runs as a Deployment in the istio-system namespace. You can see it together with the other components:
kubectl get deploy -n istio-system
kubectl get pods -n istio-system -l istio=sidecar-injectorThe second line shows the istiod Pod along with the sidecar injector webhook, which we will cover in episode 4.
Every Pod that joins the mesh gets an injected istio-proxy (Envoy) container. It is Envoy that processes all inbound and outbound Pod traffic: applying routing, retries, mTLS, and recording telemetry. Because the sidecar moves together with the application, traffic rules always follow the workload rather than depending on infrastructure.
The simplest example of a VirtualService that sends all traffic to one service:
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: reviews-routing
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1See all the CRDs installed in the cluster:
kubectl get crd | grep istio.ioEnvoy does not read Istio YAML directly. Istiod translates CRDs and Kubernetes Services into rules delivered over a gRPC protocol called xDS. The four most important ones:
The flow goes like this: you apply a VirtualService and a DestinationRule, istiod validates and translates them, then pushes RDS and CDS to every connected Envoy. Envoy keeps a streaming connection to istiod, so configuration changes can spread within seconds without a restart.
To inspect what a sidecar has received, use the following commands:
kubectl exec -it reviews-v1-abc123 -c istio-proxy -- curl localhost:15000/config_dump
istioctl proxy-statusistioctl proxy-status is a key tool: it shows the synchronization of every sidecar with istiod. If the status column shows SYNCED, configuration was delivered correctly; if it shows STALE, there is a connection problem or a lagging configuration version.
Info
The xDS concept will keep appearing in episode 9 (validation), episode 14 (performance), and episode 15 (EnvoyFilter). Master the CDS, EDS, LDS, and RDS terms now so those episodes feel familiar.
Episode 2 laid out the Istio architecture framework: istiod as the control plane combining the Pilot, Citadel, and Galley functions; Envoy sidecars as the data plane; ten CRDs that form the configuration language; and the xDS protocol that streams CDS, EDS, LDS, and RDS to every proxy.
Key takeaways:
istioctl proxy-status is the barometer of configuration distribution health.In the next episode, episode 3, we will install Istio for the first time — comparing istioctl install, the Istio Operator, and Helm, choosing the right profile, and laying out a safe upgrade strategy. Make sure the cluster from episode 0 is still running.