土法炼钢兴趣小组的算法知识备份

跨云网络与联邦网络:从 VPC Peering 到 Network Fabric

目录

你的业务跑在 AWS 上,合规系统部署在私有云,新收购的团队用的是 Azure。三个 Kubernetes 集群各自运行良好,但当业务需要它们互相调用时,你发现了一个残酷的现实:集群之间的网络,完全不通。

跨云网络不是简单的”打通一条隧道”就能解决的问题。不同云厂商的 VPC 模型、CNI 实现、IP 地址分配策略都有本质差异。在这些差异之上,还要叠加 Service 发现、负载均衡、安全策略、故障切换等高层需求。这是一个从 L2 到 L7 的全栈挑战。

本文要做的事:

本文基于 Kubernetes 1.30, Cilium 1.16, Istio 1.22, Submariner 0.18。 云平台版本:AWS EKS 1.30, AKS 1.30, GKE 1.30 (Dataplane v2)。


一、跨云网络基础设施层

在讨论 Kubernetes 层面的联邦网络之前,必须先理解底层的云网络互联方式。所有跨云通信最终都要落到这一层。

VPC Peering:最简单的起点

VPC Peering 在两个 VPC 之间建立直连网络路径,流量不经过公网,延迟低、带宽高。

VPC A (10.1.0.0/16)  <---  VPC Peering  --->  VPC B (10.2.0.0/16)
      |                                              |
  Route Table:                                   Route Table:
  10.2.0.0/16 -> pcx-xxx                         10.1.0.0/16 -> pcx-xxx

核心特点:

# 创建 Peering 连接
aws ec2 create-vpc-peering-connection \
  --vpc-id vpc-aaaa1111 \
  --peer-vpc-id vpc-bbbb2222 \
  --peer-region us-west-2

# 接受请求并在两端添加路由
aws ec2 accept-vpc-peering-connection --vpc-peering-connection-id pcx-xxxx
aws ec2 create-route --route-table-id rtb-aaaa \
  --destination-cidr-block 10.2.0.0/16 --vpc-peering-connection-id pcx-xxxx
aws ec2 create-route --route-table-id rtb-bbbb \
  --destination-cidr-block 10.1.0.0/16 --vpc-peering-connection-id pcx-xxxx

VPC Peering 的局限在于不可传递性。N 个 VPC 需要 N*(N-1)/2 条 Peering,在多云场景下迅速变得不可管理。

Transit Gateway:Hub-and-Spoke 中心化

AWS Transit Gateway(TGW)和 Azure Virtual WAN 充当中心路由器,所有 VPC/VNET 只需连接到这个中心节点。

                    +---------------------+
                    |  Transit Gateway    |
                    |  (Hub Router)       |
                    +-----+----+----+----+
                          |    |    |
              +-----------+    |    +-----------+
              |                |                |
        VPC A (10.1.x)  VPC B (10.2.x)  VPC C (10.3.x)

TGW 的核心优势:

Cloud Interconnect / ExpressRoute / Direct Connect

对于生产级跨云互联,各云厂商都提供了专线接入方案:

云厂商 专线产品 带宽范围 延迟特性
AWS Direct Connect 1-100 Gbps 稳定低延迟
Azure ExpressRoute 50 Mbps-100 Gbps SLA 保障
GCP Cloud Interconnect 10-200 Gbps 99.99% SLA

跨云互联的典型拓扑是通过 Equinix 等 Colocation 数据中心将多条专线汇聚,由 BGP 承担核心路由交换职责,各云网络前缀通过 BGP 通告实现全网可达。

各云厂商网络特性差异

特性 AWS Azure GCP
网络基本单元 VPC VNET VPC
子网跨 AZ 不跨 不跨 跨 Region
默认 Pod 网络 VPC 内 ENI IP Overlay 或 VNET IP GKE Alias IP
路由表限制 50(可提升到 1000) 400 不限
Network Policy Calico / Cilium 插件 Azure NPM / Cilium Dataplane v2 (内置)
最大节点数/集群 5000 5000 15000
Pod CIDR 方式 ENI 二级 IP 节点子网分配 Alias IP Range

这些差异直接影响联邦网络设计。例如 AWS VPC CNI 的 Pod IP 是 VPC 可路由的,而 Azure CNI Overlay 的 Pod IP 在 VNET 外不可路由——跨云通信必须经过 NAT 或隧道。


