K8s 生产实录:多集群跨地域网络容灾(Submariner 与跨云 IPsec 隧道互联)
K8s 生产实录多集群跨地域网络容灾Submariner 与跨云 IPsec 隧道互联在企业级大型微服务与金融级容灾架构向“多云、多地域、混合云Multi-Region Multi-Cloud”演进的过程中跨集群通信面临着一个长期困扰网络团队的架构痛点集群 A 部署在上海阿里云机房集群 B 部署在法兰克福 AWS 机房如果集群 A 中的订单 Pod 想要调用集群 B 中的支付微服务传统的做法是必须先通过公网暴露 Ingress / LoadBalancer 网关再经过公网 DNS 解析、SSL 握手与多次反向代理这种方案不仅引入了两次额外的网络网关中转与 50ms 以上的附加时延更将核心内部 RPC 暴露在了公网上带来了巨大的网络安全攻防隐患原生 Kubernetes 的 Pod IP 属于各集群内部私网在不同集群之间默认完全不可路由。CNCF 官方沙箱开源项目Submariner彻底打破了多集群网络隔离的壁垒。它通过在各集群边缘网关节点自动建立基于IPsec / WireGuard 的硬件级高性能加密互联隧道并结合Lighthouse 去中心化跨集群 DNS 发现服务实现了**“跨云、跨地域多集群 Pod 原生 IP 级安全直连Pod-to-Pod Pod-to-Service Direct Routing应用代码 0 修改无感享受同城双活与跨国容灾”**。传统公网 Ingress 多重中转 vs Submariner 跨集群加密隧道直连拓扑【方案 A: 传统公网网关中转 (多次反向代理 延迟高)】 Cluster A (上海) ──► Ingress ──► [跨洋公网 DNS] ──► AWS LB 网关 ──► Ingress ──► Cluster B (法兰克福) 两次网关中转网络时延增加 65ms且内部 RPC 接口暴露公网! ❌ 【方案 B: Submariner 跨集群 IPsec 隧道直连 (Pod 原生 IP 秒级直达)】 ┌──────────────────────────────┐ ┌──────────────────────────────┐ │ 【Cluster A (上海本地机房)】 │ │ 【Cluster B (海外公有云)】 │ │ - Pod A (IP: 10.244.1.15) │ │ - Pod B (IP: 10.245.2.88) │ │ │ │ │ ▲ │ │ ▼ │ │ │ │ │ 【Submariner Gateway Node】 │◄════════════►│ 【Submariner Gateway Node】 │ │ - 网关维护 IPsec 加密隧道 │ (跨云安全专线)│ - 网关维护 IPsec 加密隧道 │ └──────────────────────────────┘ └──────────────────────────────┘ Pod A 直接 curl http://10.245.2.88:8080 (原生 IP 级直连0 网关中转损耗!) 跨集群 DNS 自动解析: curl payment.ns-prod.supercluster.local 毫秒级寻址!核心步骤一使用subctl部署并初始化 Submariner Broker 控制中枢在主集群中部署轻量化状态同步 Broker# 1. 在上海主集群安装 subctl 并初始化 Broker subctl deploy-broker --kubeconfig kubeconfig-cluster-shanghai # 2. 获取 Broker 接入凭证文件 submariner-mode-info.subm核心步骤二将各机房多集群无缝接入互联隧道将海外或跨云的从集群一键接入并指定 IPsec 加密模式与网关节点# 1. 接入上海集群 A subctl join submariner-mode-info.subm \ --kubeconfig kubeconfig-cluster-shanghai \ --clusterid cluster-shanghai \ --cable-driver libreswan \ # 使用 IPsec 强加密驱动 (亦可选用 WireGuard) --natttrue # 2. 接入法兰克福集群 B (确保 Pod CIDR 与 Service CIDR 不发生物理冲突) subctl join submariner-mode-info.subm \ --kubeconfig kubeconfig-cluster-frankfurt \ --clusterid cluster-frankfurt \ --cable-driver libreswan \ --natttrue核心配置三导出跨集群服务并实现全局智能发现Lighthouse通过subctl export将需要跨地域容灾的微服务声明为全集群可见的“超超级服务Supercluster Service”# 导出支付微服务为全局多集群共享服务 subctl export service payment-service -n ns-payment --kubeconfig kubeconfig-cluster-frankfurt此时Lighthouse 会在全集群 CoreDNS 中自动注入全局多集群域名# 在上海集群 A 的任意 Pod 中直接通过该域名访问法兰克福集群 B 的支付服务 apiVersion: apps/v1 kind: Deployment metadata: name: order-bff namespace: ns-prod spec: template: spec: containers: - name: bff image: registry.internal.net/fe/order-bff:v3.0 env: # 直接使用跨集群标准 DNS 寻址 - name: PAYMENT_SERVICE_URL value: http://payment-service.ns-payment.svc.supercluster.local:8080跨地域连通性与加密吞吐实测大盘在两个跨地域集群之间运行subctl benchmark进行性能压测# 执行跨集群端到端带宽与延迟基准评测 subctl benchmark throughput --kubeconfig kubeconfig-cluster-shanghai --to-kubeconfig kubeconfig-cluster-frankfurt跨集群网络方案端到端单向延迟 (RTT)单连接最大网络吞吐量是否暴露公网端口传统公网 Ingress 反向代理245 ms120 Mbps (受限于网关反代)是 (存在公网被攻击面)Submariner (IPsec 隧道直连)182 ms (削减 63ms)890 Mbps (线速直达)否 (100% 内部私网加密)生产落地收益跨地域微服务调用延迟降低 25%彻底消除多层反向代理与 Ingress 网关中转网络数据包在内核层直接通过 IPsec 隧道极速封包直达。100% 内部私网安全防护所有的跨集群通信全部强制运行在 AES-GCM-256 高强度 IPsec 加密隧道中公网黑客无法截获或嗅探任何业务明文。实现无感跨地域同城双活与故障转移结合 Lighthouse 的多集群 DNS 负载均衡当上海本地的支付 Pod 宕机时流量在3 秒内自动由法兰克福的备用 Pod 平滑接管业务 100% 零中断。