【Azure API 管理】Azure APIM服務集成在內部虛擬網路後,在內部環境中打開APIM門戶使用APIs中的TEST功能失敗

問題描述

使用微軟API管理服務(Azure API Management),簡稱APIM。 因為公司策略要求只能內部網路訪問,所以啟用了VNET集成。集成方式見: (在內部模式下使用 Azure API 管理連接到虛擬網路://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet?tabs=stv1)

 

當APIM配置好後,直接通過CURL命令訪問APIM的網關介面(如:curl //bei3apim.azure-api.cn/httpbin/get -v ),請求響應成功。

但是,直接在門戶上訪問時,為什麼一直都報錯 「Could not complete the request. Please try again later.」

問題分析

首先,請求通過APIM 網關已經能成功轉發請求到後端伺服器,並且返回狀態為200。獲得正確的返回結果。 

然後,這個問題,只發生在APIM門戶的 Test 頁面,並且當點擊「Test」 按鈕後,馬上就觸發了API 管理提示的錯誤。

所以,判斷這個問題,就發生在APIM門戶頁面端,是JS的一些執行報錯。所以可以通過瀏覽器開發模式(F12)查看,Console中的輸出,檢測JS執行的錯誤消息。

 

謎底揭曉:因為APIM的Test功能是把請求先發送到一個代理伺服器( //apimanagement-cors-proxy-mc.azure-api.cn/ )上執行,而在內網中,這個代理伺服器URL無法被解析。

解決方法:在虛擬網路的DNS伺服器中,加上對域名(apimanagement-cors-proxy-mc.azure-api.cn)的解析。或者直接在當前的VM中修改windows host文件(C:\Windows\System32\drivers\etc)

 

解題步驟

1) 在公網中,通過 nslookup apimanagement-cors-proxy-mc.azure-api.cn 解析出它的IP地址

 

2) 進入VM 的Host文件,添加 IP 域名記錄

 3) 刷新APIM Test頁面,再次點擊Test Send 按鈕,請求發送成功!

 

 

[END]

 

參考資料

在內部模式下使用 Azure API 管理連接到虛擬網路://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet?tabs=stv1