Istio Ambient 模式:图解及概念解读

本文通过一份详细的 Istio Ambient 模式的术语表,帮助你更好地理解其中的关键概念及其背后的技术实现。

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

Istio 的 Ambient 模式是一种创新的、无 Sidecar 的服务网格部署方式,通过 ztunnel 和 waypoint proxy 分离数据平面功能,简化了操作并降低了资源消耗。本篇博客将通过一份详细的术语表,帮助你更好地理解 Istio Ambient 模式中的关键概念及其背后的技术实现。

Ambient 模式

image
Ambient 模式架构图
  • 定义:Istio 的一种无 Sidecar 的数据平面模式,通过 ztunnel 和 waypoint proxy 实现服务之间的安全通信和管理。相较于 Sidecar 模式,Ambient 模式更加轻量,降低了资源消耗并简化了配置。
  • 架构:数据平面功能分为 L4 层的安全覆盖层(由 ztunnel 提供)和 L7 层的策略处理层(由 waypoint proxy 提供)。

控制平面与数据平面

image
控制平面与数据平面
  • 定义:在 Ambient 模式中,控制平面(istiod)负责管理集群内 ztunnel 和 waypoint proxy 的配置和策略,而数据平面由 ztunnel 和 waypoint proxy 组成,负责处理实际的网络流量。
  • 组件交互:ztunnel 使用 xDS APIs 从 istiod 获取配置并执行策略,管理 Pod 之间的 L4 和 L7 流量。

Istio Control Plane (istiod)

  • 定义:Istio 的控制平面组件,负责与 ztunnel 和 waypoint proxy 通信,提供 xDS 接口用于动态配置。
  • 功能istiod 使用 xDS APIs 进行配置推送,动态管理 Ambient 模式中的流量策略、证书分发以及与 Kubernetes 集群的交互。

透明性与非侵入性

  • 定义:Ambient 模式的架构旨在减少对应用的侵入性,应用无需感知数据平面的存在,Pod 无需重启或注入 Sidecar 即可加入网格。
  • 优势:提高了服务网格的灵活性,降低了操作复杂度,使应用和基础设施的生命周期更加解耦。

Sidecar Proxy

image
Sidecar 模式
  • 定义:传统 Istio 中的 Envoy 代理,与应用容器共同部署在一个 Pod 中。
  • 问题:对应用具有侵入性,Sidecar 必须在 Pod 中注入并伴随应用运行,增加了资源开销,并且使应用与代理的生命周期耦合。

Ztunnel (Zero-Trust Tunnel)

image
ztunnel
  • 定义:Ambient 模式中的关键组件,部署为 DaemonSet,为每个节点提供 L4 层的零信任隧道。
  • 功能:
    • 安全:提供 mTLS 加密和基于 SPIFFE ID 的身份验证,确保节点和工作负载之间的安全通信。
    • 可观测性:收集 L4 层的 TCP 指标和日志。
    • 连接多路复用和均衡:在节点之间建立安全的流量隧道,以优化连接和网络性能。
    • 多租户架构:单个 ztunnel 可以代表同一节点上的多个工作负载进行 L4 数据平面功能处理,这与每个应用 Pod 拥有自己代理的 Sidecar 模式形成对比。
    • 证书管理:ztunnel 代表节点内的所有 Pod 从 Istio 控制平面 (istiod) 获取 mTLS 证书,并负责证书的管理和轮换。
  • 接口:
    • pistioinpistioout:用于与节点上的 istioinistioout 接口通过 GENEVE 隧道连接。

Waypoint Proxy

image
Waypoint Proxy
  • 定义:Ambient 模式中的 L7 层代理,部署在每个命名空间级别,用于处理 L7 层请求。
  • 功能:提供 L7 授权策略,如基于 HTTP headers 的访问控制、L7 级别的遥测等。Waypoint Proxy 只处理需要的 L7 代理流量,其他 L4 流量由 ztunnel 处理。

GENEVE 隧道 (Generic Network Virtualization Encapsulation)

