全部產品
Search
文件中心

API Gateway:通過雲原生API Gateway管理多個ACK叢集

更新時間:Jun 09, 2026

為了保障業務穩定性,通常採用多個ACK叢集對等部署的方式來實現高可用。雲原生API Gateway支援多ACK叢集接入,通過一個網關執行個體同時關聯多個叢集,將同名服務合并,在多個服務端點之間做負載平衡。搭配網關的健康檢測功能,自動探測服務可用性,實現更高效的故障自動切流。本文以兩個ACK叢集為例,介紹如何通過雲原生API Gateway管理多個ACK叢集。

前提條件

  • 建立兩個ACK叢集。具體操作,請參見建立ACK託管叢集

  • 在兩個叢集中配置同名的服務。以httpbin服務為例,樣本配置如下。

    展開查看YAML檔案

    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

背景資訊

在生產實踐中,若對業務穩定性要求非常高,通常會採用多ACK叢集對等部署的方式來保障高可用。例如,叢集A部署在可用性區域A,叢集B部署在可用性區域B,A與B兩個叢集部署的服務一致,當其中一個叢集故障時可以快速切換流量。

雲原生API Gateway為了支援業務的高可用部署訴求,提供了多ACK叢集接入功能。即用一個雲原生API Gateway執行個體同時關聯A、B兩個叢集,網關會將兩個叢集的同名服務進行合并,合并後的服務名稱與原來保持一致,但是服務的IP地址清單會同時包含兩個服務的所有IP地址。如果A或者B叢集故障,利用雲原生API Gateway的路由能力會自動將流量分發到正常叢集。推薦搭配網關的主動健康檢測功能一起使用,由網關主動探測服務的IP地址可用性,從而帶來更高效的故障自動切流。

如下圖所示,雲原生API Gateway管理著來自兩個ACK叢集的A、B兩個服務。當ACK叢集B發生crash時,仍然能夠通過網關訪問到叢集A的A、B兩個服務,且該切流動作自動發生,無需人工幹涉。

image

步驟一:在雲原生API Gateway中添加Container Service來源

  1. 登入雲原生API Gateway控制台

  2. 在左側導覽列,選擇实例,並在頂部功能表列選擇地區。

  3. 實例頁面,單擊目標網關執行個體ID。

  4. 在左側導覽列,選擇服务,並單擊来源頁簽。

  5. 單擊创建来源。在创建来源面板,選擇来源类型容器服务,並配置相關參數,然後單擊确定。具體操作,請參見服務來源管理

    建立完成後,在來源列表中可查看已添加的Container Service類型來源,列表包含名稱/ID來源類型關聯對象更新時間操作列,可通過刪除連結移除已有來源。

步驟二:在雲原生API Gateway中分別添加服務A與B

  1. 登入雲原生API Gateway控制台

  2. 在左側導覽列,選擇实例,並在頂部功能表列選擇地區。

  3. 實例頁面,單擊目標網關執行個體ID。

  4. 在左側導覽列,選擇服务,並單擊服务頁簽。

  5. 單擊创建服务。在创建服务面板,選擇服务来源容器服务,並選擇命名空间服务列表,然後單擊确定。具體操作,請參見建立服務

    服務建立完成後,可在服務列表中看到已添加的httpbin服務,健全狀態檢查狀態顯示為健康,連接埠為8080,服務來源為Container Service,命名空間為default

步驟三:在雲原生API Gateway中為目標服務添加路由配置

  1. 建立HTTP API,具體操作,請參見建立HTTP API

  2. 單擊目標API,在左上方單擊创建路由

  3. 创建路由頁面,配置相關參數,然後單擊保存并发布。具體操作,請參見建立路由

    本樣本中,路由名稱設定為 httpbin-route,網域名稱選擇 httpbin.com,路徑匹配規則選擇首碼是並填寫 /,勾選大小寫敏感。使用情境選擇單服務,後端服務的服務名稱選擇 httpbin,服務連接埠設定為 8080,服務合約選擇 HTTP

結果驗證

當叢集A、B正常時

  1. 服务列表頁面查看服務地址。

    可觀察到服務地址中有兩條記錄。

    httpbin 服務的服務地址分別為 192.168.0.203192.168.0.164,健全狀態檢查狀態為健康

  2. 多次訪問網關,具體代碼如下所示,可看到會返回兩個不同的hostname。

    curl <網關存取點網域名稱>/version
    [root@iZbp164xr9e3jdbinvzqdaZ ~]# curl http://env-crqcu8xxx-cn-hangzhou.alicloudapi.com/version
    version: v1
    hostname: httpbin-779f4b9dd6-kcvql
    [root@iZbp164xr9e3jdbinvzqdaZ ~]# curl http://env-crqcu8xxx-cn-hangzhou.alicloudapi.com/version
    version: v1
    hostname: httpbin-78b7c66df-nnrtg
    [root@iZbp164xr9e3jdbinvzqdaZ ~]#

當叢集A異常時

  1. 在叢集A中刪除httpbin服務。

    此時,服務地址只有一條記錄。

    該記錄顯示服務 httpbin 的健全狀態檢查狀態為健康,服務地址為 192.168.0.203,連接埠為 8080

  2. 多次訪問網關,具體代碼如下所示,可看到hostname只有一個。

    curl <網關存取點網域名稱>/version
    [root@izbp164xr9e3jdbinvzqdaZ ~]# curl http://env-crqcxxxx-cn-hangzhou.alicloudapi.com/version
    version: v1
    hostname: httpbin-779f4b9dd6-4f77g