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.