【Azure 應用服務】App Service與APIM同時整合到同一個虛擬網路後,如何通過內網訪問內部VNET的APIM呢?
問題描述
App Service訪問的APIM已配置內部虛擬網路(Internal VNet)並擁有內網IP地址。App Service與APIM都在相同的虛擬網路(VNET)中。App Service如何通過內網訪問APIM呢?是否需要在虛擬網路中新增自定義DNS服務進行域名解析呢?
問題答案
是的,由於APIM配置的是內部虛擬網路,它只能接收從虛擬網路內部發送的請求,而無法接受從公網(Internet)傳送的請求。所以App Service需要訪問APIM,需要走內部虛擬網路的鏈路。同時,由於APIM的訪問是通過域名訪問,所以也必須需要DNS伺服器來解析內網IP地址。
在App Service端需要的配置為
- WEBSITE_VNET_ROUTE_ALL 設定為 1,讓App Service所有的出站流量都可以被髮送到 VNET中
在VNET中為APIM配置DNS記錄
假設APIM的內部虛擬 IP 地址為 10.1.0.5,且APIM的名稱為contosointernalvnet,則需要在DNS中配置以下指向的DNS A記錄:
-
10.1.0.5 contosointernalvnet.azure-api.cn
-
10.1.0.5 contosointernalvnet.portal.azure-api.cn
-
10.1.0.5 contosointernalvnet.developer.azure-api.cn
-
10.1.0.5 contosointernalvnet.management.azure-api.cn
-
10.1.0.5 contosointernalvnet.scm.azure-api.cn
參考資料
將App Service應用與 Azure 虛擬網路整合:https://docs.azure.cn/zh-cn/app-service/web-sites-integrate-with-vnet#azure-dns-private-zones
在內部虛擬網路中使用 Azure API 管理服務:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet
附錄資訊
區域 VNet 整合的工作原理
應用服務中的應用託管在輔助角色上。 基本和更高的定價計劃是專用託管計劃,其中不會有任何其他客戶的工作負載在同一輔助角色上執行。 區域 VNet 整合通過使用委託子網中的地址裝載虛擬介面實現。 傳送地址位於 VNet 中,因此它可以像 VNet 中的 VM 那樣,訪問位於 VNet 中或通過 VNet 傳輸的大多數內容。 網路實現不同於在 VNet 中執行 VM。 這就是一些網路功能尚不可用於此功能的原因。
啟用區域 VNet 整合後,應用通過往常所用的通道對 Internet 進行出站呼叫。 應用屬性門戶中列出的出站地址是應用仍然在使用的地址。 就應用而言,變化在於:對服務終結點保護服務的呼叫或者 RFC 1918 地址進入 VNet 中。 如果 WEBSITE_VNET_ROUTE_ALL 設定為 1,所有出站流量都可以被髮送到 VNet 中。
DNS 配置
如果 API 管理採用外部虛擬網路模式,則 DNS 由 Azure 管理。 使用內部虛擬網路模式時,必須自行管理 DNS。
備註:API 管理服務不會偵聽來自 IP 地址的請求, 它只響應到發往其服務終結點上配置的主機名的請求。 這些終結點包括閘道器、Azure 門戶和開發人員門戶、直接管理終結點和 Git。
基於預設主機名的訪問許可權
建立 API 管理服務(例如“contosointernalvnet”)時,將預設配置以下服務終結點:
閘道器或代理:contosointernalvnet.azure-api.net
開發人員門戶:contosointernalvnet.portal.azure-api.cn
新開發人員門戶:contosointernalvnet.developer.azure-api.cn
直接管理終結點:contosointernalvnet.management.azure-api.cn
Git:contosointernalvnet.scm.azure-api.net
若要訪問這些 API 管理服務終結點,可以在連線到虛擬網路(其中部署了 API 管理)的子網中建立虛擬機器。 假設服務的內部虛擬 IP 地址為 10.1.0.5,則可對映 hosts 檔案 (%SystemDrive%\drivers\etc\hosts),如下所示:
10.1.0.5 contosointernalvnet.azure-api.cn
10.1.0.5 contosointernalvnet.portal.azure-api.cn
10.1.0.5 contosointernalvnet.developer.azure-api.cn
10.1.0.5 contosointernalvnet.management.azure-api.cn
10.1.0.5 contosointernalvnet.scm.azure-api.cn
然後即可從建立的虛擬機器訪問所有服務終結點。 如果在虛擬網路中使用自定義 DNS 伺服器,則還可建立 DNS 記錄並從虛擬網路中的任何位置訪問這些終結點。