深入 Istio Ambient 模式:从 Ztunnel 到 Waypoint 代理的 L7 流量路径解析

深入解析 Istio Ambient 模式中的 L7 流量路径,从 ztunnel 到 Waypoint 代理的透明拦截与策略应用。

版权声明
本文为 Jimmy Song 原创。转载请注明来源: https://jimmysong.io/blog/istio-ambient-l7-flow-analysis/
查看本文大纲

在 Istio Ambient 模式下,ztunnel 是节点级安全代理,在 L4 层拦截并加密服务间流量。但不负责 L7(如 HTTP)层处理。Ambient 模式中,L7 处理由 Waypoint 代理负责。当 ztunnel 发现目标服务需 L7 处理时,通过 HBONE 协议将流量转发给 Waypoint 代理进行 HTTP 层策略应用和可观察性处理,再由 Waypoint 代理经 ztunnel 转发给目标 Pod,本文将详细阐述这条 L7 流量转发链路。

Waypoint 代理的角色与责任

在 Istio Ambient 模式中:

  • ztunnel 负责透明捕获 Pod 间的 L4 流量,提供 mTLS 加密和身份认证。

  • Waypoint 代理 是一个基于 Envoy 的 L7 代理,处理 HTTP 层的高级路由、策略和可观察性。

当一个请求需要 L7 层策略时(如 productpage 调用 reviews-v1 服务),ztunnel 将流量通过 HBONE 隧道转发到 Waypoint Proxy,由 Waypoint 执行 HTTP 路由和策略。

L7 流量在 Ambient 模式中的处理路径

下图展示了 L7 流量在 Ambient 模式中的处理路径。

image
L7 流量在 Ambient 模式中的处理路径

下面两张图片分别展示了源 Pod 和目标 Pod 在同节点和跨节点情况下的 L7 流量处理路径。

image
源 pod 和目标 pod 在同一节点上的 L7 流量路径
image
源 pod 和目标 pod 在不同节点上的 L7 流量路径

下面是详细的流量路径。

1. 应用请求发出

假设 productpage 应用需要访问 reviews 服务。productpage Pod 内的应用向 reviews.default.svc.cluster.local:9080 发起 HTTP 请求。

2. ztunnel L4 透明捕获与识别

productpage Pod 的出站请求首先被所在节点上的 ztunnel 拦截。ztunnel 查看从 Istio 控制面下发的配置,根据目标服务(reviews)的身份和策略,得知该服务需要经过 Waypoint 代理进行 L7 层处理。

3. 通过 HBONE 协议转发至 Waypoint

ztunnel 并非使用传统的 Envoy-to-Envoy XDS 或原生 TCP+mTLS 隧道,而是通过 HBONE 协议 与 Waypoint 代理通信。HBONE 是 Istio Ambient 模式中专门设计的无 Sidecar L7 路由协议,基于 HTTP/2,可在透明模式下对流量进行叠加转发,从而实现灵活的服务拓扑和策略控制。

在这一阶段,ztunnel 会将 L4 流量封装到 HBONE 隧道中,发送给相应的 Waypoint 代理。

4. Waypoint 代理的 L7 策略与遥测处理

Waypoint 代理(目前仍基于 Envoy 实现)收到通过 HBONE 隧道传来的流量后,通过 TLS 配置和客户端证书校验,确保下游(ztunnel)是已被认证的受信主体。它将下游客户端的身份信息(SPIFFE ID)和其他上下文元数据提取出来,以便在 L7 层策略决策中使用。

执行的操作包括:

  • 基于 HTTP Path/Host 的路由和流量拆分
  • 基于 Headers 的访问控制和认证策略
  • 故障注入、熔断、限流
  • 遥测数据收集(请求时延、错误率、Tracing、Metrics、Logs)

完成 L7 处理后,Waypoint 代理再通过 HBONE 将流量传回到目标节点的 ztunnel。

5. 流量到达目标 Pod

目标节点上的 ztunnel 会从 Waypoint 代理接收处理过的流量(同样通过 HBONE 隧道传递),然后解封装并将流量传递给对应的 reviews Pod 中的应用容器端口。

洞察与关键点总结

1. Waypoint 并不知道 ztunnel 的存在

  • Waypoint 代理只知道目标 Pod 的 IP 地址,但目标端口被重写为 15008
  • Kubernetes iptables 规则将流量透明重定向到 ztunnel。

2. 流量安全性:端到端加密与身份认证

  • 双向 TLS(mTLS)和 SPIFFE ID 校验确保了端到端安全。
  • 无法绕过 ztunnel,确保了零信任架构的完整实施。

3. 完全透明的流量控制

  • 应用开发人员无需更改任何代码。
  • 流量控制、策略和可观察性完全在数据面层面透明执行。

如何调试?

在 Ambient 模式下,调试方式也有了一些变化:

  • ztunnel 调试

    • Istio 引入了新的 istioctl ztunnel 子命令来协助查看和调试 ztunnel 的配置与状态。
  • waypoint 调试

    • 虽然 Waypoint 代理仍然是 Envoy,所以仍然可以使用 istioctl pcistioctl ps 来查看其路由、集群和监听器配置。
    • istioctl waypoint 提供了更直观的配置查看和状态检查功能。

总结

Istio Ambient 模式通过 ztunnel 来处理 L4 流量并实现零信任加密与传输,再通过 Waypoint 代理为需要 L7 策略的请求提供集中处理。两者之间通过 HBONE 协议进行高效、透明的通信,实现比传统 Sidecar 模式更轻量且易于运维的架构。

最后更新于 2024/12/12