Skip to content

Istio Reference

Scope

Look-up facts for Istio: supported releases and support windows, Kubernetes / Envoy / Gateway API version mapping, feature maturity, 2026 security bulletins, ports, installation profiles and Helm charts, labels and annotations, security API values, certificate defaults, and resource and performance figures. Values were checked against the release-1.31 branch of istio/istio.io (the branch that builds istio.io) and the release-1.3x branches of istio/istio on 2026-09-25. For why things work this way see Explanation; for tasks see How-to Guides.

Release and Support Matrix

Istio ships a minor release roughly once a quarter. Each minor release is supported until 6 weeks after the N+2 minor release ships; patch releases inherit the support window of their minor. The control plane may be at most one minor version ahead of the data plane (never behind); Istio recommends revisions so that there is no skew at all.

Minor Release date Latest patch (date) End of life Kubernetes support Envoy branch Gateway API dependency
1.31 2026-08-31 (announcement; support table says Aug 27) 1.31.1 (2026-09-21) ~Feb 2027 (expected) 1.32 - 1.36 release/v1.39 v1.6.0
1.30 2026-05-18 (announcement; support table says May 14) 1.30.5 (2026-09-21) ~Dec 2026 (expected) 1.32 - 1.36 release/v1.38 v1.5.1
1.29 2026-02-16 1.29.8 (2026-09-21) 2026-10-12 (expected) 1.31 - 1.35 release/v1.37 v1.4.1
1.28 (EOL) 2025-11-05 1.28.10 (2026-07-01) 2026-07-01 1.30 - 1.34 release/v1.36 TBD (not checked)
1.27 (EOL) 2025-08-11 TBD (not checked) 2026-04-07 1.29 - 1.33 TBD TBD
1.26 (EOL) 2025-05-08 - 2025-12-22 1.29 - 1.33 - -
1.25 (EOL) 2025-03-03 - 2025-09-30 1.29 - 1.32 - -
1.24 (EOL) 2024-11-07 - 2025-06-24 1.28 - 1.31 - -

Date discrepancies in upstream data

The istio.io support-status table (data/compatibility/supportStatus.yml) lists 1.31 as released "Aug 27, 2026" and 1.30 as "May 14, 2026", while the release announcements carry publishdate 2026-08-31 and 2026-05-18. This page uses the announcement dates. The supported-releases page's "Patched versions with no known CVEs" table (1.31.0+, 1.30.0+, 1.29.2+) is also stale: ISTIO-SECURITY-2026-004/-006 affect 1.30.0-1.30.3 and 1.29.0-1.29.6. Run the latest patch of a supported minor.

Artifact hosting changed in 1.31: Istio no longer publishes to gcr.io/istio-release, registry.istio.io or istio-release.storage.googleapis.com. Images stay on Docker Hub, Helm charts move to https://blob.istio.io/istio-release/charts, OCI charts to ghcr.io/istio/release/charts. "Scream tests" that disable the GCP-hosted artifacts run on 2026-09-15, 2026-10-13, 2026-11-17 and 2026-12-08/09 (UTC).

Sources: Supported Releases, Announcing Istio 1.31.0, Announcing Istio 1.31.1, Gateway API versions from each branch's go.mod in istio/istio.

Feature Maturity Timeline

Feature Status Since Notes
istiod (merged Pilot, Citadel, Galley) Stable 1.5 (2020) Single control plane binary
Ambient mode (ztunnel, waypoints, APIs) Stable / GA 1.24 (2024-11-07) Beta in 1.22 (2024-05-13)
Delta (incremental) xDS on by default Default 1.22 State-of-the-world xDS still supported
DNS proxying on by default for ambient Default 1.25
DNS capture + iptables reconciliation default for ambient Default 1.29
Native sidecars (ENABLE_NATIVE_SIDECARS=true) Default 1.27 Per-pod opt-out: sidecar.istio.io/nativeSidecar: "false"
Native nftables backend Available 1.27 (sidecar), 1.28 (ambient) --set values.global.nativeNftables=true
Dual-stack IPv4/IPv6 Beta 1.28
Ambient multicluster Alpha 1.27; multi-network multi-primary Beta 1.29 1.27 Single-network and primary-remote topologies unsupported (see limitations below)
Gateway API Inference Extension (InferencePool) Beta 1.29 Enable with ENABLE_GATEWAY_API_INFERENCE_EXTENSION
CRL support for plugged-in CAs Available 1.27 (sidecar), 1.29 (ztunnel)
agentgateway as Gateway API gateway Experimental 1.30 GatewayClass istio-agentgateway, PILOT_ENABLE_AGENTGATEWAY=true
agentgateway as waypoint Experimental 1.31 GatewayClass istio-agentgateway-waypoint
TrafficExtension API (Wasm + Lua) New 1.30 Replaces WasmPlugin as the primary extension API
Helm v4 (server-side apply) Supported 1.30
Weighted waypoint canaries New 1.31 istio.io/use-waypoint-canary label + weight annotation
Zone-aware load balancing (zoneAwareLbSetting) New 1.31
ALLOW_ANY_DYNAMIC_DNS outbound policy New 1.31 Envoy Dynamic Forward Proxy for unknown hosts
FIPS 140-3 compliance policy New 1.31 COMPLIANCE_POLICY=fips-140-3
EnvoyFilter on waypoints Not supported - Stated in the 1.26 announcement; use TrafficExtension/Wasm

