全部產品
Search
文件中心

API Gateway:將自建Nginx Ingress遷移至雲原生API Gateway

更新時間:Dec 11, 2025

隨著 Nginx Ingress 退役,使用者需將其遷移至新的網關方案。阿里雲雲原生API Gateway是一款整合流量網關、微服務網關和安全網關的統一網關產品,為Nginx Ingress使用者提供平滑遷移路徑及功能更新能力。本文介紹如何通過白屏化遷移工具將自建Nginx Ingress遷移至雲原生API Gateway。

前提條件

  • 已建立Container Service叢集,且部署了Nginx Ingress Controller。

  • 已建立雲原生API Gateway。如果您還沒有雲原生API Gateway,請參見建立網關執行個體

注意事項

  • 本文描述的遷移不是複製您的Ingress配置,而是讓您的Ingress配置被雲原生API Gateway Ingress複用,即時監聽已有的Ingress資源變化並解析。

  • 遷移過程中,如果您的Ingress配置發生變化,會同時反映在Nginx Ingress Controller和雲原生API Gateway Ingress。

  • 遷移完成之後,請不要隨意刪除線上正在使用的Ingress配置,遷移僅僅是讓現有的Ingress配置以及未來新添加的Ingress配置被雲原生API Gateway Ingress監聽並解析。

  • 遷移完成之後,現有的Ingress配置以及未來新添加的Ingress配置仍然需要關聯之前使用的IngressClass。例如之前Ingress的spec中的ingressClassName為nginx,那麼在遷移之後,現有的Ingress配置以及未來新添加的Ingress配置的spec中的ingressClassName仍然需要是nginx。

遷移步驟說明

雲原生API Gateway提供遷移上雲工具,您可以按照遷移工具的引導完成路由配置的遷移及最終的流量切換。

步驟一:路由規則遷移

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

  2. 在左側導覽列,選擇遷移上雲

  3. 遷移上雲頁面,單擊建立任務

  4. 建立遷移配置面板,進行相關配置。

    雲原生API Gateway將自動監聽所選容器叢集內且關聯到源IngressClass的所有Ingress資源的變化,並生效Ingress資源中網域名稱和路由的相關配置。

    重要

    如果目標雲原生API Gateway叢集中已關聯該容器叢集,且已配置的IngressClass與此處的配置不同,則不允許遷移。請確保此處配置的IngressClass與已關聯容器叢集配置的IngressClass一致。

    image

    配置項

    說明

    所屬執行個體

    指定遷移到雲原生API Gateway的執行個體。

    來源叢集

    選擇要遷移的Nginx Ingress對應的容器叢集,請確保雲原生API Gateway與容器叢集處於同一VPC。

    API名稱

    Nginx Ingress路由將匯入的雲原生API Gateway的HTTP API名稱。

    資源群組

    選擇遷移到雲原生API Gateway的資源群組。

    命名空間

    配置待遷移的Ingress資源的命名空間。

    IngressClass

    配置待遷移的Ingress資源關聯的IngressClass資源。

    說明
    • 僅支援配置單個IngressClass。

    • 配置為空白,即忽略IngressClass,表示監聽叢集中所有的Ingress資源。

  5. 單擊下一步

    此時雲原生API Gateway將自動監聽所選容器叢集內,關聯到源IngressClass的所有Ingress資源的變化,並將Ingress資源中網域名稱、路由的相關配置生效到建立的API中。

    1. 假設在原有容器叢集內有一個名稱為nginx-route的Ingress。

      image

    2. 在雲原生API Gateway控制台可以看到目的地組群中的Ingress已自動同步到目標雲原生API Gateway中,並產生與之對應的網域名稱、路由的相關配置。

      image

步驟二:路由校正

校正監聽的Ingress的相容性:

  • 如果無不相容的Ingress Annotation,則繼續下一步。

    image

  • 如果存在不相容的Ingress Annotation,您可以提交工單諮詢解決方案。

    重要
    • 註解nginx.ingress.kubernetes.io/service-weight的值為""可以忽略,該註解為舊版Container Service控制台預設添加,本身沒有任何意義。

    • 遷移過程中,請勿刪除線上正在使用的不相容註解。因為這些不相容的註解仍然被Nginx Ingress Controller解析並作用於您的業務流量。

步驟三:切流選擇

切流前測試

正式切流前,建議先進行本地測試:修改本地hosts檔案,為業務網域名稱添加雲原生API GatewaySLB解析,通過curl或者Postman等工具驗證所有流量是否符合預期。

選擇切流方式

複用原叢集SLB

原理:將雲原生API Gateway節點執行個體添加到原SLB的後端伺服器組中,在遷移過程中根據設定的權重分配業務流量到雲原生API Gateway。當遷移完成之後,訪問該SLB的流量將全部轉寄至雲原生API Gateway。

image

相關配置項說明如下:

配置項

說明

容器叢集命名空間

