Service MeshASM為應用服務提供了跨地區流量分布和跨地區容錯移轉能力。跨地區流量分布功能可以將流量按照設定的權重路由至多個叢集,實現多地區負載平衡。跨地區容錯移轉功能可以在某地區服務發生故障時,將該地區流量轉移至其他地區,實現跨地區容災。以Bookinfo應用為例,本文介紹如何使用跨地區容錯移轉和流量分布能力實現跨地區容災和流量負載平衡。
網路規劃
在進行操作前,您需要對vSwitch、VPC和叢集的網段、名稱等資訊進行規劃,本文規劃如下:
關於資料平面多叢集地址規劃的詳細介紹,請參見多叢集網路規劃。
vSwitch和VPC的網路規劃
VPC網路規劃
對象
VPC名稱
Region
IPv4網段
叢集
vpc-hangzhou
cn-hangzhou
20.0.0.0/8
vpc-shanghai
cn-shanghai
21.0.0.0/8
Service Mesh
vpc-hangzhou2
cn-hangzhou
192.168.0.0/16
vSwitch網路規劃
重要為了避免使用CEN打通VPC網路後產生路由衝突,兩個vSwitch不能使用相同的網段。
對象
vSwitch名稱
VPC
IPv4網段
叢集
vpc-hangzhou-switch-1
vpc-hangzhou
20.0.0.0/16
vpc-shanghai-switch-1
vpc-shanghai
21.0.0.0/16
Service Mesh
vpc-hangzhou-switch-2
vpc-hangzhou2
192.168.0.0/24
叢集的Pod和Service網路規劃
叢集名稱
Region
VPC
Pod CIDR
Service CIDR
ack-hangzhou
cn-hangzhou
vpc-hangzhou
10.0.0.0/16
172.16.0.0/16
ack-shanghai
cn-shanghai
vpc-shanghai
10.1.0.0/16
172.17.0.0/16
步驟一:建立不同地區的叢集
按照以上規劃建立杭州和上海地區的VPC和vSwitch。具體操作,請參見建立交換器和建立專用網路和交換器。
使用上文建立的VPC和網路規劃建立杭州和上海地區的叢集。具體操作,請參見建立ACK託管叢集。
根據以上規劃建立杭州地區的ASM執行個體。具體操作,請參見建立ASM執行個體。
步驟二:使用CEN實現跨地區VPC網路互連
使用CEN打通叢集之間的VPC網路,以及叢集和Service Mesh之間的VPC網路。
登入雲企業網控制台,建立CEN執行個體。具體操作,請參見建立雲企業網執行個體。
建立轉寄路由器。
在雲企業網執行個體頁面,單擊步驟1建立的雲企業網執行個體名稱,然後在基本資料頁簽下方,單擊建立轉寄路由器。
在建立轉寄路由器對話方塊,選擇地區,輸入名稱,然後單擊確認。
本樣本配置了兩個轉寄路由器:
地區為華東2(上海),名稱為shanghai-router。
地區為華東1(杭州),名稱為hangzhou-router。
將VPC添加到轉寄路由器,為上海和杭州兩個轉寄路由器重複下列步驟,將VPC串連到轉寄路由器。
在雲企業網執行個體頁面,單擊步驟1建立的雲企業網執行個體名稱,然後在基本資料頁簽下方,單擊剛建立的轉寄路由器ID,進入轉寄路由器頁面。
單擊地區內串連管理頁簽,然後單擊建立網路執行個體串連,執行個體類型選擇Virtual Private Cloud,網路執行個體選擇Region對應的VPC執行個體。
其他選項保持預設,單擊確定建立。
設定跨地區頻寬。
添加安全性群組規則。
以下以Flannel網路外掛程式為例,在兩個叢集的安全性群組內添加對方叢集的Pod網路CIDR。
說明Terway網路外掛程式請使用叢集vSwitch的CIDR。您可以登入專用網路管理主控台,在交換器頁面的IPv4網段列,擷取vSwitch的CIDR。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
擷取Pod網路CIDR。
在叢集列表頁面,選擇上海地區,單擊ack-shanghai叢集名稱,然後在叢集資訊頁面的基本資料頁簽,擷取ack-shanghai叢集的Pod網路CIDR。
返回叢集列表頁面,選擇杭州地區,單擊ack-hangzhou叢集名稱,然後在叢集資訊頁面的基本資料頁簽,擷取ack-hangzhou叢集的Pod網路CIDR。
配置安全性群組。
分別在兩個叢集的叢集資訊頁面單擊基本資料頁簽,然後單擊控制面安全性群組右側的安全性群組ID。
在安全性群組詳情頁簽入方向下單擊手動添加。
設定協議類型為全部,源對方叢集的Pod網路CIDR,其他為預設值,然後單擊操作列下的儲存。
分別登入兩個叢集的節點, 使用ping命令測試與另一個叢集中的網路是否連通。具體操作,請參見節點登入。
步驟三:添加叢集到ASM執行個體並建立託管式的入口網關
將杭州地區和上海地區的兩個叢集添加到ASM執行個體。具體操作,請參見添加叢集到ASM執行個體。
建立入口網關。
apiVersion: istio.alibabacloud.com/v1beta1 kind: IstioGateway metadata: annotations: asm.alibabacloud.com/managed-by-asm: 'true' name: ingressgateway namespace: istio-system spec: gatewayType: ingress dnsPolicy: ClusterFirst externalTrafficPolicy: Local hostNetwork: false ports: - name: http port: 80 protocol: TCP targetPort: 80 - name: https port: 443 protocol: TCP targetPort: 443 replicaCount: 1 resources: limits: cpu: '2' memory: 2G requests: cpu: 200m memory: 256Mi rollingMaxSurge: 100% rollingMaxUnavailable: 25% runAsRoot: true serviceType: LoadBalancer
步驟四:部署示範應用Bookinfo
分別在ack-hangzhou叢集和ack-shanghai叢集部署Bookinfo應用。
kubectl apply -f bookinfo.yaml使用kubectl串連到ASM執行個體,建立路由規則。
使用以下內容,建立asm.yaml。
建立路由規則。
kubectl apply -f asm.yaml
驗證Bookinfo應用是否部署成功。
擷取入口網關地址。
在瀏覽器地址欄,輸入http://{入口網關服務的IP地址}/productpage,持續重新整理頁面10次,訪問Bookinfo應用。
每次重新整理都會訪問reviews服務的v1、v2和v3版本。您可以看到reviews服務三個版本出現的比例接近1:1:1。