Ambient multicluster limitations (as of 1.31 docs)

Only multi-network, multi-primary deployments are supported; single-network multicluster is untested; primary-remote does not work; waypoints must be deployed with identical names in every cluster; service scope must be uniform across clusters. The "Sidecar or ambient?" page still lists multicluster, multi-network, VM support and sidecar-to-waypoint interoperability as not implemented in ambient; the multicluster install page is newer and authoritative for multicluster.

Sources: release announcements for 1.22, 1.24, 1.27, 1.28, 1.29, 1.30, 1.31; Ambient multicluster install.

Security Bulletins (2026)

Bulletin Date Max CVSS Affected Fixed in Istio-specific issues
ISTIO-SECURITY-2026-001 2026-03-10 8.7 1.29.0, 1.28.0-1.28.4, 1.27.0-1.27.7 1.29.1, 1.28.5, 1.27.8 (derived from affected ranges) CVE-2026-31837 JWKS resolver failure may allow auth bypass using known default keys (8.7); CVE-2026-31838 debug endpoints allow cross-namespace proxy data access (6.9); plus Envoy CVEs
ISTIO-SECURITY-2026-002 2026-03-21 5.9 All releases with the mesh gateway option on VirtualService No fix (by design) VirtualService with mesh gateway can redirect other tenants' traffic in namespace-based multi-tenancy. Mitigation: move to Gateway API or apply the hardening in the linked blog
ISTIO-SECURITY-2026-003 2026-04-20 5.4 1.29.0-1.29.1, 1.28.0-1.28.5 1.29.2, 1.28.6 CVE-2026-39350 AuthorizationPolicy serviceAccounts regex injection via unescaped dots; CVE-2026-41413 SSRF via RequestAuthentication jwksUri
ISTIO-SECURITY-2026-004 2026-06-04 7.5 1.30.0, 1.29.0-1.29.3, 1.28.0-1.28.7 1.30.1, 1.29.4, 1.28.8 Envoy CVE-2026-47774 (HTTP/2 memory exhaustion via cookie header HPACK amplification)
ISTIO-SECURITY-2026-005 2026-06-24 7.5 1.30.1-1.30.2, 1.29.4-1.29.5, 1.28.8-1.28.9 1.30.3, 1.29.6, 1.28.10 (derived) 14 Envoy CVEs (HTTP/3, ext_authz, ext_proc, OAuth2, SAN NUL-byte validation)
ISTIO-SECURITY-2026-006 2026-08-27 7.7 1.30.0-1.30.3, 1.29.0-1.29.6 (and 1.31.0 for the BackendTLSPolicy issue) 1.30.4, 1.29.7, 1.31.1 EnvoyFilter proxyVersion regex control-plane DoS (now capped at 1024 chars); GHSA-qm8v-g4f9-qhjx BackendTLSPolicy fails open to plaintext on sidecars when CA ref is unresolved (6.8); Envoy RBAC safe_regex fail-open and path-parameter bypass CVEs

Sources: Istio security bulletins, e.g. ISTIO-SECURITY-2026-006, namespace-based multi-tenancy blog.

Ports

Sidecar proxy (Envoy + pilot-agent):

Port Protocol Purpose Pod-internal only
15000 TCP Envoy admin Yes
15001 TCP Envoy outbound capture No
15002 TCP Failure detection Yes
15004 HTTP Debug Yes
15006 TCP Envoy inbound capture No
15008 HTTP/2 HBONE mTLS tunnel No
15020 HTTP Merged Prometheus telemetry (agent + Envoy + app) No
15021 HTTP Health checks No
15053 DNS DNS proxy (when capture is enabled) Yes
15090 HTTP Envoy Prometheus telemetry No

