【API管理 APIM】APIM整合內部VNet時,常遇見的關於自定義DNS服務問題。
問題描述
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