步驟五:使用跨地區容錯移轉和跨地區流量分布
設定跨地區容錯移轉
停用ack-hangzhou叢集的review。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在無狀態版面設定命名空間為default,單擊reviews-v1右側操作列下的伸縮。
在伸縮版面設定所需容器組數量為0,然後單擊確定。
配置DestinationRule。
配置DestinationRule,當1s內無法請求到reviews服務,該reviews服務將被移除1min。
在網格詳情頁面左側導覽列,選擇。
在目標規則頁面單擊reviews右側操作列下的YAML。
在編輯面板增加以下內容,然後單擊確定。
spec: ...... trafficPolicy: connectionPool: http: maxRequestsPerConnection: 1 outlierDetection: baseEjectionTime: 1m consecutive5xxErrors: 1 interval: 1smaxRequestsPerConnection:最大串連數量。
baseEjectionTime:最小的移除時間長度。
consecutive5xxErrors:連續錯誤數量。
interval:移除檢測的時間間隔。
啟用跨地區容錯移轉。
在網格詳情頁面左側導覽列,選擇。
ASM執行個體版本1.22.6.66以下
在基本資料頁面,單擊基於地理位置的負載平衡右側的設定。
在基於地理位置的容錯移轉對話方塊設定當策略源是cn-shanghai,源容錯移轉至cn-hangzhou,當策略源是cn-hangzhou,源容錯移轉至cn-shanghai,然後單擊確認。
ASM執行個體版本1.22.6.66及以上
在基本資料頁面,單擊基於地理位置的負載平衡右側的設定基於地理位置的負載平衡。
單擊跨地區規則下的設定地區優先順序規則,設定故障地區是
cn-shanghai,優先轉移地區為cn-hangzhou。單擊添加,再設定故障地區是
cn-hangzhou,優先轉移地區cn-shanghai,然後單擊儲存配置。
執行以下命令,迴圈請求10次Bookinfo應用,並對路由到v2版本reviews服務的結果數量進行統計。
for ((i=1;i<=10;i++));do curl http://<ack-hangzhou叢集中80連接埠的入口網關地址>/productpage 2>&1|grep full.stars;done|wc -l預期輸出:
20可以看到訪問10次,返回20(每次路由到v2版本reviews服務會返回兩行包含
full stars的結果),說明10次請求全部路由到了ack-shanghai叢集的v2版本reviews服務,跨地區容錯移轉成功。
設定跨地區流量分布
跨地區流量分布能力僅支援版本≥1.22.6.66的執行個體。
登入ASM控制台,在左側導覽列,選擇。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇。
在基本資料頁面,單擊基於地理位置的負載平衡右側的設定基於地理位置的負載平衡。
單擊設定流量分布規則,設定源為
cn-hangzhou,目標為cn-shanghai,流量比例為10%,單擊儲存配置。說明基於地理位置的負載平衡預設啟用的是容錯移轉模式,您需要先單擊頁面右上方的關閉功能才可以重新選擇並啟用流量分布模式。
執行以下命令,迴圈請求10次Bookinfo應用,驗證跨地區流量分布是否成功。
for ((i=1;i<=10;i++));do curl http://<ack-hangzhou叢集中80連接埠的入口網關地址>/productpage 2>&1|grep full.stars;done預期輸出:
<!-- full stars: --> <!-- full stars: -->可以看到訪問10次,輸出2行
full stars,說明10次請求中9次路由到了ack-hangzhou叢集的v1版本reviews服務,1次路由到了ack-shanghai叢集的v2版本reviews服務,流量按照權重路由到多個叢集成功。
FAQ
為什麼通過雲企業網CEN打通了叢集VPC網路,在ASM中加入K8s叢集仍然提示失敗?
當您的叢集處於不同地區,在打通叢集VPC網路時,您若未購買跨地區流量包,或者未正確設定跨地區流量,ASM控制平面將無法串連到資料平面叢集,導致ASM添加叢集失敗。
針對以上這個問題,您需要重新在雲企業網CEN中設定跨地區流量打通叢集VPC網路,具體操作,請參見步驟二:使用CEN實現跨地區VPC網路互連。
