【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是否生效。测试效果如:
参考文档
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!