Istio Knowledge Patch
Use this skill when designing, upgrading, configuring, or troubleshooting Istio. Resolve the deployed Istio, Kubernetes, Gateway API, CNI, and Helm versions from manifests and live configuration before applying version-sensitive advice. Trust the project's manifests, rendered resources, tests, and observed behavior when they differ from guidance here.
How to use this skill
- Identify whether the task concerns an upgrade, installation, ambient mode, traffic management, security, telemetry, or command-line operations.
- Read the matching reference file from the index. Read more than one when the task crosses control-plane, data-plane, and installation boundaries.
- Check feature gates, environment variables, chart values, API versions, and defaults against the deployed release.
- Treat entries marked experimental or alpha as opt-in and verify their Kubernetes API prerequisites.
- During mixed-version upgrades, preserve compatibility until every affected proxy, ztunnel, gateway, and control-plane component has moved forward.
Reference index
| Reference | Topics |
|---|---|
| installation-and-upgrades.md | Upgrade gates, removals, Helm behavior, platform requirements, chart resources, and installation security contexts |
| ambient-cni-and-multicluster.md | Ambient enrollment, DNS capture, CNI reconciliation, nftables, waypoints, ztunnel, and cross-network routing |
| traffic-routing-and-gateways.md | ServiceEntry, DestinationRule, retries, traffic distribution, Gateway API, DNS routing, and EnvoyFilter behavior |
| security-identity-and-policy.md | Authorization, JWT, mTLS, certificates, trust bundles, JWKS, Wasm safety, and TLS controls |
| telemetry-and-observability.md | Metrics, tracing, logs, dashboards, baggage, workload identity tags, and OpenTelemetry |
| operations-and-istioctl.md | istioctl changes, debug access, Pilot controls, resource watching, proxy administration, and diagnostics |
Breaking upgrade checks
Prepare Kubernetes and Gateway API first
- Istio 1.30 requires Kubernetes 1.32 or newer.
- Before a 1.30 upgrade, install Gateway API v1.5.x CRDs. Istiod reads
TLSRouteandReferenceGrantfromgateway.networking.k8s.io/v1; older CRDs can silently leave TLS passthrough routes unattached. - Migrate
BackendTLSPolicyfromv1alpha3tov1before moving to 1.28. - Migrate InferencePool objects to
v1; usespec.endpointPickerRef.port.numberand set the port explicitly.
Account for data-plane transitions
- Native sidecars are enabled by default for eligible pods from 1.27. Test
mutating webhooks and controllers that expect
istio-proxyto be a regular container. - During a mixed-version 1.28 ambient rollout, older ztunnels NACK the new
PASSTHROUGHServiceEntry type. Upgrade ztunnel before relying on newly addedresolution: NONEentries or waypoint enforcement for them. - Ambient startup reconciliation changed from opt-in to default-on by 1.29.
Use
cni.ambient.reconcileIptablesOnStartup=falseonly when deliberately disabling repair of enrolled-pod iptables or nftables state. - Sidecar listeners that explicitly bind ports accept one connection per socket
event by default from 1.28. Set
MAX_CONNECTIONS_PER_SOCKET_EVENT_LOOP=0to restore the prior behavior.
Update renamed or removed settings
- Replace OpenCensus and Lightstep tracing providers with OpenTelemetry.
- Remove reliance on
ENABLE_AUTO_SNI; the flag and its code paths are gone. - Replace
traffic.sidecar.istio.io/kubevirtInterfaceswithistio.io/reroute-virtual-interfaces. - Replace
ISTIO_META_DNS_AUTO_ALLOCATEwith status-based ServiceEntry address allocation. - Replace
METRIC_ROTATION_INTERVALandMETRIC_GRACEFUL_DELETION_INTERVALwithsidecar.istio.io/statsEvictionInterval. - Replace
sidecar.istio.io/statsCompressionwithProxyConfig.statsCompressionor a per-podproxy.istio.io/configoverride. - Remove
--recursivefromistioctl analyze; analysis is always recursive. Remove--xds-via-agentsfromistioctl proxy-status.
Protect chart-driven upgrades
- A nondefault ztunnel release name can rename resources in 1.25. Pin
resourceName=ztunnel; 1.26 restoresztunnelas the default resource name. - The 1.29 chart split moves duplicated RBAC and service-account objects from
basetoistiodand changes several names. Update ownership and automation before applying the charts. - Istio-written CNI configuration defaults to mode
0600from 1.30. Setvalues.cni.env.CNI_CONF_GROUP_READ=truewhen non-root group readers require0640. - Istio 1.30 images default to
registry.istio.io; allow or mirror that registry before rollout. - With Helm 4 server-side apply, set
base.validationFailurePolicy: Failwhen rendering charts and applying them separately.
High-value configuration changes
Installation and CNI
- Set
global.platform=gkefor Helm orvalues.global.platform=gkeforistioctl. GKE installations then create required ResourceQuotas and setcniBinDir;istioctlcan detect GKE. - Use
global.resourceScope: namespaceorclusterfor persona-based installs. The ztunnel chart uses top-levelresourceScope. - Enable chart NetworkPolicies with
global.networkPolicy.enabled=true; newer defaults include istiod, gateways, and istio-cni. - For an Istio-owned ambient CNI conflist, enable
cni.istioOwnedCNIConfig=truewith both ambient and chained CNI. Ensure a custom filename sorts before the primary CNI file. - Choose iptables explicitly with
FORCE_IPTABLES_BINARY, or enable native nftables withvalues.global.nativeNftables=true.
Service discovery and routing
- ServiceEntries without
spec.addressreceive addresses instatus.addressesby default; proxies consume them only with DNS proxying. - Use
PILOT_IP_AUTOALLOCATE_IPV4_PREFIXandPILOT_IP_AUTOALLOCATE_IPV6_PREFIXto choose controller VIP ranges. Service.spec.trafficDistributionandnetworking.istio.io/traffic-distributionapply across data planes. A namespace annotation supplies a default unless the Service overrides it.- Sidecars and ambient egress waypoints can route wildcard
DYNAMIC_DNSServiceEntries under their documented constraints. Treat SNI and Host values as trusted-client inputs. - Use
istio.io/connect-strategy: RACE_FIRST_TCP_CONNECTto race DNS A-record endpoints; configure proxy DNS upstream timeout withDNS_FORWARD_TIMEOUT. - DestinationRule retry budgets default to 20%; preserve both top-level and subset policies when subsets define their own traffic policy.
Gateway API
BackendTLSPolicycan target a named Service port withsectionNameand can target a ServiceEntry.- Gateway API
TLSRoutesupports termination, mixed mode, and GA TLS passthrough listeners without the alpha Gateway API flag. - Generated Gateway resources inherit labels and annotations unless
EnableGatewayAPICopyLabelsAnnotationsis disabled. - Use
ENABLE_GATEWAY_API_MANUAL_DEPLOYMENT=falseto stop automatic attachment to existing gateway deployments. - Enable experimental Inference Extension with
SUPPORT_GATEWAY_API_INFERENCE_EXTENSION; enable agentgateway withPILOT_ENABLE_AGENTGATEWAY. - Use
PILOT_GATEWAY_TRANSPORT_SOCKET_CONNECT_TIMEOUT;15sis the default and0sdisables the gateway transport-socket timeout.
Security and policy
- A failed Wasm fetch with
FAIL_CLOSEinstalls deny-all RBAC. Do not assume fetch failure permits traffic. - Ambient port-level
STRICTPeerAuthentication rules enforce strict mTLS. - JWT rules may omit
issueronly whenjwksUriis explicit. - Enable ambient dry-run authorization only after all connected ztunnels are at least 1.29; older ztunnels can enforce a policy intended for dry-run.
- Keep debug endpoint authorization enabled where possible. Use
DEBUG_ENDPOINT_AUTH_ALLOWED_NAMESPACESfor explicit namespace access. - For post-quantum policy, set
COMPLIANCE_POLICY=PQCin both Pilot and ztunnel in ambient mode. - Set
ISTIO_WASM_MAX_BINARY_SIZE_BYTESto bound fetched and decompressed Wasm modules.
Telemetry and operations
- Gateway upstream spans are enabled by default from 1.28. Configure the
earlier opt-in with
PILOT_SPAWN_UPSTREAM_SPAN_FOR_GATEWAY. - Use
service.istio.io/workload-nameto override telemetry workload names. - Set per-pod flush and eviction with
sidecar.istio.io/statsFlushIntervalandsidecar.istio.io/statsEvictionInterval. - Use
serviceAttributeEnrichment: OTEL_SEMANTIC_CONVENTIONSfor Kubernetes service attributes in OpenTelemetry traces. - Expect headers from
istioctl ztunnel-config allandistioctl proxy-config allwhen parsing tabular output. - Use root
--kubeclient-timeoutfor Kubernetes-client calls and--proxy-admin-portwhen proxy administration is not on the default port.