Istio 1.29.0 Change Notes
Istio 1.29.0 release notes.
Traffic Management
Promoted the
cni.ambient.dnsCapturevalue to default totrue. This enables DNS proxying for workloads in ambient mesh by default, improving security and performance while enabling a number of features. This can be disabled explicitly or withcompatibilityVersion=1.24. Note: only new pods will have DNS enabled. To enable DNS for existing pods, pods must be manually restarted, or the iptables reconciliation feature must be enabled with--set cni.ambient.reconcileIptablesOnStartup=true.Promoted
cni.ambient.reconcileIptablesOnStartupto default totrue. This enables automatic reconciliation of iptables/nftables rules for existing ambient pods when theistio-cniDaemonSetis upgraded, eliminating the need to manually restart pods to receive updated networking configuration. This can be disabled explicitly or by usingcompatibilityVersion=1.28.Promoted support for Gateway API Inference Extension to beta. This feature currently remains off by default and can be turned on with the
ENABLE_GATEWAY_API_INFERENCE_EXTENSIONenvironment variable. (usage) (Issue #58533)Added support for Istio locality label
topology.istio.io/locality, which takes precedence overistio-locality.Added an option,
gateway.istio.io/tls-cipher-suites, to specify the custom cipher suites on a Gateway. The value is a comma separated list of cipher suites. (Issue #58366)Added alpha support for a baggage-based telemetry system for ambient mesh. Users of multinetwork ambient will want to enable this feature via the
AMBIENT_ENABLE_BAGGAGEpilot environment variable so that metrics for cross-network traffic are properly attributed with source and destination labels. Note that ztunnel already sends baggage in requests; this feature augments that functionality with waypoint-generated baggage as well. As such, this feature is off by default for waypoints and on by default in ztunnels (configurable via theENABLE_RESPONSE_BAGGAGEenvironment variable in ztunnel).Added logic to designate a Workload Discovery (WDS) Service as canonical. A canonical WDS Service is used by ztunnel during name resolution unless another WDS Service in the same namespace as the client exists to override it. A canonical service will be configured from either (1) a Kubernetes
Serviceresource or (2) the oldest IstioServiceEntryresource that specifies that hostname. (Issue #58576)Added a new feature flag
DISABLE_TRACK_REMAINING_CB_METRICSto control circuit breaker remaining metrics tracking. When set tofalse(default), circuit breaker remaining metrics will not be tracked, improving performance. When set totrue, circuit breaker remaining metrics will be tracked (legacy behavior). This feature flag will be removed in a future release.Added support for
LEAST_REQUESTload balancing policy in gRPC proxyless clients.Added support for circuit breaking (
http2MaxRequests) in gRPC proxyless clients.Added support for wildcard hosts in
ServiceEntryresources withDYNAMIC_DNSresolution for TLS hosts. The TLS protocol implies that connections will be routed based on the request’s SNI (from the TLS handshake) without terminating the TLS connection to inspect the Host header for routing. The implementation relies on an alpha API and has significant security implications (i.e., SNI spoofing). Therefore, this feature is disabled by default and can be enabled by setting the feature flagENABLE_WILDCARD_HOST_SERVICE_ENTRIES_FOR_TLStotrue. Please consider using this feature carefully and only with trusted clients. (Issue #54540)Fixed an issue where sidecars tried to route requests to ambient east/west gateways incorrectly. (Issue #57878)
Fixed Istio CNI node agent startup failure in MicroK8s environments when using ambient mode with nftables backend. (Issue #58185)
Fixed an issue where
InferencePoolconfigurations were lost duringVirtualServicemerging when multipleHTTPRoutereferencing differentInferencePools were attached to the same Gateway. (Issue #58392)Fixed an issue where setting
ambient.istio.io/bypass-inbound-capture: "true"caused inbound HBONE traffic to timeout because the iptables rule for tracking the ztunnel mark on connections was not applied. This change allows inbound HBONE connections to function normally while preserving the expected bypass behavior for inbound “passthrough” connections. (Issue #58546)Fixed a bug where the
BackendTLSPolicystatus could lose track of the GatewayancestorRefdue to internal index corruption. (Issue #58731)Fixed an issue where warmup aggression is not aligned with Envoy configuration. (Issue #3395)
Fixed an issue where ingress gateways in ambient multi-cluster did not route requests to exposed remote backends. Also, a new feature flag
AMBIENT_ENABLE_MULTI_NETWORK_INGRESShas been added and it’strueby default. If the user wants to keep the old behavior, it can be set tofalse.Fixed an issue causing the ambient multicluster cluster registry to become unstable periodically, leading to incorrect configuration being pushed to proxies.
Fixed an issue where the overload manager resource monitor for global downstream max connections was set to the maximum integer value and could not be configured via Runtime Flags. Users can now configure the global downstream max connections limit via proxy metadata
ISTIO_META_GLOBAL_DOWNSTREAM_MAX_CONNECTIONS. The runtime flagoverload.global_downstream_max_connectionsis still honored if specified for backwards compatibility but is deprecated in favor of this new approach using proxy metadata.If
overload.global_downstream_max_connectionsis specified, Envoy deprecated warnings will appear.If both
ISTIO_META_GLOBAL_DOWNSTREAM_MAX_CONNECTIONSandoverload.global_downstream_max_connectionsare specified, proxy metadata will take precedence over the runtime flag. (Issue #58594)Fixed warning about
CONSISTENT_HASHload balancing policy in gRPC proxyless clients.Fixed gRPC xDS Listener to send both current and deprecated TLS certificate provider fields, enabling compatibility across old and new gRPC clients (
pre-1.66and1.66+).Fixed an issue where CNI initialization could fail when creating host iptables/nftables rules for health check probes. The initialization now retries up to 10 times with a 2-second delay between attempts to handle transient failures.
Security
Improved remote cluster trust domain handling by implementing watching of remote
meshConfig. Istiod now automatically watches and updates trust domain information from remote clusters, ensuring accurate SAN matching for services that belong to more than one trust domain.Added an opt-in feature when using istio-cni in ambient mode to create an Istio-owned CNI config file that contains the contents of the primary CNI config file and the Istio CNI plugin. This opt-in feature is a solution to the issue of traffic bypassing the mesh on node restart when the istio-cni
DaemonSetis not ready, the Istio CNI plugin is not installed, or the plugin is not invoked to configure traffic redirection from pods to their node ztunnels. This feature is enabled by settingcni.istioOwnedCNIConfigtotruein the istio-cni Helm chart values. If no value is set forcni.istioOwnedCNIConfigFilename, the Istio-owned CNI config file will be named02-istio-cni.conflist. TheistioOwnedCNIConfigFilenamemust have a higher lexicographical priority than the primary CNI. Ambient and chained CNI plugins must be enabled for this feature to work.Added optional
NetworkPolicydeployment for istiod and istio-cniYou can set
global.networkPolicy.enabled=trueto deploy a defaultNetworkPolicyfor istiod, istio-cni and gateways. (Issue #56877)Added support for watching symlink secrets in the Istio node agent.
Added Certificate Revocation List (CRL) support in ztunnel. When a
ca-crl.pemfile is provided via plugged-in CA, istiod automatically distributes CRLs to all participating namespaces in the cluster. (Issue #58733)Added an experimental feature to allow dry-run of
AuthorizationPolicyresources in ztunnel. This feature will be disabled by default. See the Upgrade Note for details. (usage) (Issue #1933)Added support to block CIDRs in JWKS URIs when fetching public keys for JWT validation. If any resolved IP from a JWKS URI matches a blocked CIDR, Istio will skip fetching the public key and use a fake JWKS instead to reject requests with JWT tokens.
Added a retry mechanism when checking if a pod is ambient enabled in istio-cni. This is to address potential transient failures resulting in potential mesh bypassing. This feature is disabled by default and can be enabled by setting
ambient.enableAmbientDetectionRetryin theistio-cnichart.Added namespace-based authorization for debug endpoints on port 15014. Non-system namespaces restricted to
config_dump/ndsz/edszendpoints and same-namespace proxies only. Disable withENABLE_DEBUG_ENDPOINT_AUTH=falseif needed for compatibility.Fixed resource annotation validation to reject newlines and control characters that could inject containers into pod specs via template rendering. (Issue #58889)
Telemetry
Deprecated the
sidecar.istio.io/statsCompressionannotation, which is replaced by thestatsCompressionproxyConfigoption. Per-pod overrides are still possible viaproxy.istio.io/configannotation. (Issue #48051)Added
statsCompressionoption inproxyConfigto allow global configuration of HTTP compression for the Envoy stats endpoint exposing its metrics. This is enabled by default, offeringbrotli,gzipandzstddepending on theAccept-Headersent by the client. (Issue #48051)Added source and destination workload identification to waypoint proxy traces. Waypoint proxies now include
istio.source_workload,istio.source_namespace,istio.destination_workload,istio.destination_namespaceand other source peer tags in trace spans, matching the observability capabilities of sidecar proxies. (Issue #58348)Added support for
Formattertype custom tag the in Telemetry API.Added
istiod_remote_cluster_sync_statusgauge metric to Pilot to track the synchronization status of remote clusters.Added waypoint span tags
istio.downstream.workload,istio.downstream.namespace,istio.upstream.workload, andistio.upstream.namespaceto the upstream and downstream workload and namespace.Added
timeoutandheadersfields toZipkinTracingProviderto theMeshConfig’sextensionProviders. Thetimeoutfield configures the HTTP request timeout when sending spans to the Zipkin collector, providing better control over trace export reliability. Theheadersfield allows including custom HTTP headers for authentication, authorization, and custom metadata use cases. Headers support both direct values and environment variable references for secure credential management. (Envoy) (reference) (usage)Fixed an issue causing metrics to be reported with unknown labels in ambient multi-network deployments even when baggage-based peer metadata discovery was enabled by setting
AMBIENT_ENABLE_BAGGAGEenvironment variable totruefor pilot. (Issue #58794),(Issue #58476)
Installation
Updated
istiodto setGOMEMLIMITto 90% of the memory limit (previously 100%) to reduce the risk of OOM kills. This is now handled automatically via theautomemlimitlibrary. Users can override this by setting theGOMEMLIMITenvironment variable directly, or adjust the ratio using theAUTOMEMLIMITenvironment variable (e.g.,AUTOMEMLIMIT=0.85for 85%).Updated Kiali addon to version
v2.21.0.Added support for filtering resources that Pilot will watch, based on the environment variable
PILOT_IGNORE_RESOURCES.This variable is a comma-separated list of resources and prefixes that should be ignored by the Istio CRD watcher. If there is a need to explicitly include a resource, even when it is on the ignore list, this can be done using the variable
PILOT_INCLUDE_RESOURCES.This feature enables administrators to deploy Istio as a Gateway API-only controller, ignoring mesh resources, or to deploy Istio with support only for Gateway API
HTTPRoute(e.g., GAMMA support). (Issue #58425)Added support to customize the Envoy file flush interval and buffer configurations in
ProxyConfig. (Issue #58545)Added safeguards to the gateway deployment controller to validate object types, names, and namespaces, to prevent the creation of arbitrary Kubernetes resources through template injection. (Issue #58891)
Added a setting
values.pilot.crlConfigMapNamethat allows configuring the name of theConfigMapthat istiod uses to propagate its Certificate Revocation List (CRL) in the cluster. This allows running multiple control planes with overlapping namespaces in the same cluster.Added support for configuring
terminationGracePeriodSecondson the istio-cni pod, and updated the default value from 5 secs to 30 secs. (Issue #58572)Fixed an issue where
iptablescommand was not waiting to acquire a lock on/run/xtables.lock, causing some misleading errors in the logs. (Issue #58507)Fixed an issue where the istio-cni
DaemonSettreatednodeAffinitychanges as upgrades, causing CNI config to be incorrectly left in place when a node no longer matched theDaemonSet’snodeAffinityrules. (Issue #58768)Fixed
istio-gatewayhelm chart values schema to allow top-levelenabledfield. (Issue #58277)Removed obsolete manifests from the
baseHelm chart. See Upgrade Notes for more information.
istioctl
- Added a
--waitflag to theistioctl waypoint statuscommand to specify whether to wait for the waypoint to become ready (default istrue).
Specifying this flag with --wait=false will not wait for the waypoint to be ready, and will directly display the status of the waypoint.
(Issue #57075)
Added the printing of headers to the
istioctl ztunnel-config allandistioctl proxy-config allcommands.Added
--all-namespacesflag for theistioctl waypoint statuscommand to display the status of waypoints in all namespaces.Added support for specifying the proxy admin port in
istioctl ztunnel-config.Fixed translation function lookup errors for MeshConfig and MeshNetworks in istioctl (Issue #57967)