问题描述
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 记录并从虚拟网络中的任何位置访问这些终结点。