image
GENEVE 协议组成
  • 定义:用于在 Kubernetes 节点之间建立虚拟隧道连接,将流量从节点上的 Pod 转发到 ztunnel。
  • 在 Ambient 模式中的应用:GENEVE 隧道用于连接节点上的虚拟网络接口(istioinistioout)与 ztunnel 内的接口(pistioinpistioout)。

HBONE (HTTP-Based Overlay Network Environment)

image
HBONE 数据包格式
  • 定义:Istio 特有的安全隧道协议,用于在 Ambient 模式组件之间传输数据。HBONE 是一种基于 HTTP/2 和 HTTP CONNECT 建立的安全 mTLS 加密通道。
  • 实现方式:通过 HTTP/2 进行多路复用,通过 HTTP CONNECT 建立隧道,并使用 mTLS 确保安全性。详见 Istio 文档

Istioin 和 Istioout 虚拟接口

image
Ambient 模式中两个位于两个不同节点上的 Pod 访问路径
  • 定义:由 Istio CNI 插件在每个节点上配置的两个虚拟接口,用于处理进入和离开节点的流量。
  • 功能istioin 处理进入节点的流量,istioout 处理离开节点的流量。两者通过 GENEVE 隧道连接到 ztunnel 中相应的接口。

iptables 和流量重定向

  • 定义:用于配置 Linux 内核中的流量规则,将来自 Ambient 工作负载的流量进行重定向和标记。
  • 在 Ambient 模式中的应用:Istio CNI 插件通过 iptables 规则,将流量标记并重定向到 istioinistioout,然后通过 GENEVE 隧道传递给 ztunnel。

流量拦截与重定向 (Traffic Redirection)

  • 定义:Ambient 模式中,ztunnel 负责透明拦截所有进出 “in-mesh” Pod 的流量并将其加密后重定向到其他节点上的目标 Pod,确保网络流量符合服务网格的安全策略。
  • 机制:通过 Istio CNI 插件安装的 iptables 规则或 eBPF 程序,ztunnel 能够透明地捕获工作负载的流量,并在不改变客户端应用的情况下进行安全代理。

流量路径分类

  • Out of Mesh:Pod 没有加入服务网格,流量不会被 Ambient 数据平面处理。
  • In Mesh:Pod 被纳入 Ambient 数据平面,L4 层的流量被 ztunnel 拦截和处理,提供 L4 授权和安全加密。
  • In Mesh, Waypoint Enabled:Pod 被纳入 Ambient 数据平面且启用了 waypoint proxy,L7 层的流量通过 waypoint 进行高级策略处理。

TPROXY

image
TPROXY 作为透明代理,客户端和服务端都对其无感知
  • 定义:Linux 内核功能,用于透明拦截和重定向网络流量。
  • 在 Ambient 模式中的应用:ztunnel 使用 TPROXY 来拦截和处理流量,保留原始源 IP 和端口信息,从而实现透明代理功能。

Mutual TLS (mTLS)

image
Istio 中的安全身份架构(以 Sidecar 模式为例)
  • 定义:一种双向 TLS 认证机制,确保通信双方的身份验证和数据加密。
  • 在 Ambient 模式中的应用:通过 ztunnel 和 waypoint proxy 确保工作负载之间的 mTLS 加密,实现零信任安全。

详见 如何理解 Istio 中的 MTLS 流量加密?

SPIFFE ID

image
SPIFFE ID 格式

Istio 服务网格中所有工作负载将根据其服务账户注册 SPIFFE 标准的服务身份格式:spiffe://<trust-domain>/ns/<namespace>/sa/<service-account>

  • 定义:用于标识工作负载的身份标识符,在服务网格中用于身份管理。
  • 在 Ambient 模式中的应用:SPIFFE ID 被用于对节点和工作负载进行身份验证,以确保网络通信的安全性。

详见 为什么 Istio 要使用 SPIRE 做身份认证?

eBPF (Extended Berkeley Packet Filter)

  • 定义:eBPF 是 Linux 内核中的一种技术,用于在内核空间中运行沙盒程序,实现网络数据包处理等功能。
  • 在 Ambient 模式中的应用:eBPF 可以替代传统的 iptables 和 GENEVE 隧道,用于流量重定向和管理。eBPF 更高效、复杂度更低且易于管理。
  • eBPF 程序:
    • 应用入站
    • 应用出站
    • Ztunnel 主机入站
    • Ztunnel 入站
  • 作用:Istio CNI 使用 eBPF 程序将它们挂载在特定的 TC 点,用于处理应用和 ztunnel 的网络流量。

