Istio 1.30.0 更新说明
Istio 1.30.0 更新说明。
流量治理
改进 改进了多网络环境下的端点选择机制:当本地代理网络未设置时,将通过网关访问特定于该网络的端点。
改进 改进了 Sidecar 代理服务的命名空间选择机制。 在配置 Sidecar 代理时,如果某个主机名存在于多个命名空间中, Istio 现在会优先选择 Kubernetes 服务;若无 Kubernetes 服务可用, 则会回退选择创建时间最早的非 Kubernetes 服务(例如
ServiceEntry)。 在此之前,系统会选择按字母顺序排列时排在首位的可见命名空间。新增 在 Ambient 模式的 waypoint 上,可选择性地合成
x-forwarded-client-cert标头。 若在 waypoint 的Gateway资源(或其对应的GatewayClass)上设置注解ambient.istio.io/xfcc-include-client-identity: "true", 该 waypoint 便会在转发请求时重写 XFCC 头部,将其替换为由 ztunnel 提供的源工作负载 SPIFFE 身份信息;如此一来,上游应用程序便能识别出原始客户端的身份。 任何入站的 XFCC 值都将被替换。未设置该注解的 waypoint 则不受影响。 (Issue #54995)新增 添加了对
TLSRoute终止及混合模式的支持。 (Issue #55728)新增 添加了环境变量
PILOT_GATEWAY_TRANSPORT_SOCKET_CONNECT_TIMEOUT, 用于配置网关监听器上的传输套接字连接超时时间。默认值仍为 15 秒。 对于需要较长 TLS 握手时间的负载,可将其设置为0s以禁用超时。 (Issue #56320)新增 添加了 pilot-agent HTTP 服务器的 HTTP 压缩能力(
gzip、zstd)。 (Issue #58697)新增 添加了对
traffic.sidecar.istio.io/excludeInterfaces注解的输入校验, 以确保仅接受有效的 Linux 接口名称,从而防止iptables参数注入。 (Issue #58781)新增 支持从由
PILOT_MULTICLUSTER_KUBECONFIG_PATH指定的本地文件系统路径加载多集群远程 Secret。 设置该参数后,Istiod 将监视挂载的目录(查找.yaml或.yml格式的密钥文件), 并动态更新远程集群注册信息。如果同时设置了PILOT_MULTICLUSTER_KUBECONFIG_PATH和LOCAL_CLUSTER_SECRET_WATCHER, 则PILOT_MULTICLUSTER_KUBECONFIG_PATH具有优先权。 (Issue #58927)新增 添加了 Istio 中对 Agentgateway 的实验性支持。 可通过
PILOT_ENABLE_AGENTGATEWAY特性标志启用 Agentgateway 配置。 Istio 支持通过 Gateway API 资源进行 Agentgateway 配置。 (Issue #59209)新增 添加了在 Ambient 模式下对
ServiceEntry的 CIDR 地址支持。 包含 CIDR 地址(例如10.0.0.0/24)的ServiceEntry现已同步至 ztunnel, 从而为流向特定 IP 地址范围的流量启用最长前缀匹配路由。 (Issue #59797)新增 添加了通过特性标志
PILOT_HBONE_INITIAL_STREAM_WINDOW_SIZE和PILOT_HBONE_INITIAL_CONNECTION_WINDOW_SIZE,可配置 HBONE CONNECT 上游集群(专为 waypoint 和东西向网关生成)的初始 HTTP/2 流窗口大小及连接窗口大小的功能。利用此功能,可有效减少不必要的缓冲。 (Issue #59961)新增 添加了一个
istio.io/connect-strategy注解至ServiceEntries, 以支持不同的 DNS 连接语义。当 DNS 服务器返回多个 A 记录, 且客户端需要逐一测试各个端点并选取首个成功建立 TCP 连接的端点时, 用户可将此注解设置为RACE_FIRST_TCP_CONNECT。 (Issue #59083)新增 添加了 DNS 集群的故障转移优先级支持。 (Issue #58674)
新增 添加了可通过
DNS_FORWARD_TIMEOUT环境变量配置 DNS 上游服务器的超时时间。 默认超时时间仍为 5 秒。用户可以针对高延迟的 DNS 服务器适当增加超时时间; 也可以在 DNS 服务器无响应时缩短超时时间,从而减少对用户体验造成的影响(即“快速失败”,以便更快地尝试下一个服务器)。 该参数可在istio-proxy容器中通过设置DNS_FORWARD_TIMEOUT=10s进行配置, 或通过proxyMetadata在整个服务网格范围内进行统一配置。 (Issue #59813)新增 添加了对东西向网关上 TLS 透传监听器的支持, 允许通过 Gateway API 暴露非 HBONE 端口(例如,跨网络边界将流量路由至 Kubernetes API 服务器)。此功能要求启用
AMBIENT_ENABLE_MULTI_NETWORK。 (Issue #59223)新增 添加了命名空间级别的流量分配注解。当服务未显式设置流量分配时,将继承命名空间注解中的配置。 (Issue #58701)
新增 添加了对 Sidecar 代理的
DYNAMIC_DNS通配符ServiceEntry支持, 适用于MESH_INTERNAL和MESH_EXTERNAL两种位置。 这使得在传统的 Sidecar 模式下,能够针对通配符主机(例如*.example.com) 实现 L7 HTTP 路由(通过 Host 标头)和 L4 TLS 路由(通过 SNI), 并提供相应的可观测性。请注意,对于匹配该通配符主机的 TLS 连接, 存在 SNI 欺骗的可能性。例如,一个连接至foo.example.com的客户端, 可能通过*.example.com这一ServiceEntry建立连接, 但其 SNI 字段却被设置为bar.example.com。 (Issue #58244)新增 添加了
TrafficExtensionAPI 至扩展包,为 Lua 扩展能力提供了第一流的支持。启用 默认启用了
protocol: TLS的 Gateway 监听器。 现在,配置了protocol: TLS的 Gateway 监听器(用于通过TLSRoute实现 TLS 透传)无需设置PILOT_ENABLE_ALPHA_GATEWAY_API=true即可被接纳, 因为在 Gateway APIv1.5.0版本中,TLSRoute已正式升级为 GA(通用可用)状态。修复 修复了一个导致无法将 Kubernetes 用户命名空间(
hostUsers: false)Pod 与 istio-cni 配合使用的问题。目前仅支持包含nsenter二进制文件的操作系统。 (Issue #58750)修复 修复了 Gateway API 的 CORS 处理:在使用通配符源时正确解析
Origin标头, 忽略不匹配的预检请求,并全面实施更严格的Origin标头解析规则。 (Issue #59018, Issue #59026)修复 修复了一个问题:当仅存在 TLS 端口时,waypoint 未能添加 TLS 检查器监听器过滤器, 导致针对
resolution: DYNAMIC_DNS的通配符ServiceEntry资源,基于 SNI 的路由失效。 (Issue #59024)修复 修复了基于文件的配置存储中错误封装的问题, 现改用
%w动词,从而实现了通过errors.Is()和errors.As()进行正确的错误链传播。 (Issue #59078)修复 修复了 Gateway API
tls.Options[gateway.istio.io/tls-terminate-mode], 使其能够在CACertificateRefs处理完成后正确覆盖 TLS 模式。 (Issue #59098)修复 修复了
ServiceEntry验证(针对DYNAMIC_DNS解析)中一处空指针解引用问题,该问题可能导致 istiod 崩溃。 (Issue #59171)修复 修复了
cni代理的行为,使其遵循excludeNamespaces配置, 从而确保插件与代理之间的行为保持一致。 (Issue #59295)修复 修复了当
PILOT_ENABLE_AMBIENT=true但未设置AMBIENT_ENABLE_MULTI_NETWORK,且存在一个网络配置与本地集群不同的WorkloadEntry资源时,istiod 发生崩溃的问题。 (Issue #59321)修复 修复了一个导致单网络环境下(无东西向网关)多集群 waypoint 路由失效的问题。 (Issue #58133)
修复 修复了一个问题:当
HTTPRoute未指定backendRefs时, 本应返回 HTTP 404 状态码,却错误地返回了 500。根据 Gateway API 规范, 未包含任何后端引用的路由应返回 404;而包含后端引用、但所有引用权重均为零的路由,才应返回 500。 (Issue #59356)修复 修复了在控制平面未更新
istio-readerClusterRole导致无法从远程ConfigMap读取信任域时, 多集群安装过程中会尝试验证错误的信任域的问题。现在, istiod 将回退使用本地网格配置中指定的信任域,直至其能够成功读取远程信任域为止。 (Issue #59474)修复 修复了将多个针对同一主机名的
VirtualService资源应用到 waypoint 的问题。 (Issue #59483)修复 修复了一个 Bug:由于 Envoy 中的连接池配置有误, E/W 网关偶尔会将 HBONE 连接路由至错误的服务。 (Issue #58630)
修复 修复了网关部署控制器在协调过程中拒绝
DaemonSet类型的问题。 (Issue #59498)修复 修复了 istiod 重启后,所有
Gateways均被重启的问题。 (Issue #59709)修复 修复了在 AWS EKS 上使用“Pod 安全组”(即分支 ENI)时, Ambient Mesh Pod 出现 kubelet 健康探针失败的问题。 Istio-CNI 现在能够识别分支 ENI Pod,并添加 IP 规则, 将探针流量通过 veth 对进行路由,而非经由 VPC 网络结构。 此功能受
AMBIENT_ENABLE_AWS_BRANCH_ENI_PROBE标志控制(默认启用)。修复 修复了在包含双栈东西向网关负载均衡器的多网络网格中, istiod 会向仅支持 IPv4 的代理推送不可达的 IPv6 网关端点(反之亦然)的问题。
修复 修复了一个竞态条件问题:当
HTTPRoutes被添加后随即被移除时, 会导致程序发生 Panic。这种情况通常发生在用户应用了HTTPRoute, 但在控制器尚未有机会对其进行处理之前,便将其删除了。修复 修复了一个导致
HTTPRoute和GRPCRoute无法在同一网关主机名上无冲突共存的问题。 (Issue #59222)修复 修复了当
DefaultAddress的 IP 族与代理所支持的 IP 族不匹配时,GetAllAddressesForProxy会向代理返回不可达的服务地址的问题。修复 修复了
ReferenceGrant的to字段,使其能够正确处理多个条目; 此前仅最后一个条目生效,导致对于匹配了较早条目的引用,会错误地判定为RefNotPermitted。修复 修复了
Gateway和ListenerSet资源的状态报告机制, 使其符合 Gateway APIv1.5.0规范。具体而言,它将Gateway的状态报告内容进行了调整: 在Gateway资源的AttachedListenerSets字段中, 现在显示的是ListenerSet的数量,而非 Listener 的数量。 此外,它还修改了ListenerSet的状态报告方式,使其能够报告该ListenerSet内每个 Listener 所关联的路由数量。修复 修复了一个 Bug:
DestinationRule中retryBudget的默认percent值被错误地设置为 0.2%,而非预期的 20%。 (Issue #59504)修复 修复了一个 Bug:当目标服务(Destination)包含定义了独立
trafficPolicy的子集(Subset)时,在DestinationRule的顶层trafficPolicy中设置的retryBudget会被静默丢弃; 此外,在子集层级定义的retryBudget也同样会被忽略。 (Issue #59667)修复 修复了当
ServiceEntry更新后不再符合 IP 自动分配条件时, 陈旧的status.addresses未被清除的问题。 (Issue #58974)修复 修复了一个导致间歇性出现
proxy::h2 ping error: broken pipe错误日志的竞态条件。 (Issue #59192), (Issue #1346)
安全性
新增 添加了对每个工作负载配置多个 CUSTOM 授权提供者的支持, 从而允许针对不同的 API 路径应用不同的认证方案(如 OAuth、LDAP、API 密钥)。 (Issue #57933), (Issue #55142), (Issue #34041)
新增 添加了当
ENABLE_DEBUG_ENDPOINT_AUTH=true时,允许为调试端点指定授权的命名空间的功能。 可通过将DEBUG_ENDPOINT_AUTH_ALLOWED_NAMESPACES设置为以逗号分隔的授权命名空间列表来启用此功能。 系统命名空间(通常为istio-system)始终拥有授权。修复 修复了
meshConfig.tlsDefaults.minProtocolVersion在下游 TLS 上下文中被错误映射至tls_minimum_protocol_version的问题。 (Issue #58912)修复 修复了
AuthorizationPolicy中的serviceAccount匹配正则表达式, 现可正确引用服务账号名称,从而确保能够正确匹配名称中包含特殊字符的服务账号。 (CVE-2026-39350) (Issue #59700)致谢:此漏洞由 Wernerina (https://github.com/Wernerina) 发现并报告。
修复 修复了一个问题:istiod 可能会签发其
NotAfter时间晚于签发证书过期时间的叶证书。 (Issue #59768)修复 修复了
AuthorizationPolicy在匹配 SPIFFE 身份和命名空间时存在的授权绕过漏洞。 在生成的 Envoy 配置中,source.principals(后缀匹配)和source.namespaces等字段中的正则表达式元字符未被正确转义,这可能导致非预期的身份意外匹配到策略规则。 (Issue #59992)致谢:此漏洞由 Alex (https://github.com/Alex0Young) 发现并报告。
修复 修复了一个 Bug:当证书顺序不同时,CA 捆绑包(CA bundle)的轮换操作无法正常触发。 在进行比对时,仅考量标准的
CERTIFICATEPEM 块; 其他类型的块(例如TRUSTED CERTIFICATE)将被忽略, 这与 Istio 中现有的 CA 捆绑包处理机制保持一致。 (Issue #59909)修复 修复了一个严重的安全漏洞:Istio 的 JWKS 回退机制存在 RSA 私钥泄露风险, 导致攻击者在 JWKS 获取失败时能够伪造 JWT 令牌并绕过身份验证。 详情请参阅 CVE-2026-31837。 (Advisory GHSA-v75c-crr9-733c)
致谢:此漏洞由 1seal (https://github.com/1seal) 发现并报告。
修复 修复了 JWKS URI 的 CIDR 阻断问题:通过在自定义的
DialContext中使用自定义控制函数来实现。该控制函数会在 DNS 解析完成后、 实际发起连接(dialing)之前对连接进行过滤,从而确保阻断策略能够跟随重定向及签发者(issuer)的发现路径。 此外,此方案还保留了默认DialContext中的各项特性, 例如“Happy Eyeballs”机制以及dialSerial(按顺序逐一尝试已解析的 IP 地址)功能。 (CVE-2026-41413)致谢:此漏洞由 KoreaSecurity (https://github.com/KoreaSecurity)、1seal (https://github.com/1seal) 和 AKiileX (https://github.com/AKiileX) 发现并报告。
修复 修复了 XDS 调试端点(
syncz、config_dump)以强制要求身份验证。 此前,在明文 XDS 端口 15010 上无需身份验证即可访问。 此行为由ENABLE_DEBUG_ENDPOINT_AUTH标志控制(与 HTTP 调试端点使用同一标志)。 (CVE-2026-31838)致谢:此漏洞由 1seal (https://github.com/1seal) 发现并报告。
修复 修复了由
StatusGen提供的 XDS 调试端点(istio.io/debug/syncz、istio.io/debug/config_dump)现已强制执行同命名空间授权策略, 以限制非系统调用方。此前,来自任意命名空间的已认证工作负载均可枚举代理, 并获取其他命名空间内工作负载的配置转储。致谢:此漏洞由 1seal (https://github.com/1seal) 发现并报告。
修复 修复了通过验证 Bearer Token 领域(Realm)URL, 修复了
WasmPlugin图像获取过程中潜在的 SSRF 漏洞。致谢:此漏洞由 Luntry 的 Sergey Kanibor(https://github.com/r0binak)发现并报告。
修复 修复了 istiod webhook HTTPS 服务器(端口 15017)缺失
ReadHeaderTimeout和IdleTimeout的问题, 使其与 HTTP 服务器(端口 8080)现有的超时设置保持一致。修复 修复了 XDS 调试端点,使其传递调用方命名空间,以确保正确的授权检查。
遥测
新增 添加了在填充
source_app和destination_app指标标签时, 使用app.kubernetes.io/name和service.istio.io/canonical-name标签的支持。 其优先级顺序为:app(用于向后兼容),其次是app.kubernetes.io/name, 最后是service.istio.io/canonical-name。这一改进确保了仅配置了app.kubernetes.io/name标签的用户,其指标数据也能得到正确填充。 (Issue #58436)新增 添加了 Telemetry Tracing API 中的
disableContextPropagation字段, 允许用户独立于 Span 上报功能,禁用追踪上下文头(例如X-B3-*、traceparent)的传播。 这有助于在维持内部可观测性的同时,防止追踪上下文在出口网关处发生泄漏。 (Issue #58871)新增 添加了支持对追踪 Span 进行符合 OpenTelemetry 语义约定的服务属性丰富。 当
MeshConfig中的OpenTelemetryTracingProvider配置项设置为serviceAttributeEnrichment: OTEL_SEMANTIC_CONVENTIONS时,service.name将依据 OTel K8s 服务属性规范的回退链进行计算。 此外,service.namespace、service.version和service.instance.id会在 Sidecar 注入时作为OTEL_RESOURCE_ATTRIBUTES注入到 Sidecar 中, 同时自动启用环境资源探测器(Environment resource detector), 从而确保 Envoy 在启动时能够获取到这些属性。 (Issue #55026)新增 添加了资源使用面板至 ztunnel Grafana 仪表板, 用于叠加显示每个实例的活跃 TCP 连接、打开的文件描述符及打开的套接字数量。
修复 修复了一个问题,基于 Baggage 的对等元数据发现机制干扰了 TLS 或 PROXY 流量策略的正常运行。作为一项短期修复措施, 我们针对配置了 TLS 或 PROXY 流量策略的路由禁用了基于 Baggage 的元数据发现功能; 这可能导致在多集群部署环境中,遥测数据出现不完整的情况。 我们正致力于在未来的版本中解决这一局限性。 (Issue #59117)
可扩展性
新增 添加了支持通过
ISTIO_WASM_MAX_BINARY_SIZE_BYTES环境变量配置 Wasm 二进制文件大小限制。 (Issue #59322)修复 修复了针对通过 HTTP 获取的经 gzip 解压后的 WASM 二进制文件, 修复了缺失大小限制的问题,使其与已应用于其他获取路径的限制保持一致。
安装
新增 添加了
istio-cniHelm Chart 中的useAppArmorAnnotation值。 其默认值为true。当该值为true时,AppArmor 配置文件将通过container.apparmor.security.beta.kubernetes.io注解进行设置(该注解在 Kubernetes 1.30 版本中已被弃用); 否则,将使用securityContext中的appArmorProfile字段。 (Issue #54721)新增 添加了
values.global.enableReaderRBAC(默认值:true), 用于控制istio-reader-service-account及其相关的istio-readerClusterRole/ClusterRoleBinding的安装,以支持多集群远程 Secret 工作流。 将其设置为false即可禁用这些资源的安装。若使用 Helm 进行安装, 请务必在base和istiod这两个 Chart 中均设置global.enableReaderRBAC=false, 因为ServiceAccount是由baseChart 渲染的, 而相关的ClusterRole/ClusterRoleBinding则是由istiodChart 渲染的。 (Issue #56326)新增 添加了对 Helm v4(服务器端应用)的支持。 修复了 Webhook
failurePolicy字段的所有权冲突, 该冲突曾导致使用 SSA 执行helm upgrade时失败。 (Issue #58302), (Issue #59367)新增 添加了通过
networkGatewayPorts值,为网络网关服务添加了可配置的端口覆盖功能。 (Issue #59072)新增 添加了模板验证:当
service.ports为空且未设置networkGateway时,提前报错。 (Issue #59072)新增 添加了在 istiod 日志中记录所有 Istio 资源类型(如
DestinationRule、EnvoyFilter、Sidecar等)的配置分析警告与错误, 从而使运维人员无需再逐一检查各个资源的状态字段即可发现配置错误。 (Issue #59105)新增 添加了
WaypointBound状态条件至WorkloadEntry资源, 用于报告工作负载是否已成功连接至其 waypoint 代理,或在绑定过程中是否发生了错误。 (Issue #59993)新增 添加了
pilot-discovery的--tls-min-version标志, 用于配置 istiod 服务器和 Webhook 的最低 TLS 版本。支持的值包括1.2(默认值)和1.3。 (Issue #58789)新增 添加了
registry.istio.io作为 Istio 镜像的默认注册表。新增 添加了
ztunnelHelm Chart 中的dnsPolicy和dnsConfig字段, 用于在具有非标准 DNS 需求的环境中进行自定义 DNS 配置。修复 添加了 CNI 配置文件权限设置:为符合 CIS Kubernetes 基准测试
v1.12的要求, 默认权限现已更改为0600,而非此前的0644。若需启用组读取权限, 可在istio-cni-nodeDaemonSet 上设置环境变量values.cni.env.CNI_CONF_GROUP_READ=true, 此时权限将被设置为0640。 (Issue #59071)修复 修复了多主部署升级过程中发生的空指针解引用问题。 (Issue #59153)
修复 修复了一个问题:将资源限制或请求设置为
null时, 会导致验证错误(提示“CPU 请求必须小于或等于 0 的 CPU 限制”)。 此问题影响了代理注入、网关生成以及 Helm Chart 部署。 (Issue #58805)修复 修复了启用 Untaint 控制器时,
istiod部署中缺失PILOT_ENABLE_NODE_UNTAINT_CONTROLLERS环境变量的问题。 (Issue #52050)修复 修复了因
NetworkPolicy入站规则中的from: []导致的不必要 Helm 协调问题。修复 修复了一个问题:在使用支持
.Release.IsUpgrade的工具(如 Helm 4 和 Flux)执行helm upgrade并启用服务器端应用(SSA)时,ValidatingWebhookConfiguration资源上出现的字段管理器冲突。 现在,在执行升级操作时,Webhook 模板中将省略failurePolicy字段, 从而保留 Webhook 控制器在运行时设置的实际值。对于那些结合 SSA 使用helm template的工具, 请将配置项base.validationFailurePolicy设置为Fail,以避免此类冲突。
istioctl
改进 改进了
istioctl bug-report命令的性能。新增 添加了
--skip-cluster-dump、--skip-analyze、--skip-proxy-debug、--skip-netstat和--skip-coredumps标志至istioctl bug-report命令,允许跳过报告中耗时较长的部分。修复 修复了日志获取功能,现支持通过包含和排除规则筛选 Pod。
新增 添加了
--tail标志,用于设置每个容器获取的日志行数上限。默认值仍为无限制。变更 更新了最低支持的 Kubernetes 版本至
1.32.x。新增 添加了
istioctl命令的端口验证功能,以防止输入超出 1-65535 范围的无效值。 (Issue #58584)新增 添加了对
istioctl proxy-status -oyaml/json的支持,用于列出单个命名空间的代理状态。 (Issue #59377)新增 添加了一项
istioctl analyze警告 (IST0175), 用于提示当存在RequestAuthentication资源,但 istiod 上未配置BLOCKED_CIDRS_IN_JWKS_URIS的情况。 (Issue #59523)新增 添加了
istioctl proxy-status子命令的 JSON 和 YAML 输出选项。 (Issue #56880)新增 添加了支持按工作负载 Pod 名称过滤
istioctl ztunnel-config workload和istioctl ztunnel-config connections的输出。修复 修复了一个问题:当
EnvoyFilter对VIRTUAL_HOST执行REPLACE操作时,istioctl会错误地报告错误。 (Issue #59495)修复 修复了
istioctl ztunnel-config connections中的一个排序错误,该错误导致输出排序结果不确定。 (Issue #59775)修复 修复了一个问题:
istioctl ztunnel-config service命令的 JSON 和 YAML 输出中,未包含来自 ztunnel 配置转储的canonical字段。 (Issue #59962)修复 修复了一个问题:
istioctl ztunnel-config service的 JSON 和 YAML 输出中未包含来自 ztunnel 配置转储的cidrVips。 (Issue #59962)修复 修复了一个问题,即无发行版(distroless)的
istioctl容器使用了错误的基础镜像进行构建。
文档变更
- 变更 更新了 Gateway API 推理扩展文档的位置;现已移至“架构”部分。 (Issue #56948)