在 Istio Ambient 模式下,ztunnel 是节点级安全代理,在 L4 层拦截并加密服务间流量。但不负责 L7(如 HTTP)层处理。Ambient 模式中,L7 处理由 Waypoint 代理负责。当 ztunnel 发现目标服务需 L7 处理时,通过 HBONE 协议将流量转发给 Waypoint 代理进行 HTTP 层策略应用和可观察性处理,再由 Waypoint 代理经 ztunnel 转发给目标 Pod,本文将详细阐述这条 L7 流量转发链路。
在 Istio Ambient 模式中:
ztunnel 负责透明捕获 Pod 间的 L4 流量,提供 mTLS 加密和身份认证。
Waypoint 代理 是一个基于 Envoy 的 L7 代理,处理 HTTP 层的高级路由、策略和可观察性。
当一个请求需要 L7 层策略时(如 productpage
调用 reviews-v1
服务),ztunnel 将流量通过 HBONE 隧道转发到 Waypoint Proxy,由 Waypoint 执行 HTTP 路由和策略。
下图展示了 L7 流量在 Ambient 模式中的处理路径。
下面两张图片分别展示了源 Pod 和目标 Pod 在同节点和跨节点情况下的 L7 流量处理路径。
下面是详细的流量路径。
假设 productpage 应用需要访问 reviews 服务。productpage Pod 内的应用向 reviews.default.svc.cluster.local:9080
发起 HTTP 请求。
productpage Pod 的出站请求首先被所在节点上的 ztunnel 拦截。ztunnel 查看从 Istio 控制面下发的配置,根据目标服务(reviews)的身份和策略,得知该服务需要经过 Waypoint 代理进行 L7 层处理。
ztunnel 并非使用传统的 Envoy-to-Envoy XDS 或原生 TCP+mTLS 隧道,而是通过 HBONE 协议 与 Waypoint 代理通信。HBONE 是 Istio Ambient 模式中专门设计的无 Sidecar L7 路由协议,基于 HTTP/2,可在透明模式下对流量进行叠加转发,从而实现灵活的服务拓扑和策略控制。
在这一阶段,ztunnel 会将 L4 流量封装到 HBONE 隧道中,发送给相应的 Waypoint 代理。
Waypoint 代理(目前仍基于 Envoy 实现)收到通过 HBONE 隧道传来的流量后,通过 TLS 配置和客户端证书校验,确保下游(ztunnel)是已被认证的受信主体。它将下游客户端的身份信息(SPIFFE ID)和其他上下文元数据提取出来,以便在 L7 层策略决策中使用。
执行的操作包括:
完成 L7 处理后,Waypoint 代理再通过 HBONE 将流量传回到目标节点的 ztunnel。
目标节点上的 ztunnel 会从 Waypoint 代理接收处理过的流量(同样通过 HBONE 隧道传递),然后解封装并将流量传递给对应的 reviews Pod 中的应用容器端口。
15008
。iptables
规则将流量透明重定向到 ztunnel。在 Ambient 模式下,调试方式也有了一些变化:
ztunnel 调试:
istioctl ztunnel
子命令来协助查看和调试 ztunnel 的配置与状态。waypoint 调试:
istioctl pc
和 istioctl ps
来查看其路由、集群和监听器配置。istioctl waypoint
提供了更直观的配置查看和状态检查功能。Istio Ambient 模式通过 ztunnel 来处理 L4 流量并实现零信任加密与传输,再通过 Waypoint 代理为需要 L7 策略的请求提供集中处理。两者之间通过 HBONE 协议进行高效、透明的通信,实现比传统 Sidecar 模式更轻量且易于运维的架构。
最后更新于 2024/12/12