Control plane (istiod):

Port Protocol Purpose
443 HTTPS Webhook service port
15010 gRPC xDS and CA, plaintext (secure networks only; debug endpoints need auth since 1.30)
15012 gRPC xDS and CA over TLS/mTLS (production)
15014 HTTP Control plane monitoring (debug endpoint authorization on by default since 1.29)
15017 HTTPS Webhook container port (forwarded from 443)

ztunnel (ambient):

Port Purpose Bound in pod network namespace
15001 Pod outbound capture Yes
15006 Pod inbound plaintext capture Yes
15008 Pod inbound HBONE capture Yes
15080 Pod outbound SOCKS5 Yes
15021 Readiness No
15000 Admin (localhost only) No
15020 Metrics No

Note

Network policies must allow TCP 15008 in and out of every ambient pod.

Sources: Application requirements - ports used by Istio, ztunnel ARCHITECTURE.md.

Installation Profiles and Helm Charts

Profile istioctl installs Use
default istiod + ingress gateway Production, primary clusters
demo istiod + ingress + egress gateways; high tracing and access-log levels Bookinfo and tasks; not for performance tests
minimal istiod only Control plane; gateways installed separately
remote Remote-cluster config Cluster managed by an external or primary-cluster control plane
empty Nothing Base for custom configuration
preview Experimental features Testing
ambient istiod + istio-cni + ztunnel (ingress gateway disabled) Ambient mode; ingress via Gateway API, waypoints deployed per namespace/service afterwards

Platform profiles (global.platform=gke|eks|openshift|...) are applied on top of a deployment profile. With Helm, pass the same profile to every chart.

Helm chart Release name (docs) Mode
istio/base istio-base Both (CRDs, cluster roles)
istio/istiod istiod Both
istio/cni istio-cni Required for ambient, optional for sidecar
istio/ztunnel ztunnel Ambient
istio/gateway e.g. istio-ingress Both

Sources: Configuration profiles, Install ambient with Helm.

Labels and Annotations

Key On Effect
istio-injection=enabled Namespace Sidecar injection by the default revision
istio.io/rev=<revision or tag> Namespace / pod Sidecar injection by a specific revision or revision tag
sidecar.istio.io/inject: "false" Pod Opt a pod out of injection
sidecar.istio.io/nativeSidecar Pod Force native sidecar on/off (overrides ENABLE_NATIVE_SIDECARS)
istio.io/dataplane-mode=ambient Namespace / pod Enrol in ambient (no restart needed)
istio.io/dataplane-mode=none Pod Exclude a pod from ambient
istio.io/use-waypoint=<name> Namespace / service / pod Send east-west traffic for the target through that waypoint
istio.io/use-waypoint-namespace Namespace / service / pod Waypoint lives in another namespace
istio.io/ingress-use-waypoint=true Service / namespace Ingress gateway traffic also goes through the waypoint (1.25+)
istio.io/waypoint-for Waypoint Gateway service (default), workload, all, none
istio.io/use-waypoint-canary, istio.io/use-waypoint-canary-namespace, istio.io/use-waypoint-canary-weight (annotation) Service / namespace Weighted waypoint canary (1.31)
ambient.istio.io/xfcc-include-client-identity: "true" Waypoint Gateway Waypoint synthesizes XFCC from the source SPIFFE ID (1.30)

GatewayClasses used in the docs: istio (ingress/egress gateways), istio-waypoint (waypoints), plus the experimental istio-agentgateway (1.30) and istio-agentgateway-waypoint (1.31). Multicluster east-west gateways are generated with samples/multicluster/gen-eastwest-gateway.sh.

Sources: Use a waypoint, Resource labels, Resource annotations.

xDS Resources

xDS API Purpose Consumers
LDS (Listener) Inbound/outbound listeners Sidecars, gateways, waypoints
RDS (Route) HTTP routes (VirtualService, HTTPRoute) Sidecars, gateways, waypoints
CDS (Cluster) Upstream clusters (services, subsets) Sidecars, gateways, waypoints
EDS (Endpoint) Endpoint addresses (EndpointSlices, WorkloadEntry) Sidecars, gateways, waypoints
SDS (Secret) Certificates and keys, served by pilot-agent Sidecars, gateways, waypoints
WDS (Workload/Address) and Authorization Istio-specific simplified resources for workloads, services and L4 policy ztunnel

