3. 多集群网络模型

在 Istio 多集群部署中,网络模型的选择直接决定了服务发现、流量路由、证书分发以及网关配置的复杂度。Istio 官方将多集群网络模型归纳为两种基本类型:单一网络模型(Single Network)和多网络模型(Multiple Networks)。理解这两种模型的差异以及网络边界的处理方式,是设计多集群控制平面资源模型的前提。

3.1 单一网络模型(Single Network)

单一网络模型假设所有集群中的 Pod 之间可以直接通过 Pod IP 进行通信,无需经过任何网关或隧道。这意味着集群之间的网络是扁平化的,通常通过 VPN、VPC Peering、Cilium Cluster Mesh 或底层网络基础设施实现。

核心特征:所有工作负载实例(Pod)的 IP 地址在全局范围内唯一且可达,无需中间代理即可跨集群通信。

3.1.1 适用场景与条件

  • 所有集群位于同一 VPC 或通过高速专线互联。
  • Pod CIDR 不重叠,且路由表已正确配置。
  • 安全策略允许跨集群的 Pod IP 直接访问。
  • 对延迟敏感,希望避免额外的网关封装开销。

3.1.2 资源模型影响

资源维度 单一网络模型下的行为
ServiceEntry 无需为跨集群服务创建额外的 ServiceEntry,因为 Pod IP 直接可达。
Sidecar 配置 Sidecar 可以直接将流量转发到目标 Pod IP,无需经过 egress 网关。
证书分发 使用共享的根 CA,通过控制平面之间的 East-West 通道分发工作负载证书。
网关需求 不需要跨集群的 ingress/egress 网关,仅需控制平面之间的通信通道。

3.2 多网络模型(Multiple Networks)

多网络模型适用于集群之间网络不直接可达的场景,例如集群位于不同的云厂商、不同的地域,或者企业防火墙隔离了直接的 Pod IP 通信。在此模型下,跨集群流量必须经过专用的东西向网关(East-West Gateway)进行转发。

关键约束:在多网络模型中,Pod IP 在集群内部唯一,但在全局范围内可能重叠。因此,流量必须通过网关进行 SNAT/DNAT 或 IP 封装,以确保路由正确。

3.2.1 东西向网关的角色

  • 流量入口:接收来自其他集群的请求,并根据目标 Service 将流量转发到本集群内的 Pod。
  • 流量出口:将本集群的请求封装后发送到目标集群的网关。
  • TLS 终止与发起:在网关之间建立 mTLS 连接,确保跨集群通信的加密和身份认证。

3.2.2 资源模型影响

资源维度 多网络模型下的行为
ServiceEntry 必须为每个远程集群的服务创建 ServiceEntry,地址指向远程集群的网关 IP。
Gateway & VirtualService 需要配置东西向 Gateway 和对应的 VirtualService,定义跨集群路由规则。
Sidecar 配置 Sidecar 将跨集群流量发送到本集群的 egress 网关,而非直接发送到目标 Pod IP。
网络开销 增加一次额外的网关转发和可能的 TLS 封装/解封装,延迟和吞吐量受网关性能影响。

3.3 网络边界与跨集群通信的基本要求

无论采用单一网络还是多网络模型,跨集群通信都必须满足以下四个基本要求,否则控制平面无法正常工作,数据平面流量也会中断。

  1. 控制平面互通:每个集群的 Istiod 必须能够通过 East-West 通道(通常使用端口 15012)交换服务发现信息和证书签名请求。这是多集群服务网格的基石。
  2. 工作负载证书信任:所有集群必须共享同一个根 CA 或建立交叉信任链。Istio 通过中间 CA 机制,确保跨集群的 mTLS 连接可以被验证。
  3. 服务发现统一:每个集群的 Istiod 必须能够获取所有集群中的 Service 和 Endpoint 信息。这通常通过 MeshNetworks 配置或 ServiceEntry 的自动生成来实现。
  4. 流量可达性:数据平面必须有一条路径将请求从源集群的 Sidecar 或网关送达目标集群的 Pod。在单一网络中,这是直接的 IP 路由;在多网络中,这是通过网关的隧道或 SNAT 转发。
设计建议:在规划多集群网络时,优先评估 Pod CIDR 是否重叠。如果 CIDR 不重叠且网络直连,优先选择单一网络模型以降低复杂度和延迟。如果 CIDR 重叠或网络隔离,则必须采用多网络模型并部署东西向网关。

3.4 网络模型对比总结

对比维度 单一网络模型 多网络模型
Pod IP 全局唯一性 是 否(可能重叠)
跨集群通信路径 Pod IP 直连 通过东西向网关转发
网关需求 仅控制平面通道 需要数据平面网关
配置复杂度 低 高(需管理 Gateway/ServiceEntry)
延迟 低(无额外跳数) 中(增加网关跳数)
典型场景 同一 VPC 内多集群 跨云、跨地域、防火墙隔离

3.5 网络模型选择决策流程

多集群网络模型选择决策流程 评估网络连通性 Pod CIDR 是否重叠? 否 是 单一网络模型 Pod IP 直连 多网络模型 需东西向网关 配置控制平面通道 (端口 15012) 部署东西向 Gateway 配置 ServiceEntry 验证跨集群 mTLS 通信 使用 tcpdump / istioctl proxy-status

3.6 跨集群通信的配置示例

以下是一个多网络模型下的典型配置片段,展示了如何通过 ServiceEntry 将远程集群的服务暴露给本地集群。

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: remote-cluster-service
spec:
  hosts:
  - my-service.remote-cluster.global
  location: MESH_INTERNAL
  ports:
  - number: 8080
    name: http
    protocol: HTTP
  resolution: DNS
  endpoints:
  # 指向远程集群的东西向网关 IP
  - address: 192.168.10.100
    ports:
      http: 15443  # 东西向网关的标准端口
    labels:
      cluster: remote-cluster
关键点:在多网络模型中,ServiceEntry 的 endpoints 地址必须设置为远程集群东西向网关的 IP,而非目标 Pod 的 IP。网关负责将流量进一步转发到实际的 Pod。