Waypoint Proxy 的弹性扩展

image
Waypoing Proxy 作为 Deployment 部署在 Kubernetes 中
  • 定义:在 Ambient 模式中,waypoint proxy 可以根据流量需求动态扩展,而无需为每个工作负载实例部署独立代理。
  • 优势:通过动态扩展 waypoint proxy,可以降低基础设施成本并提高资源利用率。

Ztunnel 的弹性和故障恢复

  • 定义:ztunnel 部署为 DaemonSet,如果 ztunnel 容器失效,Kubernetes 会自动重新调度,以确保节点流量的继续处理。
  • 特点:使得故障的影响范围最小化,仅影响该节点上的工作负载。

IP Set 和 ztunnel-pods-ips

  • 定义:IP Set 是用于存储 IP 地址的工具,ztunnel-pods-ips 是每个节点上用于存储 Ambient 网格 Pod IP 的集合。
  • 在 Ambient 模式中的应用:Istio CNI 插件会将每个加入 Ambient 网格的 Pod IP 添加到 ztunnel-pods-ips 中,以确保这些 Pod 的流量可以被 iptables 规则识别和处理。

连接多路复用 (Connection Multiplexing)

  • 定义:在单个物理连接中传输多条逻辑连接的技术。
  • 在 Ambient 模式中的应用:ztunnel 实现了连接多路复用,使多个工作负载可以共享相同的连接,提升网络效率。

节点网络的虚拟接口对 (veth)

  • 定义:每个 Pod 在运行时会在节点上创建一个虚拟接口对,用于将 Pod 的网络连接到节点的网络。
  • 在 Ambient 模式中的应用:veth 接口用于将 Pod 的流量连接到节点的虚拟接口(如 istioinistioout),从而将流量引导至 ztunnel 进行处理。

Waypoint Proxy 的流量路径

image
Waypoint Proxy 的流量路径
  • 定义:Waypoint Proxy 只参与服务器端的流量路径,作为 L7 代理执行服务端的请求。
  • 应用场景:当部署了 Waypoint Proxy 时,来自同一服务账户的工作负载将通过 ztunnel 重定向至 Waypoint Proxy 进行处理,然后到达目标 Pod,确保 L7 级别的策略和认证得以执行。

Istio CNI (Container Network Interface)

  • 定义:Istio 的容器网络接口插件,用于在 Kubernetes 集群中自动配置流量拦截规则。
  • 功能:Istio CNI 负责为每个新创建或加入网格的 Pod 设置必要的网络重定向规则。它通过修改 iptables 规则或应用 eBPF 程序来确保所有流量能够被 ztunnel 或 waypoint proxy 拦截和处理,从而实现服务网格的透明流量管理。
  • Istio CNI Node Agent:Istio CNI Node Agent 负责在每个节点上安装 Istio CNI 插件,并更新节点的 CNI 配置,确保当 Pod 加入服务网格时能够正确地配置流量重定向规则。在 Sidecar 模式中,CNI 插件通过 iptables 配置 Pod 的网络。在 Ambient 模式中,CNI 插件负责将新的 Pod 事件推送到 Ambient 监控服务器,以便配置 Pod 的网络重定向规则。

总结

Istio Ambient 模式通过将数据平面功能分为 L4 和 L7 层的独立组件,为用户提供了更轻量且灵活的服务网格解决方案。这种方式不仅简化了服务的部署,还大幅降低了资源开销。通过术语表的方式,我们探讨了 Ambient 模式中的各种核心概念,从 ztunnel 到 waypoint proxy,再到 iptables 和 eBPF 的使用,帮助你全面了解 Istio Ambient 模式的架构和运行机制。如果你对服务网格感兴趣或正在考虑如何优化微服务通信,希望这篇文章对你有所帮助。

最后更新于 2025/02/13