問題描述
Azure 的APIM內建虛拟網絡有兩種方式,外部VNET, 内部VNET.
- 外部VNET,要求低,可以通過APIM通路VNET中的VM等資源,不需要配置自定義DNS伺服器,這種方式下,APIM沒有内部的私有IP。
- 内部VNET,要求多,需要自定義DNS伺服器,并且外部不能通路APIM的接口,隻能在VNET的資源(如VM)中通路。必須在DNS 伺服器中配置A記錄,指定通路到為APIM配置設定的内網IP位址。
而在配置内部VNET的時候,需要先準備好:
- VM (Azure 中虛拟機,用于作為DNS伺服器)
- VNET (虛拟網絡)
- 獨立的子網
- 在VNET中修改預設的DNS伺服器到自定義的DNS伺服器中,注意,這裡需要配置的是該VM的内網位址
由于在使用APIM的時候,可能對DNS的配置,VNET中的設定都不熟悉,以下的步驟就是介紹如何配置DNS, 修改VNET,及完成内部VNET內建。
一:啟用自定義DNS伺服器
(由于APIM在對VNET的修改耗時非常長,15~45分鐘左右,是以可以先準備好DNS伺服器以節約時間)
以Windows Server 2016 DataCenter為例,啟動DNS Server非常簡單,在Windows添加角色中選擇DNS Server後,之後的操作全部預設下一步就可以。

等安裝好之後,下一步就是配置 正向解析 (通過域名解析出IP位址)。 選擇Forward Lookup Zones -> New Zone -> 輸入需要添加的Zone名字,如azure-api.cn。然後就是一切預設值到最後。
在建立的Zone中添加A記錄: 這一步需要等到APIM中完成VNET內建後,根據文檔中的需要,把以下的内容都配置到該Zone下。
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.n
10.1.0.5 contosointernalvnet.scm.azure-api.cn
Reference Link: https://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet#apim-dns-configuration
當然,這裡需要修改為APIM的内網IP位址和自定義的APIM域名。配置完成後的效果如下:
二:在Azure VNET中修改預設的DNS伺服器為該VM的内網IP位址
(此點是必須的操作,不然在該VM中或者是同一VNET的VM中都無法解析到配置的DNS域名,但使用Ping時,擷取到這樣的錯誤,則表示配置的DNS伺服器還沒有在整個VNET中有效)
C:\Users\vmadmin>ping lbapimvnet01.azure-api.cn
Ping request could not find host lbapimvnet01.azure-api.cn. Please check the name and try again.
需要的修改辦法及在VNET中設定自定義的DNS伺服器,預設使用的是由Azure提供的DNS伺服器,但是當使用APIM內建内部VNET時,則必須自定義DNS伺服器,不然内網中的所有資源均無法通路APIM.
- 注意,這裡DNS伺服器的位址必須為内網的IP位址
配置成功後,可以使用nslookup來檢視配置的DNS是否生效。測試效果如:
參考文檔
如何使用Windows Server搭建DNS伺服器: https://www.58voip.com/build-windows-server-dns/
在内部虛拟網絡中使用 Azure API 管理服務:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet#apim-dns-configuration
當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!