二、云厂商 CNI 深度对比

CNI 实现的差异是跨云网络最大的挑战之一。每个云厂商的 CNI 都深度集成了自家的网络基础设施,Pod 的 IP 分配、路由逻辑、性能特征在不同云之间完全不同。

AWS VPC CNI:ENI 直接分配 Pod IP

AWS VPC CNI 直接从 VPC 子网中给每个 Pod 分配一个 ENI(Elastic Network Interface)二级 IP。

EC2 实例 (m5.xlarge)
├── ENI-0 (Primary)    : 10.1.1.100 (Node IP)
│   ├── Secondary IP   : 10.1.1.101 -> Pod A
│   ├── Secondary IP   : 10.1.1.102 -> Pod B
│   └── Secondary IP   : 10.1.1.103 -> Pod C
├── ENI-1 (附加)       : 10.1.1.110
│   ├── Secondary IP   : 10.1.1.111 -> Pod D
│   └── Secondary IP   : 10.1.1.112 -> Pod E
└── ENI-2 (附加)       : 10.1.1.120
    └── Secondary IP   : 10.1.1.121 -> Pod F

关键机制:

优势:Pod IP 是 VPC 原生可路由的——安全组可直接引用 Pod IP,VPC Flow Logs 能看到 Pod 级流量,跨 VPC Peering 无需 NAT。劣势:IP 消耗巨大,Pod 密度受限于 ENI/IP 限制。可通过 Prefix Delegation(每个 ENI slot 分配 /28 前缀)缓解 IP 消耗问题。

Azure CNI:Overlay vs Transparent

Azure 提供两种 CNI 模式。Transparent 模式:Pod 从 VNET 子网分配真实 IP,类似 AWS VPC CNI。Overlay 模式:Pod 使用独立的 Overlay 地址空间(如 100.64.0.0/10),节点间通过内核路由封装。

特性 Transparent Overlay
Pod IP 来源 VNET 子网 独立 Overlay CIDR
VNET 内可路由 否(需要 NAT)
IP 消耗 高(与 Pod 数成正比) 低(仅消耗节点 IP)
最大 Pod/节点 受子网大小限制 250(默认)
跨云通信 直接路由 需要网关/隧道
# 创建使用 Overlay CNI 的 AKS 集群
az aks create --resource-group myRG --name myAKS \
  --network-plugin azure --network-plugin-mode overlay \
  --pod-cidr 100.64.0.0/10 \
  --network-policy cilium --network-dataplane cilium

对于跨云场景,Overlay 模式的 Pod IP 在 VNET 之外不可路由,跨云通信必须经过 NAT 或通过 Submariner/Cilium ClusterMesh 建立隧道。

GKE Dataplane v2:基于 Cilium 的原生实现

GKE Dataplane v2 用 eBPF 替代了传统的 kube-proxy iptables/ipvs 转发,提供更高性能和可观测性。

GKE Node (Dataplane v2)
├── Cilium Agent (eBPF programs loaded into kernel)
├── Pod A: 10.4.0.5 (Alias IP from VPC)
├── Pod B: 10.4.0.6 (Alias IP)
└── eBPF Maps: CT, LB, Policy, Tunnel

核心特点:

跨云影响:Pod IP 通过 Alias IP 在 VPC 内可路由,但跨 VPC 需要 Peering;内置 Cilium 使 ClusterMesh 配置更自然;eBPF 策略可与多集群策略统一管理。

三大 CNI 对比总结

+------------------+-------------------+---------------------+-------------------+
|                  | AWS VPC CNI       | Azure CNI Overlay   | GKE Dataplane v2  |
+------------------+-------------------+---------------------+-------------------+
| IP 分配          | ENI Secondary IP  | Overlay CIDR        | Alias IP Range    |
| VPC/VNET 可路由  | 是                | 否                  | 是                |
| 数据面           | iptables/eBPF     | iptables/Cilium     | eBPF (Cilium)     |
| Pod 密度限制     | ENI/IP per 实例   | 250/节点            | Alias IP 范围     |
| IP 消耗          | 高                | 低                  | 中                |
| 跨云 NAT 需求    | 不需要            | 需要                | 不需要            |
| Network Policy   | 需要插件          | NPM/Cilium          | 内置              |
+------------------+-------------------+---------------------+-------------------+

三、联邦网络架构

