在瞭解MCI(Multi-Cluster Ingress) 以前,咱們先看看什麼是Single Cluster Ingress。git
Ingress是現有的各類負載均衡器的Kubernetes抽象。例如,有本地負載平衡器,Amazon ELB / ALB,Google Cloud Platform負載平衡器,Digital Ocean負載平衡器,此列表不勝枚舉。用戶只需編寫一個Ingress規範,而後由IngressController負責配置負載均衡器。配置後,將爲用戶提供一個IP地址,能夠在其中訪問其服務。編程
MCI與SCI相同的原理;可是,結果負載均衡器配置爲將traffc路由到多個Kubernetes集羣上的服務。此負載均衡器的建立仍由單個ingress規範驅動,而且仍會爲客戶端使用生成單個IP地址。 後端
MCI,也能夠叫作Global Ingress。網絡
須要MCI的理由不少,可是最重要的是如下幾點:架構
實現的方案有不少種,咱們簡單介紹幾種方案。負載均衡
Ingress for Anthos 是在外部 HTTP(S) 負載平衡的架構基礎上構建的。HTTP(S) 負載平衡是一個全球分佈式負載平衡器,全球 100 多個 Google 接入點 (PoP) 都部署了其代理。這些代理位於 Google 網絡的邊緣,靠近客戶端。負載平衡器 VIP 以任播 IP 地址的形式通告。來自客戶端的請求會被冷土豆式路由到 Google PoP,這意味着互聯網流量會流向最近的 PoP,並儘快到達 Google 骨幹網絡。分佈式
經過在邊緣終止 HTTP 和 HTTPS 鏈接,Google 負載平衡器可在流量進入數據中心或區域以前肯定後端可用性,從而肯定路由流量的位置。這樣可以讓流量採用最高效的路徑從客戶端傳入後端,同時還能兼顧後端的運行情況和容量。工具
Ingress for Anthos 是一款ingress流量控制器,它使用網絡端點組(NEG) 對外部 HTTP(S) 負載平衡器進行編程。建立MultiClusterIngress
資源時,GKE 會部署 Compute Engine 負載平衡器資源,並在各個集羣中將相應的 Pod 配置爲後端。NEG 用於動態跟蹤 Pod 端點,以便 Google 負載平衡器擁有一組正常運行的適當後端。優化
在 GKE 的各集羣中部署應用時,Ingress for Anthos 可確保負載平衡器與集羣中發生的如下事件同步:google
Ingress for Anthos 會更新負載平衡器,使其保持一致。
Yggdrasil是一個開源工具,用於容許咱們的服務在AWS中運行的多個Kubernetes集羣之間實現負載均衡。它充當Envoy控制平面,從Kubernetes Ingress資源生成配置。 Yggdrasil與Ingress控制器無關,容許它使用現有資源。
MCI要求能夠很是快速地建立,更新和刪除Ingress,所以咱們須要可以應對這種動態環境的產品,而Envoy因爲其動態配置功能,熔斷,運行情況檢查等而彷佛是理想的選擇。
從一個小型的Envoy羣集開始,該羣集針對每一個Ingress進行了靜態配置,但願在多個羣集之間實現負載平衡。 Envoy將在與Ingress中定義的主機相同的主機上進行偵聽,並將每一個Ingress負載均衡器配置爲給定主機的地址。
若是是自研一套MCI,應該首選Envoy做爲代理,正如上面說到的,Envoy動態配置,包含了限流等豐富的功能,已經成爲Service Mesh 數據層事實上的標準。隨着Envoy支持經過wasm的方式編寫插件,將來咱們將會更加方便的擴展Envoy的功能。
此外Envoy支持Zone aware 的負載均衡,這樣,能夠必定程度上,減小跨zone流量費用。
另外Envoy集羣的部署應該選擇k8s容器化部署,理由以下:
最後,咱們能夠充分利用Envoy的特性,支持流量接入和必定的南北向流量服務治理。好比熔斷,限流,灰度,重試等等。
也許你不只僅須要一個流量接入,更須要一個網關