通過云原生API網(wǎng)關(guān)管理多個(gè)ACK集群
為了保障業(yè)務(wù)穩(wěn)定性,通常采用多個(gè)ACK集群對(duì)等部署的方式來實(shí)現(xiàn)高可用。云原生API網(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)的健康檢測功能,自動(dòng)探測服務(wù)可用性,實(shí)現(xiàn)更高效的故障自動(dòng)切流。本文以兩個(gè)ACK集群為例,介紹如何通過云原生API網(wǎng)關(guān)管理多個(gè)ACK集群。
前提條件
創(chuàng)建兩個(gè)ACK集群。具體操作,請(qǐng)參見創(chuàng)建ACK托管集群。
在兩個(gè)集群中配置同名的服務(wù)。以
httpbin
服務(wù)為例,示例配置如下所示。apiVersion: apps/v1 kind: Deployment metadata: name: httpbin namespace: default spec: replicas: 1 selector: matchLabels: app: httpbin template: metadata: labels: app: httpbin version: v1 spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/mse-ingress/go-httpbin args: - "--version=v1" imagePullPolicy: Always name: httpbin --- apiVersion: v1 kind: Service metadata: name: httpbin namespace: default spec: ports: - port: 8080 protocol: TCP selector: app: httpbin
背景信息
在生產(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í)可以快速切換流量。
云原生API網(wǎng)關(guān)為了支持業(yè)務(wù)的高可用部署訴求,提供了多ACK集群接入功能。即用一個(gè)云原生API網(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集群故障,利用云原生API網(wǎng)關(guān)的路由能力會(huì)自動(dòng)將流量分發(fā)到正常集群。推薦搭配網(wǎng)關(guān)的主動(dòng)健康檢測功能一起使用,由網(wǎng)關(guān)主動(dòng)探測服務(wù)的IP地址可用性,從而帶來更高效的故障自動(dòng)切流。
如下圖所示,云原生API網(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ā)生,無需人工干涉。
步驟一:在云原生API網(wǎng)關(guān)中添加容器服務(wù)來源
在左側(cè)導(dǎo)航欄,選擇實(shí)例,并在頂部菜單欄選擇地域。
在實(shí)例頁面,單擊目標(biāo)網(wǎng)關(guān)實(shí)例名稱。
在左側(cè)導(dǎo)航欄,選擇服務(wù),并單擊來源頁簽。
單擊創(chuàng)建來源。在創(chuàng)建來源面板,選擇來源類型為容器服務(wù),并配置相關(guān)參數(shù),然后單擊確定。具體操作,請(qǐng)參見創(chuàng)建服務(wù)來源。
步驟二:在云原生API網(wǎng)關(guān)中分別添加服務(wù)A與B
在左側(cè)導(dǎo)航欄,選擇實(shí)例,并在頂部菜單欄選擇地域。
在實(shí)例頁面,單擊目標(biāo)網(wǎng)關(guān)實(shí)例名稱。
在左側(cè)導(dǎo)航欄,選擇服務(wù),并單擊服務(wù)頁簽。
單擊創(chuàng)建服務(wù)。在創(chuàng)建服務(wù)面板,選擇服務(wù)來源為容器服務(wù),并選擇命名空間和服務(wù)列表,然后單擊確定。具體操作,請(qǐng)參見創(chuàng)建服務(wù)。
步驟三:在云原生API網(wǎng)關(guān)中為目標(biāo)服務(wù)添加路由配置
創(chuàng)建HTTP API,具體操作,請(qǐng)參見創(chuàng)建HTTP API。
單擊目標(biāo)API,在左上角單擊創(chuàng)建路由。
在創(chuàng)建路由頁面,配置相關(guān)參數(shù),然后單擊保存并發(fā)布。具體操作,請(qǐng)參見創(chuàng)建路由。
結(jié)果驗(yàn)證
當(dāng)集群A、B正常時(shí)
在服務(wù)列表頁面查看服務(wù)地址。
可觀察到服務(wù)地址中有兩條記錄。
多次訪問網(wǎng)關(guān),具體代碼如下所示,可看到會(huì)返回兩個(gè)不同的hostname。
curl <網(wǎng)關(guān)的環(huán)境二級(jí)域名地址>/version
當(dāng)集群A異常時(shí)
在集群A中刪除httpbin服務(wù)。
此時(shí),服務(wù)地址只有一條記錄。
多次訪問網(wǎng)關(guān),具體代碼如下所示,可看到hostname只有一個(gè)。
curl <網(wǎng)關(guān)的環(huán)境二級(jí)域名地址>/version