Delta (incremental) xDS is the default since 1.22. On reconnect, ztunnel reports the name and version of every WDS resource; in 1.31 this can exceed istiod's 4 MiB gRPC receive limit at about 40,000 workloads (raise ISTIO_GPRC_MAXRECVMSGSIZE, about 1 MiB per 10,000 workloads and services).

Security API Values

PeerAuthentication mtls.mode:

Mode Behavior
STRICT Only mTLS accepted; plaintext rejected
PERMISSIVE mTLS and plaintext both accepted (migration)
DISABLE mTLS disabled
UNSET Inherit from parent (namespace, then mesh); mesh default is PERMISSIVE

AuthorizationPolicy action:

Action Behavior
CUSTOM Delegate the decision to an external authorizer (extensionProviders); evaluated first
DENY Deny matching requests; evaluated after CUSTOM
ALLOW Allow matching requests; if any ALLOW policy selects a workload, non-matching requests are denied
AUDIT Mark matching requests for audit logging; does not affect allow/deny

Evaluation order: CUSTOM -> DENY -> ALLOW. Principals use the form cluster.local/ns/<namespace>/sa/<service-account> (the SPIFFE ID without spiffe://). requestPrincipals use <iss>/<sub>; ["*"] means "any valid JWT". Since 1.31 (backported to 1.30.2), source.trustDomains / notTrustDomains match the peer certificate's trust domain.

Sources: Security concepts - authorization, PeerAuthentication reference.

Certificate Defaults

Item Default Notes
Workload identity spiffe://<trust-domain>/ns/<ns>/sa/<sa> Trust domain default cluster.local
Workload certificate lifetime 24 hours Rotated by pilot-agent (sidecar) or ztunnel before expiry
Self-signed root CA Generated by istiod at install (istio-ca-secret) Validity commonly cited as 10 years (unverified in current docs)
Plugged-in CA cacerts secret in istio-system (ca-cert.pem, ca-key.pem, root-cert.pem, cert-chain.pem) Intermediate per cluster; used for multicluster trust
External signers Kubernetes CSR API / cert-manager istio-csr istiod acts as RA
CRL Supported for plugged-in CAs ztunnel CRL since 1.29

Resource and Performance Figures

Official figures (Istio 1.24 load tests: 1000 services, 2000 pods, 70,000 mesh-wide RPS; per-proxy figures at 1000 RPS with 1 KB payloads):

Component CPU Memory
Sidecar proxy (2 worker threads) ~0.20 vCPU ~60 MB
Waypoint proxy (2 worker threads) ~0.25 vCPU ~60 MB
ztunnel ~0.06 vCPU ~12 MB

Latency charts for no-mesh vs ambient L4 vs ambient L4+L7 vs sidecar were measured on 5 bare-metal Equinix M3 Large machines with Flannel, http/1.1, 1 KB payload, 500-1500 RPS, 4 client connections, 2 proxy workers, mTLS on. The docs publish charts only; read values from the performance page.

Vault estimates carried over from earlier notes (not controlled benchmarks; hardware, versions and methodology unrecorded - use only as rough guidance):

Metric Sidecar (Envoy) Ambient (ztunnel, L4) No mesh
Added latency P50 +1-2 ms +0.5 ms Baseline
Added latency P99 +3-10 ms +1-3 ms Baseline
Throughput 90-95% of native 95-98% of native 100%
Memory per pod +50-100 Mi 0 (shared per node) 0
CPU per pod +50-100m 0 (shared per node) 0
Pods in mesh istiod CPU istiod memory Config push time
100 200m 512 Mi < 1 s
1,000 1-2 cores 2-4 Gi 1-5 s
5,000 4-8 cores 8-16 Gi 5-15 s
10,000 8-16 cores 16-32 Gi 15-30 s
Dimension Rough practical limit (estimate) Driver
Pods per mesh 10,000+ per istiod deployment (scale istiod horizontally) Push fan-out
Services 5,000+ xDS size; use Sidecar / discovery selectors
VirtualServices 5,000+ Envoy route table size
Ambient workloads ~40,000 before the 4 MiB WDS reconnect limit (1.31) Raise ISTIO_GPRC_MAXRECVMSGSIZE

Starting resource requests (vault estimates; tune from metrics):

Component CPU request Memory request Notes
istiod 500m 2 Gi Scales with config and proxy count
Sidecar (Envoy) 100m 128 Mi Per pod
Ingress gateway 1000m 1 Gi Scales with traffic
ztunnel 50m 64 Mi Per node; official measurement ~12 MB at 1000 RPS

Sources: Performance and scalability, 1.31 upgrade notes.