阿里雲 ACK One 新特性:多集羣網關,幫您快速構建同城容災系統

近日,阿里雲分佈式雲容器平臺 ACK One[1]發佈“多集羣網關”[2](ACK One Multi-cluster Gateways)新特性,這是 ACK One 面向多雲、多集羣場景提供的雲原生網關,用於對多集羣南北向流量進行統一管理。

基於 ACK One 多集羣網關可以快速構建多集羣應用的同城容災系統,幫助企業以更簡單、高效的方式爲應用數據的連續性和可用性提供保障。

爲什麼需要同城容災

由於故障的多樣性和不確定性,在一些極端情況下(如發生斷網斷電、火災、地震等),需要保證應用和數據的高可用,因此需要容災方案,目前雲上容災主要分爲三類:

1. 同城跨 AZ 容災

2. 跨地域容災

3. 兩地三中心

同城容災包含多活和主備,同城中心之間物理距離較近,網絡延遲低,可防範 AZ 級別性質的災難損害(如火災、發生斷網斷電等);跨地域容災則網絡延遲相對較高,但可防範地域性質的災難損害(如地震、水災等);兩地三中心則將同城雙中心和跨 Region 災備結合起來,兼具了二者優點,適用於應用與數據連續性和可用性要求高的場景。而從實際情況考慮,同城容災相比於跨地域容災,在數據容災方面容易實現得多,所以同城容災仍然具有非常重要的意義。

現有同城容災方案及問題

在 K8s 集羣中的應用,現有的同城多可用區/多集羣容災的方案,基本都是基於 DNS 和多個 Ingres Controller 來實現,一般架構圖如下所示:

雖然在 DNS 與 SLB 之間可以增加類似於全局流量管理(GTM)等一些網關功能類產品,來支持用戶就近接入、高併發負載均衡、健康檢查與故障切換等能力,完善容災方案,但現有的基於 DNS 的容災方案仍具有一些問題:

1. 基於 DNS 的方案,無法支持七層路由轉發;

2. 基於 DNS 的方案在 IP 切換時候,通常會有 Client 端緩存而造成服務短暫不可用,用戶體驗有所影響;

3. 基於 DNS 的方案通常需要多個 LB(每個集羣/可用區一個),並且需要在每個集羣中都安裝 Ingress Controller 和創建 Ingress 對象,管理和費用成本較高。

基於 ACK One 多集羣網關實現的同城容災方案

什麼是 ACK One 多集羣網關

多集羣網關由 ACK One Fleet 通過集成 MSE 雲原生網關[3]來實現,並使用 Ingress API 來管理多集羣南北向流量,可以幫您管理七層流量,並進一步實現同城自動容災、基於 Header 的灰度發佈驗證、基於副本數和權重的流量負載均衡等多集羣應用相關的所需能力。

此外,多集羣網關是地域級別的,所有操作都僅需在 ACK One Fleet 實例中操作(創建網關、Ingress 資源等),無需在每個 ACK 集羣中都安裝 Ingress Controller 和創建 Ingress 資源,提供地域級全局流量管理能力的同時,也減少了多集羣管理的成本。

關於 MSE Ingress 與 MSE 雲原生網關

MSE Ingress[4]是在 MSE 雲原生網關之上提供更爲強大的 Ingress 流量管理方式,兼容 Nginx Ingress 以及 50 多個 Nginx Ingress 的註解,覆蓋 90% 以上的 Nginx Ingress 業務場景,支持多服務版本同時灰度發佈、靈活的服務治理能力以及全方位的安全防護保障,能夠滿足大規模雲原生分佈式應用的流量治理訴求。其支持的 Annotation 詳見 MSE Ingress 支持的 Annotation[5]

在 ACK One Fleet 中,管理員可以通過 kubectl 創建 MseIngressConfig 資源來創建出 MSE 雲原生網關,由其來管理多集羣流量,並創建 Ingress 資源來管理流量路由。

Kubernetes 服務的流量管理概述

在 Kubernetes 的流量管理領域,Ingress Controller 是非常重要的方案,Ingress Controller 作爲一個專門的 4 層和 7 層代理,用來管理南北向流量:將流量導入 K8s 集羣,到達 services,再導出。

Kubernetes Ingress API[6]主要目標就是使用簡單的、聲明式的 API 來代理集羣中服務,其在 Kubernetes 1.2 就已 Beta,有非常多的廠商支持 Ingress,並擴展了非常多的功能,使用也很廣泛,所以使用 Ingress API 的學習成本較低。

值得一提的是,Kuberentes Gateway API[7]相比於 Ingress,提供了更通用的代理 API,支持更多協議,可實現更多的能力,MSE 在後續提供對 Gateway API 的支持,滿足用戶複雜的流量管理訴求。

綜合各方面考慮,ACK One 當前選擇以 Ingress API 的方式來支持多集羣的南北向流量管理。

基於 ACK One 多集羣網關實現的同城容災方案

