跳至主要内容

05 · 南北向入口 — MetalLB + Gateway API

外部流量進入應用程式 RKE2 叢集 · 無雲端 LB、無 NodePort · 請求拓樸 + 流程。 · 互動原版 ↗

外部網路架構APP RKE2 · 閘道節點APP RKE2 · 後端外部用戶端https://app.corp.exampleDNS → VIP 10.10.30.2011解析並路由至 VIPToR leaf 配對 · MLAGVIP ECMP 路由 · 經 BGP2由客體 VLAN 300 轉送BGP session — speaker 宣告 VIP /32APP-WORKER VM · 任一節點皆可承載作用中的閘道網卡 · VLAN 300MetalLB speaker持有 VIP 10.10.30.201Service type LoadBalancer3Gateway pod · EnvoyTLS 終止 · HTTPRoutehost + path → backendRef4Gateway · GatewayClass envoy5CNI 疊加網路 10.42/16後端 SERVICE → ENDPOINTSHTTPRoute backendRefClusterIP · 不直接對外應用程式 pod · worker-1應用程式 pod · worker-2應用程式 pod · worker-36回應經同一 VIP 返回 — 對稱路徑

流程

  1. DNS。 用戶端將 app.corp.example 解析為 MetalLB VIP,對 10.10.30.201:443 送出 TLS SYN。
  2. 網路架構。 ToR 透過 BGP(或 L2 模式的 ARP)持有 VIP /32,轉送至閘道節點在客體 VLAN 300 上的網卡。
  3. MetalLB。 節點接受 LoadBalancer Service 的流量,交給 Gateway(Envoy)pod。
  4. Gateway API。 Envoy 終止 TLS,比對 listener + HTTPRoute(host/path/header),套用政策。
  5. 後端。 請求經 CNI 疊加網路轉送至後端 Service 的就緒 endpoint。
  6. 返回。 回應經同一 VIP 離開;容錯移轉:BGP 撤回路由 / 另一個 speaker 在數秒內接手。

Pod 分散於各 worker VM(topology spread)— 閘道在所有就緒 endpoint 之間負載平衡。後端維持 ClusterIP,絕不直接對外。

設計備註

MetalLB 位址池

每個客體 VLAN 一個專屬 IPAddressPool(例如 10.10.30.200–250)。BGP 模式與 ToR 配對建立 peering 以取得 ECMP + 快速容錯移轉;L2 模式是簡單的備援方案。

Gateway API 取代 Ingress

每叢集一個共用 Gateway(Service type LoadBalancer → MetalLB);各團隊在自己的 namespace 掛上 HTTPRoute — 內建角色分離。

範圍

僅在應用程式 RKE2 叢集內運作。Harvester/儲存叢集的 API 維持 kube-vip VIP;Ceph VLAN 210/211 絕不經由閘道對外暴露。