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 网络边界与跨集群通信的基本要求
无论采用单一网络还是多网络模型,跨集群通信都必须满足以下四个基本要求,否则控制平面无法正常工作,数据平面流量也会中断。
- 控制平面互通:每个集群的 Istiod 必须能够通过 East-West 通道(通常使用端口 15012)交换服务发现信息和证书签名请求。这是多集群服务网格的基石。
- 工作负载证书信任:所有集群必须共享同一个根 CA 或建立交叉信任链。Istio 通过中间 CA 机制,确保跨集群的 mTLS 连接可以被验证。
- 服务发现统一:每个集群的 Istiod 必须能够获取所有集群中的 Service 和 Endpoint 信息。这通常通过
MeshNetworks配置或ServiceEntry的自动生成来实现。 - 流量可达性:数据平面必须有一条路径将请求从源集群的 Sidecar 或网关送达目标集群的 Pod。在单一网络中,这是直接的 IP 路由;在多网络中,这是通过网关的隧道或 SNAT 转发。
设计建议:在规划多集群网络时,优先评估 Pod CIDR 是否重叠。如果 CIDR 不重叠且网络直连,优先选择单一网络模型以降低复杂度和延迟。如果 CIDR 重叠或网络隔离,则必须采用多网络模型并部署东西向网关。
3.4 网络模型对比总结
| 对比维度 | 单一网络模型 | 多网络模型 |
|---|---|---|
| Pod IP 全局唯一性 | 是 | 否(可能重叠) |
| 跨集群通信路径 | Pod IP 直连 | 通过东西向网关转发 |
| 网关需求 | 仅控制平面通道 | 需要数据平面网关 |
| 配置复杂度 | 低 | 高(需管理 Gateway/ServiceEntry) |
| 延迟 | 低(无额外跳数) | 中(增加网关跳数) |
| 典型场景 | 同一 VPC 内多集群 | 跨云、跨地域、防火墙隔离 |
3.5 网络模型选择决策流程
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。