基於 ACK One 多集羣網關可以快速構建多集羣應用的同城容災系統,包括同城多活容災和同城主備容災。整體架構如下:

  • 一個地域兩個不同可用區(AZ 1 和 AZ 2),各創建一個 ACK 集羣(Cluster 1 和 Cluster 2)
  • 在 ACK One Fleet 中通過 MseIngressConfig 資源在 Fleet 所在地域、所在 VPC 創建出 MSE 網關
  • 通過 ACK One GitOps 將應用分發到多集羣中(已創建的 Cluster 1 和 Cluster 2 集羣)
  • 在 Fleet 中通過創建 Ingress 來設置流量規則,支持跨多個 ACK 集羣的以下能力:
  • HTTP routing:七層路由轉發§ 如 header-based 路由:基於 header 將流量路由到指定集羣、基於 header 的灰度驗證
  • traffic splitting:根據權重路由流量、A/B 測試、藍綠部署、金絲雀發佈等
  • health-based 自動平滑容災:流量在多集羣/多可用區自動平滑容災。某個集羣或者集羣內某個副本 unhealthy 後,流量會被自動平滑地路由到另一個集羣或者其他健康的副本
  • traffic mirroring、基於副本數負載均衡流量等

方案優勢

由以上架構,我們可以知道,基於 ACK One 多集羣網關的容災方案,相比於基於 DNS 流量分發的容災方案具有以下優勢:

  • 基於 DNS 流量分發的容災方案需要多個 LB IP(每個集羣 1 個),而基於多集羣網關的容災方案在地域級別僅需要 1 個 LB IP,且默認提供同地域多可用區的高可用性。
  • 基於多集羣網關的容災支持七層路由轉發能力,而基於 DNS 流量分發的容災不支持七層路由轉發。
  • 基於 DNS 流量分發的容災方案在 IP 切換時,通常會有客戶端緩存而造成服務短暫不可用,而基於多集羣網關的容災方案則可以平滑地將流量 Fallback 到另一個集羣的服務後端。
  • 多集羣網關是地域級別的,所以所有操作都僅需在 Fleet 實例中操作(創建網關、Ingress 資源等),無需在每個 ACK 集羣中都安裝 Ingress Controller 和創建 Ingress 資源,在提供地域級全局流量管理能力的同時,減少多集羣管理成本。

基於多集羣網關的同城多活容災

基於多集羣網關的同城多活容災如下圖所示:

  • 在 cluster1 與 cluster2 中存在同名服務(K8s service 的 name 和 namespace 一致),且副本數爲 1:1
  • 網關會將流量按照 1:1 的比例路由到 cluster1 和 cluster2 中
  • 當 cluster1 異常時(如副本數變爲 0),cluster1 的 50% 流量會被自動遷移到 cluster2,此時 100% 流量會被路由到 cluster2

基於多集羣網關的同城主備容災

基於多集羣網關的同城主備容災如下圖所示:

  • 在 AZ 1 cluster1 與 AZ 2 cluster2 中存在同名服務(K8s service 的 name 和 namespace 一致)
  • 服務以 cluster1 爲主,cluster2 爲備,默認只有主提供服務,100% 流量會路由到 cluster1
  • 當主異常以後,100% 流量會被自動平滑地路由到備(AZ 2 的 cluster2)

總結

ACK One多集羣網關提供了強大的能力,與此同時,結合 ACK One GitOps[8]的應用多集羣分發和持續部署能力,可以幫您快速、低成本地構建對多集羣應用平滑容災的同城容災系統。更多詳情可以查看基於多集羣網關實現同城容災[9]和多集羣網關概述[10]

相關鏈接:

[1] ACK One

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/product-overview/ack-one-overview?spm=a2c4g.11186623.0.0.6f5848b0idmr0L

[2] 多集羣網關

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/multi-cluster-traffic-gateway-overview?spm=a2c4g.11186623.0.0.5fd048b0oh9MLf

[3] MSE 雲原生網關

https://help.aliyun.com/zh/mse/product-overview/cloud-native-gateway-overview?spm=a2c4g.11186623.0.0.260a3db39PGupl

[4] MSE Ingress

https://help.aliyun.com/zh/mse/user-guide/overview-of-mse-ingress-gateways#task-2193958

[5] MSE Ingress 支持的 Annotation

https://help.aliyun.com/zh/mse/user-guide/annotations-supported-by-mse-ingress-gateways?spm=a2c4g.11186623.0.0.4c074ca8JGvcpx

[6] Kubernetes Ingress API

https://kubernetes.io/docs/concepts/services-networking/ingress/

[7] Kuberentes Gateway API

https://gateway-api.sigs.k8s.io/

[8] ACK One GitOps

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/gitops-overview?spm=a2c4g.11186623.0.0.596377b7htoy5W

[9] 基於多集羣網關實現同城容災

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/use-cases/zone-disaster-recovery-based-on-multi-cluster-gateway?spm=a2c4g.11186623.0.0.54b7681cMIMBoN

[10] 多集羣網關概述

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/multi-cluster-gateway-overview?spm=a2c4g.11186623.0.0.c01b6fd6rNopUT

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章