選擇Nginx Ingress SLB關聯的K8s Service所在的命名空間。

容器叢集SLB服務

選擇Nginx Ingress SLB關聯的K8s Service的名稱。

SLB ID

單擊查詢到的SLB,確認該SLB是目標待遷移的SLB。

連接埠及後端伺服器

選擇原叢集SLB執行個體的監聽連接埠和網關協議(HTTP/HTTPS),會自動展示目標虛擬伺服器組。

說明

請注意連接埠以及對應協議的選擇,否則流量可能有損。

DNS解析至雲原生API GatewaySLB

請您前往DNS供應商的網域名稱解析服務,為遷移路由涉及的所有網域名稱添加雲原生API GatewaySLB地址的映射。建議使用DNS的權重解析方式逐步切流。

步驟四:流量切換

複用原叢集SLB

image

Step1:點擊變更SLB

點擊變更SLB後,系統自動將SLB脫離容器託管並修改監聽調度演算法為加權輪詢。

重要

該步驟會將SLB脫離容器託管,脫離之後無法感知Nginx Ingress Controller的Pod IP變化,請儘快按照下一步的要求修改註解,重新將K8s Service關聯至SLB。

Step2:覆蓋修改Service註解

請確保完成Step1之後,在Container Service管理主控台中手工將複用原叢集SLB選擇的K8s Service的當前所有註解刪除,複製流量切換頁面自動產生的註解並添加到目標K8s Service註解中。該步驟主要是將原K8s Service改為複用SLB,修改完成後,單擊前置檢查,檢查通過後,會進入下一步。

編輯yaml.png

Step3:基於權重開始切流

設定轉寄雲原生API Gateway執行個體的流量權重,根據業務實際情況設定1~100,建議初次設定為1~10之間。

  • 該值為雲原生API Gateway各節點的權重值總和,SLB會根據虛擬伺服器組中雲原生API Gateway和Nginx Ingress各節點的權重比值分配流量。其中Nginx Ingress節點的權重總和預設為100,所以當雲原生API Gateway權重也設為100,則承接1/2 流量。依此類推,當雲原生API Gateway權重設為50,則承接1/3流量。

  • 遷移過程中,可以通過雲原生API Gateway提供的監控大盤觀察網關各項指標,時刻關注網關健康狀態以及業務指標是否符合預期。

    • 如果符合預期,可以逐步調大權重,修改權重的時間間隔要大於3分鐘,因為後台是非同步生效權重配置。

    • 如果不符合預期,權重設定為0即可,本次遷移終止。

  • 您可以在Container Service控制台中將複用原叢集SLB選擇的K8s Service的註解service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight的值調低,間接調大雲原生API Gateway的權重。特別地,當該註解的值為0時,流量則全部匯入雲原生API Gateway。

  • SLB作為四層負載平衡,流量控制粒度為串連層級,該權重值無法精確控制請求層級的分發比例。

  • 切流後如果出現成功率下跌,可將該權重設為0進行流量快速復原

說明

如果您希望長期處於遷移狀態中,希望隨時可以調整Nginx Ingress和雲原生API Gateway Ingress的流量權重,建議您長期處於當前步驟中。當您驗證並確認流量符合預期,之後不再需要復原所有流量到Nginx Ingress,可以單擊完成流量驗證繼續下一步。

重要

單擊完成流量驗證後,將無法修改權重。

Step4:全部流量切換至雲原生API Gateway

在Container Service控制台中將步驟三:切流選擇選擇的K8s Service服務的註解service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight的值設定為0,或者直接刪除該Service資源。Nginx Ingress Controller的節點將會自動從該SLB摘除,則SLB的全部流量切換至雲原生API Gateway。單擊完成遷移,此次遷移任務結束。

遷移走了.png

DNS解析至雲原生API GatewaySLB

請前往DNS供應商的網域名稱解析服務,為遷移路由涉及的所有網域名稱添加雲原生API GatewaySLB地址的映射。建議使用DNS的權重解析方式逐步切流。

快速復原

如果在流量遷移過程中發現不符合預期,您可以根據以下方式快速復原,使流量恢複至Nginx Ingress Controller。

  • 複用原叢集SLB:權重設定為0即可,本次遷移終止。

  • DNS解析至雲原生API GatewaySLB:在DNS供應商上對所有的業務網域名稱刪掉雲原生API GatewaySLB地址即可。

步驟五:完成遷移

複用原叢集SLB

對於SLB切流方式,如果您還有其他SLB未切流完畢,請確保這些SLB完成切流。如果您已經完成了所有SLB的切流,後續您可以按需刪除K8s Service以及Nginx Ingress Controller。

DNS解析至雲原生API GatewaySLB

對於DNS切流方式,如果您所有業務網域名稱的IP地址已經全部解析為雲原生API Gateway的SLB地址清單,後續您可以按需刪除K8s Service以及Nginx Ingress Controller。