有了底层网络互联和对各云 CNI 的理解,现在进入 Kubernetes 层面的联邦网络方案。核心问题是:让不同集群中的 Pod 能够像在同一个集群中一样通信和发现彼此。

Submariner:跨云隧道网关

Submariner 是 CNCF 沙箱项目,在每个集群中选定 Gateway 节点,通过 IPSec 或 WireGuard 隧道连接各集群。

Cluster A (AWS)                      Cluster B (Azure)
+-------------------+                +-------------------+
| Pod 10.1.2.10     |                | Pod 100.64.0.5    |
| Route Engine      |                | Route Engine      |
| Gateway Node      |----IPSec------>| Gateway Node      |
+-------------------+                +-------------------+
        |                                    |
    Broker (集中式服务发现)

Submariner 的组件:

# 部署 Broker 并将各集群加入
subctl deploy-broker --kubeconfig broker-kubeconfig
subctl join --kubeconfig aws-kubeconfig broker-info.subm \
  --clusterid cluster-aws --cable-driver libreswan
subctl join --kubeconfig azure-kubeconfig broker-info.subm \
  --clusterid cluster-azure --cable-driver libreswan

跨集群 Service Discovery:

# 在 AWS 集群中导出 Service
apiVersion: multicluster.x-k8s.io/v1alpha1
kind: ServiceExport
metadata:
  name: payment-api
  namespace: production
---
# Azure 集群中 Lighthouse DNS 自动解析:
# payment-api.production.svc.clusterset.local -> AWS 的 payment-api ClusterIP
# 流量通过 Submariner 隧道到达 AWS

Globalnet 处理 CIDR 重叠:当两个集群的 Pod/Service CIDR 相同时,为每个集群分配 Global CIDR(如 242.0.0.0/16 和 242.1.0.0/16),在隧道两端做 SNAT/DNAT。

Cilium ClusterMesh:跨 VPC 的 eBPF 互联

Cilium ClusterMesh 不依赖独立 Gateway 节点,而是让所有节点的 Cilium Agent 直接共享跨集群状态。

Cluster A (AWS)                      Cluster B (GKE)
+-------------------+                +-------------------+
| Cilium Agent      |                | Cilium Agent      |
| Local etcd -------+--- sync -------+-- Local etcd      |
| eBPF Datapath     |<-- direct ---->| eBPF Datapath     |
+-------------------+                +-------------------+

核心机制:

# 启用 ClusterMesh 并连接两个集群
cilium clustermesh enable --context aws-cluster
cilium clustermesh enable --context gke-cluster
cilium clustermesh connect --context aws-cluster \
  --destination-context gke-cluster
# 全局 Service 配置
apiVersion: v1
kind: Service
metadata:
  name: order-service
  namespace: production
  annotations:
    service.cilium.io/global: "true"
    service.cilium.io/shared: "true"
spec:
  selector:
    app: order-service
  ports:
  - port: 8080
    targetPort: 8080

ClusterMesh 优势:无中心 Gateway 瓶颈、统一 Network Policy、eBPF 高性能、Identity-based 安全。限制:Pod CIDR 不能重叠(无 Globalnet)、所有集群必须用 Cilium、底层需节点间可达。

Istio Multi-Primary / Multi-Network

Istio 在 L7 层面解决跨集群通信,不直接处理 L3/L4 互联,而是通过 East-West Gateway 在 Service Mesh 层面桥接不同网络。

两个关键维度:控制面拓扑(Primary-Remote 或 Multi-Primary)和网络拓扑(Single-Network 或 Multi-Network)。跨云场景最适合 Multi-Primary + Multi-Network

AWS Cluster                              Azure Cluster
+----------------------------+           +----------------------------+
| istiod (Primary)           |           | istiod (Primary)           |
| Root CA: shared            |           | Root CA: shared            |
| Pod A -> Envoy Sidecar     |           | Pod D -> Envoy Sidecar     |
| East-West Gateway (LB)  --+--> mTLS --+--> East-West Gateway (LB)  |
+----------------------------+           +----------------------------+

安装要点:

# 1. 生成共享 Root CA 和各集群中间 CA
make -f tools/certs/Makefile.selfsigned.mk root-ca
make -f tools/certs/Makefile.selfsigned.mk cluster-aws-cacerts
make -f tools/certs/Makefile.selfsigned.mk cluster-azure-cacerts

