Istio 1.30 是一个"补洞+填坑"型版本——Ambient 模式拿到了多项此前 sidecar 独占的能力,多网络和多集群场景下的一批顽固 bug 被修复,安全方面则一口气堵了四个 CVE。如果你正在评估或已经部署 Ambient,这个版本值得认真看。
Ambient 模式:CIDR 路由、TLSRoute 终止与 XFCC 传递
Ambient 模式此前在 ServiceEntry 上只支持主机名解析,对 CIDR 地址范围(如 10.0.0.0/24)无能为力。1.30 把 CIDR 地址传播到 ztunnel,实现了最长前缀匹配路由——这意味着你可以直接用 IP 范围定义内部网络出口,不再需要逐条写主机名。
TLSRoute 终止和混合模式也被加入支持(Issue #55728),east-west gateway 上新增了 TLS passthrough listener,允许非 HBONE 端口通过 Gateway API 暴露(比如跨网络边界路由到 Kubernetes API Server)。这需要启用 AMBIENT_ENABLE_MULTI_NETWORK。
另一个实用改进:Waypoint 上的 XFCC(x-forwarded-client-cert)传递。默认情况下 waypoint 不处理 XFCC,但上游应用往往需要看到来源客户端身份。1.30 提供了 opt-in 注解:
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: my-waypoint
annotations:
ambient.istio.io/xfcc-include-client-identity: "true"
spec:
gatewayClassName: istio-waypoint
listeners:
- port: 15008
protocol: HBONE
name: mesh
启用后,waypoint 会用 ztunnel 提供的源工作负载 SPIFFE 身份覆盖转发请求中的 XFCC,上游应用就能拿到真实客户端身份。注意:已有的入站 XFCC 值会被替换,不是追加。
流量管理:DNS 行为与多网络端点选择
DNS 相关改动是这版流量管理最密集的区域:
- DNS 上游超时可配置:新增
DNS_FORWARD_TIMEOUT环境变量,默认 5 秒。高延迟 DNS 服务器可以调大,反之可以调小以更快 fail over。可以在 istio-proxy 容器里设DNS_FORWARD_TIMEOUT=10s,也可以通过proxyMetadata全局生效。 - DNS 集群 failover 优先级:新增 failover priority 支持(Issue #58674)。
- 连接策略注解:ServiceEntry 新增
istio.io/connect-strategy注解。当 DNS 返回多条 A 记录时,设为RACE_FIRST_TCP_CONNECT可以让客户端逐个试探端点,选第一个 TCP 连接成功的。这对 DNS 轮询但部分端点不可达的场景很实用:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: external-api
annotations:
istio.io/connect-strategy: RACE_FIRST_TCP_CONNECT
spec:
hosts:
- api.external.example.com
location: MESH_EXTERNAL
ports:
- number: 443
name: https
protocol: TLS
resolution: DNS
- 命名空间级流量分布:Service 未显式设置流量分布时,会从命名空间注解继承。这减少了逐个 Service 配置的重复劳动:
apiVersion: v1
kind: Namespace
metadata:
name: production
annotations:
traffic.sidecar.istio.io/distribution: "round-robin"
- Sidecar 代理命名空间选择改进:当主机名出现在多个命名空间时,Istio 现在优先选 Kubernetes Service,回退到创建时间最早的非 Kubernetes Service(如 ServiceEntry),不再按字母序选第一个可见命名空间。这消除了一个常见的不确定性来源。
多网络环境下,端点选择逻辑也做了改进:当本地 proxy 的网络未设置时,网络特定端点会走 gateway 而不是直连。
安全:四个 CVE 与多项授权修复
1.30 的安全修复密度很高,以下是最关键的几项:
| CVE | 问题 | 影响 |
|---|---|---|
| CVE-2026-31837 | JWKS 回退机制泄露 RSA 私钥 | 攻击者可在 JWKS 获取失败时伪造 JWT 绕过认证 |
| CVE-2026-39350 | AuthorizationPolicy 中 serviceAccount 匹配正则未转义特殊字符 | 含特殊字符的 ServiceAccount 名匹配出错 |
| CVE-2026-31838 | XDS debug 端点(syncz/config_dump)在 15010 端口无需认证 | 任何可达该端口的请求都能获取代理配置 |
| CVE-2026-41413 | JWKS URI CIDR 阻断在 DNS 解析后未过滤 | SSRF 风险 |
此外,AuthorizationPolicy 中 SPIFFE 身份和命名空间的 suffix 匹配也存在正则元字符未转义的问题(Issue #59992),可能导致非预期身份匹配策略规则。Istiod 签发叶证书时也可能超出签发证书的过期时间(Issue #59768)。
建议操作:
- 立即升级,尤其是使用了 JWT 认证或 AuthorizationPolicy 的集群。
- 启用
ENABLE_DEBUG_ENDPOINT_AUTH=true,并通过DEBUG_ENDPOINT_AUTH_ALLOWED_NAMESPACES限制可访问 debug 端点的命名空间:
# 在 istiod Deployment 或 Helm values 中设置
env:
- name: ENABLE_DEBUG_ENDPOINT_AUTH
value: "true"
- name: DEBUG_ENDPOINT_AUTH_ALLOWED_NAMESPACES
value: "istio-system,dev-team"
- 多 CUSTOM 授权 provider 现已支持(Issue #57933),可以为不同 API 路径配置 OAuth、LDAP、API Key 等不同认证方案:
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: multi-auth
namespace: my-app
spec:
selector:
matchLabels:
app: my-service
rules:
- to:
- operation:
paths: ["/api/public/*"]
from:
- source:
authorizationProviders:
- name: oauth-provider
- to:
- operation:
paths: ["/api/internal/*"]
from:
- source:
authorizationProviders:
- name: apikey-provider
遥测与可观测性
OTel 语义约定对齐是这版的重要改进。设置 serviceAttributeEnrichment: OTEL_SEMANTIC_CONVENTIONS 后,service.name 按 OTel K8s 属性规范回退链计算,service.namespace、service.version、service.instance.id 作为 OTEL_RESOURCE_ATTRIBUTES 注入 sidecar,Envoy 启动时自动启用 Environment resource detector:
apiVersion: v1
kind: ConfigMap
metadata:
name: istio
namespace: istio-system
data:
mesh: |
extensionProviders:
- name: otel
opentelemetry:
serviceAttributeEnrichment: OTEL_SEMANTIC_CONVENTIONS
另一个实用字段:Telemetry Tracing API 新增 disableContextPropagation,可以在出口网关禁用 trace context 传播(如 X-B3-*、traceparent),防止 trace 上下文泄漏到外部,同时保留内部可观测性。
Ztunnel Grafana dashboard 新增了 Resource Usage 面板,叠加展示活跃 TCP 连接、打开的文件描述符和 socket 数,方便排查 ztunnel 资源瓶颈。
安装与运维工具
几个运维直接受益的改动:
- Helm v4(Server-Side Apply)支持:升级时 webhook
failurePolicy字段冲突已修复。用helm template+ SSA 的工具需设base.validationFailurePolicy: Fail避免冲突。 - CNI 配置文件权限:默认从
0644改为0600,符合 CIS Kubernetes Benchmark v1.12。需要组读权限时设values.cni.env.CNI_CONF_GROUP_READ=true(权限变为0640)。 - istioctl bug-report 性能优化:新增
--skip-cluster-dump、--skip-analyze、--skip-proxy-debug、--skip-netstat、--skip-coredumps五个跳过标志,按需裁剪报告内容。 - istiod 配置分析日志:所有 Istio 资源类型的配置分析警告和错误现在会输出到 istiod 日志,不再需要逐个检查资源 status 字段。
- 多集群 kubeconfig 本地加载:
PILOT_MULTICLUSTER_KUBECONFIG_PATH支持从本地文件系统加载远程集群 secret,istiod 监听目录动态更新注册。
升级检查清单
- Kubernetes 版本:最低支持版本升至 1.32.x,确认集群版本兼容。
- 安全优先:四个 CVE 中 JWKS 私钥泄露和 XDS debug 端点未认证影响最大,优先处理。
- Ambient 用户:CIDR ServiceEntry、TLSRoute 终止、east-west TLS passthrough 是新能力;AWS EKS branch ENI 场景的 kubelet 健康探针修复已默认启用。
- DNS 调优:检查是否有高延迟 DNS 或多 A 记录场景,分别考虑
DNS_FORWARD_TIMEOUT和connect-strategy注解。 - AuthorizationPolicy:检查含特殊字符的 ServiceAccount 名和 suffix 匹配规则,升级后行为会变化。
- Helm 升级:SSA 场景注意
failurePolicy字段冲突的处理方式。 - istioctl:利用新的 bug-report 跳过标志减少收集时间;
proxy-status现支持 JSON/YAML 输出和命名空间过滤。