通過云原生網(wǎng)關(guān)管理多個(gè)ACK集群
為了保障業(yè)務(wù)穩(wěn)定性,通常采用多個(gè)ACK集群對(duì)等部署的方式來實(shí)現(xiàn)高可用。云原生網(wǎng)關(guān)支持多ACK集群接入,通過一個(gè)網(wǎng)關(guān)實(shí)例同時(shí)關(guān)聯(lián)多個(gè)集群,將同名服務(wù)合并,在多個(gè)服務(wù)端點(diǎn)之間做負(fù)載均衡。搭配網(wǎng)關(guān)的健康檢測(cè)功能,自動(dòng)探測(cè)服務(wù)可用性,實(shí)現(xiàn)更高效的故障自動(dòng)切流。本文以兩個(gè)ACK集群為例,介紹如何通過云原生網(wǎng)關(guān)管理多個(gè)ACK集群。
前提條件
創(chuàng)建兩個(gè)ACK集群。具體操作,請(qǐng)參見創(chuàng)建Kubernetes托管版集群。
在兩個(gè)集群中配置同名的服務(wù)。以
httpbin
服務(wù)為例,示例配置如下所示。apiVersion: v1 kind: Service metadata: name: httpbin labels: app: httpbin spec: ports: - name: http port: 8000 targetPort: 80 selector: app: httpbin --- apiVersion: apps/v1 kind: Deployment metadata: name: httpbin spec: replicas: 1 selector: matchLabels: app: httpbin version: v1 template: metadata: labels: app: httpbin version: v1 spec: containers: - image: docker.io/kennethreitz/httpbin imagePullPolicy: IfNotPresent name: httpbin ports: - containerPort: 80
背景信息
在生產(chǎn)實(shí)踐中,若對(duì)業(yè)務(wù)穩(wěn)定性要求非常高,通常會(huì)采用多ACK集群對(duì)等部署的方式來保障高可用。例如,集群A部署在可用區(qū)A,集群B部署在可用區(qū)B,A與B兩個(gè)集群部署的服務(wù)一致,當(dāng)其中一個(gè)集群故障時(shí)可以快速切換流量。
云原生網(wǎng)關(guān)為了支持業(yè)務(wù)的高可用部署訴求,提供了多ACK集群接入功能。即用一個(gè)云原生網(wǎng)關(guān)實(shí)例同時(shí)關(guān)聯(lián)A、B兩個(gè)集群,網(wǎng)關(guān)會(huì)將兩個(gè)集群的同名服務(wù)進(jìn)行合并,合并后的服務(wù)名稱與原來保持一致,但是服務(wù)的IP地址列表會(huì)同時(shí)包含兩個(gè)服務(wù)的所有IP地址。如果A或者B集群故障,利用云原生網(wǎng)關(guān)的路由能力會(huì)自動(dòng)將流量分發(fā)到正常集群。推薦搭配網(wǎng)關(guān)的主動(dòng)健康檢測(cè)功能一起使用,由網(wǎng)關(guān)主動(dòng)探測(cè)服務(wù)的IP地址可用性,從而帶來更高效的故障自動(dòng)切流。
如下圖所示,云原生網(wǎng)關(guān)管理著來自兩個(gè)ACK集群的A、B兩個(gè)服務(wù)。當(dāng)ACK集群B發(fā)生crash時(shí),仍然能夠通過網(wǎng)關(guān)訪問到集群A的A、B兩個(gè)服務(wù),且該切流動(dòng)作自動(dòng)發(fā)生,無需人工干涉。
步驟一:在云原生網(wǎng)關(guān)中添加容器服務(wù)來源
登錄MSE網(wǎng)關(guān)管理控制臺(tái),并在頂部菜單欄選擇地域。
在左側(cè)導(dǎo)航欄,選擇云原生網(wǎng)關(guān) > 網(wǎng)關(guān)列表,單擊目標(biāo)網(wǎng)關(guān)名稱。
在左側(cè)導(dǎo)航欄,選擇路由管理,然后選擇來源頁(yè)簽。
單擊創(chuàng)建來源。在創(chuàng)建來源面板,配置相關(guān)參數(shù),然后單擊確定。具體操作,請(qǐng)參見創(chuàng)建服務(wù)來源。
步驟二:在云原生網(wǎng)關(guān)中分別添加服務(wù)A與B
在左側(cè)導(dǎo)航欄,選擇路由管理,然后選擇服務(wù)頁(yè)簽。
單擊創(chuàng)建服務(wù)。在創(chuàng)建服務(wù)面板,配置服務(wù)相關(guān)參數(shù),然后單擊確定。具體操作,請(qǐng)參見創(chuàng)建服務(wù)
步驟三:在云原生網(wǎng)關(guān)中為目標(biāo)服務(wù)添加路由配置
在左側(cè)導(dǎo)航欄,單擊路由管理,然后選擇路由頁(yè)簽。
單擊創(chuàng)建路由。在創(chuàng)建路由頁(yè)面,配置相關(guān)參數(shù),然后單擊保存并上線。具體操作,請(qǐng)參見創(chuàng)建路由。
結(jié)果驗(yàn)證
當(dāng)集群A、B正常時(shí)
在服務(wù)列表頁(yè)面查看服務(wù)地址。
可觀察到服務(wù)地址中有兩條記錄。
多次訪問網(wǎng)關(guān),創(chuàng)造訪問日志。具體代碼如下所示。
while :; do curl http://<網(wǎng)關(guān)SLB地址>/test ; done
在網(wǎng)關(guān)日志中進(jìn)行查詢分析。
在左側(cè)導(dǎo)航欄,選擇云原生網(wǎng)關(guān) > 網(wǎng)關(guān)列表,并在頂部菜單欄選擇地域。
在網(wǎng)關(guān)列表頁(yè)面,單擊目標(biāo)網(wǎng)關(guān)名稱。
在左側(cè)導(dǎo)航欄,單擊觀測(cè)分析 > 日志中心。在頁(yè)面右上角,選擇SLS日志服務(wù)。
通過分組查詢可以查看upstream_host對(duì)應(yīng)ACK集群上的服務(wù)地址。此時(shí),upstream_host取值有兩個(gè),兩個(gè)ACK集群均分了訪問該服務(wù)的流量。
當(dāng)集群A異常時(shí)
在集群A中刪除httpbin服務(wù)。
此時(shí),服務(wù)地址只有一條記錄。
多次訪問網(wǎng)關(guān),創(chuàng)建訪問日志。具體代碼如下所示。
while :; do curl http://<網(wǎng)關(guān)SLB地址>/test ; done
在網(wǎng)關(guān)日志中進(jìn)行查詢分析。
在左側(cè)導(dǎo)航欄,選擇云原生網(wǎng)關(guān) > 網(wǎng)關(guān)列表,并在頂部菜單欄選擇地域。
在網(wǎng)關(guān)列表頁(yè)面,單擊目標(biāo)網(wǎng)關(guān)名稱。
在左側(cè)導(dǎo)航欄,單擊觀測(cè)分析 > 日志中心。在頁(yè)面右上角,選擇SLS日志服務(wù)。
通過分組查詢可以觀察到此時(shí)upstream_host取值僅有一個(gè),是集群B的服務(wù)地址。該現(xiàn)象表明網(wǎng)關(guān)將全部流量切到了集群B上。