# 2. 各集群创建 CA Secret
kubectl create secret generic cacerts -n istio-system --context aws-cluster \
  --from-file=cluster-aws/ca-cert.pem --from-file=cluster-aws/ca-key.pem \
  --from-file=cluster-aws/root-cert.pem --from-file=cluster-aws/cert-chain.pem

# 3. 安装 Istio(各集群指定 meshID, clusterName, network 和 East-West Gateway)
istioctl install --context aws-cluster -f aws-istio.yaml

# 4. 暴露服务并交换 Remote Secret
kubectl apply --context aws-cluster -f samples/multicluster/expose-services.yaml
istioctl create-remote-secret --context aws-cluster \
  --name cluster-aws | kubectl apply --context azure-cluster -f -
istioctl create-remote-secret --context azure-cluster \
  --name cluster-azure | kubectl apply --context aws-cluster -f -

四、Service Mesh 在多云中的角色

联邦网络解决了”能不能通”的问题,Service Mesh 解决的是”怎么通得好”。在多云环境中提供三个关键能力。

统一流量管理

不同云上的服务可能有不同的版本、容量、健康状态。Service Mesh 提供统一的流量管理抽象:

# 跨云流量分配:80% AWS,20% Azure
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: payment-service
  namespace: production
spec:
  hosts:
  - payment-service.production.svc.cluster.local
  http:
  - route:
    - destination:
        host: payment-service.production.svc.cluster.local
        subset: aws
      weight: 80
    - destination:
        host: payment-service.production.svc.cluster.local
        subset: azure
      weight: 20
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: payment-service
  namespace: production
spec:
  host: payment-service.production.svc.cluster.local
  trafficPolicy:
    outlierDetection:
      consecutive5xxErrors: 3
      interval: 30s
      baseEjectionTime: 60s
  subsets:
  - name: aws
    labels:
      topology.istio.io/cluster: cluster-aws
  - name: azure
    labels:
      topology.istio.io/cluster: cluster-azure

当某个 Region 故障时,可通过 kubectl patch virtualservice 在几秒内将全部流量切到另一个云。

跨云 mTLS 身份

Istio 通过 SPIFFE 为每个工作负载提供统一加密身份:

spiffe://cluster.local/ns/<namespace>/sa/<service-account>

只要两个集群共享同一 Root CA,SPIFFE 身份就互信,所有跨云通信通过 mTLS 加密和认证:

# 零信任策略:只允许 order-service 调用 payment-api
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: payment-api-policy
  namespace: production
spec:
  selector:
    matchLabels:
      app: payment-api
  action: ALLOW
  rules:
  - from:
    - source:
        principals:
        - "cluster.local/ns/production/sa/order-service"
    to:
    - operation:
        methods: ["POST"]
        paths: ["/api/v1/payments/*"]

无论 order-service 跑在 AWS 还是 Azure,只要 SPIFFE 身份匹配即可访问,不需要维护 IP 白名单。

地理感知路由

Istio 的 Locality-Aware Routing 优先选择地理上最近的后端,避免不必要的跨区域调用:

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: user-service
  namespace: production
spec:
  host: user-service.production.svc.cluster.local
  trafficPolicy:
    outlierDetection:
      consecutive5xxErrors: 3
      interval: 10s
    loadBalancer:
      localityLbSetting:
        enabled: true
        distribute:
        - from: "us-east-1/*"
          to:
            "us-east-1/*": 80
            "eastus/*": 15
            "on-prem/*": 5
        failover:
        - from: us-east-1
          to: eastus
        - from: eastus
          to: us-east-1

来自 AWS 的请求 80% 发到本地,15% 到 Azure,5% 到私有云。如果本地后端全部不健康,自动 Failover 到对端。


五、案例研究:三云联邦网络设计

把所有知识整合起来,设计一个完整的三云 K8s 联邦网络。

跨云联邦网络架构图

架构需求

假设你是一家金融科技公司的平台架构师:

网络规划

第一步确保 CIDR 不重叠:

AWS (EKS):
  VPC/Pod CIDR:   10.1.0.0/16  (VPC CNI, Pod IP = VPC IP)
  Service CIDR:   172.20.0.0/16

Azure (AKS):
  VNET CIDR:      10.2.0.0/16
  Pod CIDR:       100.64.0.0/16  (Azure CNI Overlay)
  Service CIDR:   172.21.0.0/16

私有云 (kubeadm):
  DC Network:     10.3.0.0/16
  Pod CIDR:       10.3.128.0/17  (Cilium native routing)
  Service CIDR:   172.22.0.0/16

