API Gateway能夠整合Nacos實現服務發現的功能,從而與微服務架構深入融合,降低系統的耦合度並提高程式的可管理性。網關可作為微服務系統的請求入口,負責所有用戶端的接入、請求的路由和轉寄、以及保證微服務應用的安全和穩定。本文主要介紹API Gateway整合Nacos訪問微服務後端的原理,以及介紹如何建立、發布並調用服務發現類型的API。
概述
本文依次介紹如下步驟:
建立VPC融合專享執行個體
部署Nacos服務並註冊微服務應用
建立分組
建立後端服務
建立API
建立應用並授予API的調用許可權
調試API
原理說明
Nacos作為服務的註冊中心,可以接收微服務執行個體的註冊請求,並將執行個體資訊儲存在註冊表中。API Gateway整合Nacos主要應用的是Nacos的服務發現能力,如下圖所示,網關作為服務的訂閱者,可以從Nacos擷取微服務執行個體的地址、連接埠等資訊,並根據地址和連接埠將請求分發到後端的多個微服務執行個體中,從而實現動態路由和負載平衡。

以下流程圖展示了API Gateway訪問微服務後端的具體過程:

服務的提供者將微服務應用註冊到Nacos伺服器。
API Gateway向Nacos發送請求,擷取服務執行個體的相關資訊,包括服務的IP地址、連接埠Port以及權重Weight等。為了減少網路間的通訊次數、提高響應速度,網關會將擷取到的服務執行個體資訊緩衝起來。
用戶端的請求到達API Gateway後,網關首先從緩衝中擷取一個可用的微服務執行個體地址,每個執行個體被選擇的機率與其權重Weight成正比。然後網關根據
IP:Port向指定的微服務Server發送HTTP請求並擷取後端響應,最後將響應結果返回給用戶端。如果微服務應用的資訊發生變動,例如某個服務執行個體下線或者增加了新的服務執行個體,那麼Nacos會將更新後的執行個體資訊推送給網關,網關則會根據接收到的服務資訊即時更新緩衝,以確保網關側和Nacos側的服務資訊保持相同。
用戶端再次請求API Gateway,網關會根據最新的微服務地址資訊進行請求的路由和轉寄。
API Gateway與Nacos、與微服務執行個體之間的互動僅支援內網通訊,因此在建立API時,Nacos的服務地址需配置為內網地址,否則網關將返回Nacos地址無效的異常資訊。同樣的,註冊在Nacos上的微服務應用的後端地址也必須為內網地址。在調用API時,若網關從Nacos擷取到的微服務後端地址為公網地址,那麼本次請求將無法處理成功,此時網關會返回錯誤碼I504IA,若網關未能從Nacos擷取到任何微服務後端地址,則返回錯誤碼I504BA。
步驟一:建立VPC融合專享執行個體
由於API Gateway與Nacos、與註冊在Nacos上的微服務應用之間僅支援內網通訊,而傳統的專享執行個體又無法實現自訂內網通訊,因此我們提供了一種新型的VPC融合專享執行個體,以支援API Gateway通過內網打通使用者的VPC,融合執行個體的建立過程可參考建立VPC融合專享執行個體。建立執行個體時,您需要將自己的VPC綁定到網關執行個體上,即在執行個體建立頁面選擇可用的使用者VPC ID,並設定可用性區域、交換器和安全性群組。配置完成後,網關便可通過內網訪問指定交換器下的雲資源。

步驟二:部署Nacos服務並註冊微服務應用
部署Nacos服務
Nacos服務需部署在步驟一中選擇的【VPC-可用性區域-交換器】下,您可以選擇原生的Nacos服務,將其部署在所選交換器下的ECS中,這樣Nacos服務的訪問地址便可設定為"ECS的內網IP:Nacos服務的Port"。建立ECS時,網路類型選擇專用網路,VPC和交換器需和步驟一中的配置保持相同。
您也可以使用阿里雲的微服務引擎(MSE)來建立Nacos服務,建立Nacos時,網路類型選擇專用網路,VPC和交換器需和步驟一中的配置保持相同。建立完成後,可在MSE的執行個體列表頁查看Nacos的訪問地址。
說明使用MSE建立Nacos的過程可參考建立Nacos引擎。
註冊微服務應用
您的微服務應用也需部署在步驟一中選擇的【VPC-可用性區域-交換器】下,這樣才能確保微服務能夠成功註冊到Nacos並能夠被API Gateway成功訪問。您可以選擇將微服務應用部署在ECS中,該ECS需建立在步驟一中指定的交換器下。
重要註冊到Nacos上的微服務應用必須支援HTTP調用。
步驟三:建立分組
API分組是API的嵌入式管理單元,因此需要先建立API分組,然後在分組下建立API。 登入API Gateway控制台,在左側導覽列選擇,單擊介面右上方的建立分組按鈕,在彈窗頁面填寫分組資訊,執行個體選擇步驟一中建立的VPC融合執行個體,分組名稱和BasePath可自行設定。建立完成後,可在分組列表查看剛剛建立的分組,單擊名稱即可進入到分組詳情頁,在詳情頁您可以執行綁定網域名稱、修改基本資料、切換執行個體類型等操作。
API分組會自動建立公網次層網域,此次層網域僅供調試使用,如果直接存取此網域名稱,每天有1000次的限制(海外Region及中國香港限制100次/天),因此建議您在使用時為分組綁定您的獨立網域名稱。
步驟四:建立後端服務
進入API Gateway控制台,在左側導覽列選擇。在介面的右上方單擊建立後端服務,在彈窗建立後端服務頁面填寫後端服務名稱,後端類型選擇服務發現。建立完成後,您可以在後端服務列表中找到剛剛建立的後端服務,單擊服務名稱即可進入後端服務詳情介面。
服務發現類型的API僅支援通過已有的後端服務進行建立,因此需要先建立後端服務,然後建立API。
本例中,我們選擇線上環境,只有在環境上建立了後端服務,建立的API才發行就緒到相應的環境。在介面的右側單擊建立,進入後端服務配置介面:

您需要在上圖中的配置介面填寫Nacos服務和微服務應用的相關資訊,包括:
NACOS地址:Nacos服務的內網地址,必填參數,可參考步驟一填寫Nacos的實際部署地址。
命名空間:微服務應用所屬的Namespace,必填參數,注意此處應填寫的是命名空間ID。
分組:微服務應用所在的分組的名稱,必填參數。
服務名:微服務應用的名稱,必填參數。
許可權認證:Nacos的許可權認證方式,必填參數,認證方式可選擇無認證、帳號密碼認證或金鑰組認證。
叢集:微服務應用所在的叢集名稱,非必填參數,如果需要設定多個叢集,那麼多個叢集名稱請以逗號間隔。
若您的Nacos服務開啟了許可權認證,那麼您也需要填寫相關的鑒權資訊。如果您使用的是原生Nacos且開啟了帳號密碼認證,那麼您需要選擇的許可權認證方式為帳號密碼認證,並需要填寫相應的帳號和密碼資訊。如果您使用阿里雲的MSE來管理Nacos,那麼您可以選擇使用金鑰組認證的鑒權方式,採用此種認證方式時,您需要先建立一個RAM使用者,並需要為該使用者授予MSE資源的唯讀許可權,然後在後端服務配置頁面填寫RAM使用者的AccessKey和SecretKey。如果您的Nacos服務並未啟用許可權認證,那麼您可以選擇無認證。
原生Nacos開啟、配置鑒權可參考Nacos許可權認證,在MSE中開啟、配置Nacos鑒權可參考Nacos Client訪問鑒權。
若您的Nacos服務更新了配置資訊,那麼請及時修改後端服務的相關配置,以避免網關無法訪問到指定的微服務應用。
步驟五:建立API
進入API Gateway控制台,在左側導覽列選擇。在後端服務列表頁面選擇已建立的後端服務,單擊操作列下的建立API。
API基本資料
本環節介紹如何配置API的基本資料,包括API分組、API名稱、安全認證方式、API類型和描述等。API分組選擇剛剛建立的分組,安全認證選擇阿里雲APP,AppCode認證選擇允許AppCode認證(header&Query),API名稱和描述資訊您可以自行設定。
安全認證方式可根據實際需求配置,如果不需要API Gateway做安全校正,可以選擇無認證。
定義API請求
本環節是定義client端(如瀏覽器、手機APP或其他的業務系統)如何請求您的API,需要確定的內容包括請求類型、協議、請求Path、HTTP Method、入參請求模式、和入參定義,您可以根據實際情況設定用戶端請求的Path和Method等資訊。
定義API後端服務
本環節是定義API Gateway收到client端的請求後,進行何種參數映射、處理,以及串連哪個後端地址。本例中的後端配置選擇使用已有的後端服務,後端服務類型選擇服務發現,後端服務選擇之前建立的後端服務,後端請求的Path、Method以及逾時時間您可以自行設定。
定義返回結果
本環節用於API協助文檔的自助產生,協助API使用者更好地理解。可以設定返回結果樣本和失敗返回結果樣本。本例中不涉及到這部分,因此可以單擊建立按鈕。
發布API
在上一環節儲存成功後,需要發布API。您對API進行過任何的配置,都需要發布到對應的環境中才能夠生效。本例中在建立後端服務的時候,只線上上環境進行了後端服務配置,因此這裡只發行就緒到線上環境,如果您需要發布到其他環境,需要在您剛建立的後端服務的其他環境配置後端服務定義。單鍵發行,按照控制台頁面的提示,把此API發布到“線上“環境。
步驟六:建立應用並授予API的調用許可權
應用(APP)是您調用API服務時的身份,在本例建立API的時候,認證方式選擇的是“阿里雲APP認證“,因此在API發布後,還需要建立APP,並將APP和API的對應關係建立好,才能夠正常訪問。具體操作步驟可參考授權管理。
步驟七:調試API
API Gateway提供了線上調試的功能,因此一般建議在API Gateway上完成API配置之後,先通過此功能確認API是否配置成功,然後再通過client端進行調用。
在API列表頁,單擊前面步驟中新增的API,進入詳情頁,單擊調試API。如果您定義了API的入參,在調試API頁面中也可以輸出不同的參數查看API的執行情況。
在調試API中,請注意選擇已經授權的APP,並且Stage選擇此APP授權好的環境,如果選擇錯誤的Stage,可能會造成API調試失敗。