Istio Sidecar Injection Failure¶
Symptom¶
A workload that should join the mesh starts without an istio-proxy container, or only some pods in the namespace receive the sidecar.
Possible Causes¶
- The namespace uses
istio-injection=enabledinstead of the required revision label. - The namespace label points to the wrong or old Istio revision.
- Workloads were never restarted after labeling the namespace.
- Admission webhook or control-plane health is degraded.
- Pod template metadata drift disables or interferes with injection.
Diagnosis Steps¶
flowchart TD
A[Pod has no istio-proxy] --> B[Check namespace labels]
B --> C{Correct istio.io/rev label?}
C -->|No| D[Fix namespace label]
C -->|Yes| E[Check control-plane pods and webhooks]
E --> F{Healthy?}
F -->|No| G[Restore addon health]
F -->|Yes| H[Restart workload and inspect pod template]
H --> I[Fix annotation or template drift] -
Inspect the namespace labels.
Confirm the namespace uses
istio.io/rev=asm-X-Y. -
Check installed revisions.
az aks show \ --resource-group "$RG" \ --name "$CLUSTER_NAME" \ --query "serviceMeshProfile.istio.revisions" \ --output jsonCommand Purpose az aks showShow the installed Istio revisions. --resource-groupResource group that contains the AKS cluster. --nameName of the AKS cluster. --querySelects the Istio mesh revisions. --outputOutput format for the result. -
Inspect Istio control-plane pods.
-
Restart the workload if the namespace was labeled after the deployment already existed.
-
Inspect a newly created pod.
-
Compare the deployment template with known-good workloads if only one app misses injection.
Resolution¶
- Replace
istio-injection=enabledwith the correctistio.io/revnamespace label. - Use a supported installed revision value.
- Restart workloads after namespace onboarding.
- Recover add-on control-plane health if
istiodor admission components are failing. - Remove conflicting pod-template settings if application manifests introduced injection drift.
Prevention¶
- Standardize namespace onboarding with explicit revision labels.
- Include sidecar-presence checks in post-deploy validation.
- Keep one documented process for minor revision upgrades and namespace relabeling.
- Treat sidecar injection as a platform contract that app teams should not override casually.