基础设施互联层

AWS <-> Azure:   ExpressRoute + Direct Connect (Equinix IX), 10 Gbps, ~5ms
AWS <-> 私有云:  Direct Connect + MPLS, 1 Gbps, ~30ms
Azure <-> 私有云: ExpressRoute + MPLS, 1 Gbps, ~35ms
备用: 各对之间 IPSec VPN 提供冗余

BGP 路由:AWS TGW(AS 64512)宣告 10.1.0.0/16,Azure Route Server(AS 64513)宣告 10.2.0.0/16,私有云路由器(AS 64514)宣告 10.3.0.0/16。

Kubernetes 联邦网络层

采用 Cilium ClusterMesh + Istio Multi-Primary 组合:

选择理由:三个集群都可使用 Cilium CNI;底层已通过专线互通,无需 Submariner 隧道层;Cilium eBPF 数据面性能优于 IPSec。若无专线互通(只能走公网),则 Submariner 的 IPSec 隧道是更好选择。

实施步骤

# Step 1: 三集群安装 Cilium(统一版本)
cilium install --context aws-cluster \
  --set cluster.name=cluster-aws --set cluster.id=1 \
  --set ipam.mode=eni --set tunnel=disabled --set routingMode=native

cilium install --context azure-cluster \
  --set cluster.name=cluster-azure --set cluster.id=2 \
  --set ipam.mode=azure --set tunnel=vxlan

cilium install --context onprem-cluster \
  --set cluster.name=cluster-onprem --set cluster.id=3 \
  --set ipam.mode=cluster-pool \
  --set ipam.operator.clusterPoolIPv4PodCIDRList=10.3.128.0/17 \
  --set tunnel=disabled --set routingMode=native

# Step 2: 启用 ClusterMesh 并建立三对连接
cilium clustermesh enable --context aws-cluster --service-type LoadBalancer
cilium clustermesh enable --context azure-cluster --service-type LoadBalancer
cilium clustermesh enable --context onprem-cluster --service-type NodePort
cilium clustermesh connect --context aws-cluster --destination-context azure-cluster
cilium clustermesh connect --context aws-cluster --destination-context onprem-cluster
cilium clustermesh connect --context azure-cluster --destination-context onprem-cluster

# Step 3: 安装 Istio Multi-Primary Multi-Network
# 生成共享 Root CA,各集群安装 Istio 并配置 East-West Gateway,交换 Remote Secret
# 详见第三节 Istio 安装步骤

故障域与容灾

故障级别          影响范围              恢复策略
─────────────────────────────────────────────────────────────
单 Pod/节点故障   服务实例/节点 Pod     K8s 自动重启/重调度
单 AZ 故障        该 AZ 所有节点        跨 AZ 调度 + Service 摘除
单集群故障        整个云的服务          Istio 流量切换到其他云
专线故障          两云直连              BGP 切换到备用 VPN
# Istio 自动 Failover
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: critical-service
  namespace: production
spec:
  host: critical-service.production.svc.cluster.local
  trafficPolicy:
    outlierDetection:
      consecutive5xxErrors: 2
      interval: 10s
      baseEjectionTime: 30s
      maxEjectionPercent: 100
    loadBalancer:
      localityLbSetting:
        enabled: true
        failover:
        - from: us-east-1
          to: eastus
        - from: eastus
          to: us-east-1
        - from: on-prem
          to: us-east-1

六、性能与安全考量

跨云延迟优化

延迟分解 (AWS us-east-1 -> Azure East US):
基础网络 (Direct Connect):  ~2-5 ms
IPSec/VXLAN 封装:           ~0.5-1 ms
Envoy Sidecar (两端):       ~1-2 ms
mTLS 握手 (首次):           ~2-5 ms (后续连接复用)
East-West Gateway:          ~0.5-1 ms
总计: ~6-14 ms (首次), ~4-9 ms (后续)

优化策略:启用 HTTP/2 连接复用减少 mTLS 握手开销;使用 Cilium WireGuard 加密替代 IPSec(更低 CPU 开销);通过 Locality-Aware Routing 减少跨云调用。

统一安全策略

多云安全需要多层协同:L3/L4(Cilium Network Policy)做端口级访问控制和 Identity-based 策略;L7(Istio AuthorizationPolicy)做 HTTP 方法/路径控制和 JWT 验证;基础设施层(安全组/NSG)做节点隔离和 Gateway 端口规则。

