Istio 1.30:Ambient 模式补齐关键能力,安全修复密集落地

2026-05-18 13 预计阅读时间:1 分钟
来源:istio.io AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:9 分钟

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.namespaceservice.versionservice.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 监听目录动态更新注册。

升级检查清单

  1. Kubernetes 版本:最低支持版本升至 1.32.x,确认集群版本兼容。
  2. 安全优先:四个 CVE 中 JWKS 私钥泄露和 XDS debug 端点未认证影响最大,优先处理。
  3. Ambient 用户:CIDR ServiceEntry、TLSRoute 终止、east-west TLS passthrough 是新能力;AWS EKS branch ENI 场景的 kubelet 健康探针修复已默认启用。
  4. DNS 调优:检查是否有高延迟 DNS 或多 A 记录场景,分别考虑 DNS_FORWARD_TIMEOUTconnect-strategy 注解。
  5. AuthorizationPolicy:检查含特殊字符的 ServiceAccount 名和 suffix 匹配规则,升级后行为会变化。
  6. Helm 升级:SSA 场景注意 failurePolicy 字段冲突的处理方式。
  7. istioctl:利用新的 bug-report 跳过标志减少收集时间;proxy-status 现支持 JSON/YAML 输出和命名空间过滤。

相关推荐