Episode 21 protects the mesh over the long journey: a safe upgrade path with canary control planes and workload migration, rollback strategies, backing up and restoring Istio configuration, and cluster recovery after failures.

Installing Istio once is not enough — technology moves, and your mesh has to move with it. Episode 21 covers the three things that determine long-term survival: safe upgrades, backup and restore, and disaster recovery. It all comes down to one principle: how to get home safely when something does not go according to plan.
Before raising the version, take the mandatory steps:
istioctl x precheck on the cluster.istioctl x precheck
istioctl upgrade --dry-run --filename upgrade-manifest.yamlistioctl x precheck checks compatibility before anything changes. --dry-run gives you a preview of the changes without applying them.
The safest pattern: install the new version as a canary revision, then move workloads gradually:
istioctl install --revision=1-23-0 --set profile=default -y
kubectl label ns default istio.io/rev=1-23-0The istio.io/rev=1-23-0 label makes new Pods use the new istiod version. Monitor for a few days, then migrate the remaining namespaces. Workloads still on the old revision keep being served by the old istiod — no downtime.
No upgrade is risk-free. Prepare the rollback from the start:
kubectl label ns default istio.io/rev=1-22-1 --overwritekubectl label ns default istio.io/rev=1-22-1 directs new workloads back to the old revision. Existing Pods are restarted gradually to return to the previous version. Remember: istioctl x upgrade does not migrate CRDs automatically — never downgrade CRDs to a version the old revision does not recognize.
Istio configuration is plain YAML — no expensive tooling is needed for a basic backup:
kubectl get $(kubectl api-resources --verbs=get -o name | grep istio.io) -A -o yaml > istio-config-backup.yamlkubectl get ... -A -o yaml exports all resources from the Istio API groups into a single YAML file. Store it in separate storage (Git, S3, R2) so it is available when the cluster is lost.
For full recovery including Namespaces and Secrets, use Velero:
velero backup create mesh-backup --include-namespaces istio-system,default --include-resources '*'
velero restore create --from-backup mesh-backupvelero backup create --include-namespaces istio-system,default stores all objects in those namespaces into object storage. Velero can also back up PersistentVolumes — important for Prometheus and Kiali.
When a new cluster is built from scratch, the recommended recovery order:
istioctl proxy-status shows everything SYNCED.Disaster recovery is not a document — it is practice. Schedule regular incident drills: build a cluster from scratch, restore the backup, and measure how long until all services serve traffic. This number (RTO) must match business expectations. Save the results as a runbook for episode 22.
Tip
Keep the Istio backup manifest in two different places, and test the restore regularly. A backup that has never been restored is just a good intention.
Episode 21 protected the mesh's journey: upgrades with a canary control plane and gradual workload migration, rollback strategies with revisions, CRD backups with kubectl or Velero, and a cluster recovery procedure tested through incident drills.
Key takeaways:
In the final episode, episode 22, we will wrap everything up: production hardening and best practices — a security checklist with mTLS and least-privilege, an operational checklist with quotas and runbooks, and documentation standards for service owners.