# Cilium L3/L4 + L7 策略:限制跨云通信到指定端口和路径
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: restrict-cross-cloud
  namespace: production
spec:
  endpointSelector:
    matchLabels:
      app: payment-api
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: order-service
        io.cilium.k8s.policy.cluster: cluster-azure
    toPorts:
    - ports:
      - port: "8080"
        protocol: TCP
      rules:
        http:
        - method: POST
          path: "/api/v1/payments"

七、可观测性:跨云的统一视图

跨云环境的可观测性是被低估的挑战。当请求从 AWS 经 Azure 到达私有云时,需要端到端的追踪能力。

分布式追踪

Istio 自动为经过 Envoy 的请求注入追踪 Header。结合 OpenTelemetry Collector 将三个云的追踪数据汇聚到统一后端:

# OTel Collector 配置(各集群部署,添加 cloud.provider 和 cluster.name 属性)
apiVersion: v1
kind: ConfigMap
metadata:
  name: otel-collector-config
data:
  config.yaml: |
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317
    processors:
      batch:
        timeout: 5s
      attributes:
        actions:
        - key: cloud.provider
          value: "aws"
          action: upsert
        - key: k8s.cluster.name
          value: "cluster-aws"
          action: upsert
    exporters:
      otlp:
        endpoint: "tempo.observability.svc:4317"
    service:
      pipelines:
        traces:
          receivers: [otlp]
          processors: [batch, attributes]
          exporters: [otlp]

统一指标

使用 Prometheus Federation 或 Thanos 聚合三个集群的指标:

# 跨云延迟 PromQL
istio_request_duration_milliseconds_bucket{
  source_cluster="cluster-aws",
  destination_cluster="cluster-azure"
}

# 跨云错误率
sum(rate(istio_requests_total{response_code=~"5.."}[5m])) by (source_cluster, destination_cluster)
/ sum(rate(istio_requests_total[5m])) by (source_cluster, destination_cluster)

八、常见陷阱与最佳实践

CIDR 规划不当

这是跨云网络中最常见的错误。一旦集群部署完成,Pod CIDR 几乎不可能修改。在项目初期就规划全局地址空间:10.0.0.0/8 内按 /16 分段分配各集群,172.16.0.0/12 内按 /16 给 Service CIDR。

DNS 解析链路

跨集群 DNS 解析容易出问题。确保 CoreDNS 配置了正确的转发规则:

# CoreDNS:将 clusterset.local 查询转发到 Lighthouse DNS
apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          fallthrough in-addr.arpa ip6.arpa
        }
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
    }
    clusterset.local:53 {
        forward . 10.96.0.100
    }

MTU 不一致

不同云的 MTU 不同(AWS 9001 Jumbo Frame,Azure 1500),叠加隧道封装后进一步缩小(IPSec -50,VXLAN -50,WireGuard -60)。建议统一设置 Pod MTU 为各链路最小值:

cilium install --set mtu=1400

关于 MTU 调优的更多细节,参见 MTU 调优


九、方案选型决策树

面对这么多方案,如何选择?

Q1: 所有集群在同一云厂商内? -> 是: 云原生方案 | 否: Q2
Q2: 底层网络已互通? -> 否: Submariner(自带 IPSec/WireGuard 隧道) | 是: Q3
Q3: 所有集群可用 Cilium? -> 是: Cilium ClusterMesh | 否: Q4
Q4: 需要 L7 流量管理? -> 是: Istio Multi-Primary Multi-Network | 否: Submariner + Lighthouse

推荐组合:
  生产级多云: Cilium ClusterMesh (L3/L4) + Istio (L7)
  快速验证:   Submariner(全栈方案,部署简单)
  单云多集群: 云原生方案 + Service Mesh

十、总结

跨云网络不是一个可以”一键解决”的问题。它需要在基础设施层、CNI 层、联邦网络层、Service Mesh 层逐层构建,每一层都有自己的权衡。

回顾核心要点:

多集群网络一文中,我们讨论了同一云内的多集群互联。本文将视野扩展到了跨云场景,这是 Kubernetes 网络领域最复杂的挑战之一。

下一步,你可以从一个 Submariner 的两集群 PoC 开始,验证基本的跨集群连通性,然后逐步引入 Cilium ClusterMesh 和 Istio,构建生产级的多云联邦网络。


参考资料:


By .