This walkthrough demonstrates a canary-style Istio control plane upgrade from 1.26.2 → 1.26.3 and how to migrate workloads safely to the new revision. This upgrade pattern is commonly used in production and is covered in the Prep Course - Istio Certified Associate (ICA) Certification. Key goals:Documentation Index
Fetch the complete documentation index at: https://notes.kodekloud.com/llms.txt
Use this file to discover all available pages before exploring further.
- Install a new Istio control plane revision alongside the existing one (canary install).
- Migrate namespaces and workloads incrementally to the new revision.
- Safely uninstall the old revision after confirming no proxies remain attached.
- A Kubernetes cluster with Istio already installed (demo profile).
- Bookinfo sample application for test workloads.
1) Inspect current Istio installation and workloads
Start by checking Istio system pods and application workloads to understand the current state. Check control plane components:1.26.2 or the revision tag such as default).
2) Download the new istioctl (1.26.3)
Fetch the istioctl binary for the target control plane release and add it to your PATH so you can install the new revision.3) Install the new control plane as a new revision (canary)
Install a new Istio control plane revision using thedemo profile and specify a revision identifier. In this guide we use 1-26-3 as the revision tag.
y. After installation completes, verify pods in the istio-system namespace:
istiod and the new istiod-1-26-3) plus ingress/egress gateways.
4) Create a revision tag and enable injection per namespace
Register a user-friendly tag that points to the new revision and opt namespaces into that revision by labeling them. Create a tag namedlatest that maps to the new revision:
default namespace:
istio.io/rev) is the recommended approach for multi-revision installations. This replaces legacy patterns such as sidecar.istio.io/inject or istio-injection=enabled when running revisioned control planes.
After you label a namespace with
istio.io/rev=<tag>, restarting workloads in that namespace (for example via kubectl rollout restart deployment <name> or deleting pods) is required for them to receive sidecars associated with the new revision.5) Recreate workloads so sidecars inject the new revision
Labeling a namespace only affects new pod creations. Existing pods keep their current sidecar. To adopt the new control plane you must recreate or restart workloads so the sidecar injected uses the new revision. Example: delete and reapply the Bookinfo sample so injected sidecars target1-26-3:
0/2 PodInitializing while the sidecar container is injected. Once pods reach 2/2 Running, validate the injected proxy image:
istio-proxy container Image; it should indicate docker.io/istio/proxyv2:1.26.3.
You can also confirm all application proxies have migrated:
1.26.3 and reference the new control plane pods such as istiod-1-26-3-....
6) Migrate workloads gradually (canary-style)
A canary migration minimizes risk by routing only a subset of workloads or traffic to the new revision while monitoring behavior. Migration strategies:- Deploy to a new namespace labeled for the new revision and run tests there.
- Stagger restarts by performing
kubectl rollout restart deployment <app>per deployment. - Use telemetry and dashboards (Prometheus/Grafana) to validate the new revision before migrating additional workloads.
7) Uninstall the old control plane revision when safe
Only uninstall an old revision after confirming no proxies are attached to it. Istio protects you by warning if proxies still reference the revision you intend to remove. Confirm proxy assignments:default):
Do not uninstall a control plane revision while active proxies still reference it. Confirm all workloads have been migrated to the new revision (use
istioctl proxy-status) before uninstalling the old revision.istiod-1-26-3, ingress/egress gateways, and no pods belonging to the old default revision.
Summary / Key steps
| Step | Action | Example command | |
|---|---|---|---|
| 1 | Confirm current Istio versions and proxy assignment | istioctl version / istioctl proxy-status | |
| 2 | Download istioctl for the target release | `curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.26.3 sh -` |
| 3 | Install new revision (canary control plane) | istioctl install --set profile=demo --revision=1-26-3 | |
| 4 | Tag the new revision | istioctl tag set latest --revision 1-26-3 | |
| 5 | Opt-in namespaces to new revision | kubectl label namespace <ns> istio.io/rev=latest --overwrite | |
| 6 | Restart or re-create workloads to inject new sidecars | kubectl rollout restart deployment <name> or reapply manifests | |
| 7 | Validate proxies point to new revision | istioctl proxy-status | |
| 8 | Uninstall the old revision when safe | istioctl uninstall --revision <old-rev> |
Links and references
- Istio official docs: https://istio.io/
- Istioctl download: https://istio.io/latest/docs/setup/getting-started/
- Bookinfo sample (release-1.26):
https://raw.githubusercontent.com/istio/istio/release-1.26/samples/bookinfo/platform/kube/bookinfo.yaml - KodeKloud Istio Certified Associate (ICA) Prep Course: https://learn.kodekloud.com/user/courses/istio-certified-associate-ica