Azure跨订阅:专用DNS区域关联虚拟网络的必要性与方法问询
问题解答
核心结论
不一定需要将专用DNS区域关联所有虚拟网络,有两种可行方案实现VNET2对专用终结点的解析:
方案1:将VNET2关联至订阅#1中的专用DNS区域
如果VNET2使用默认的Azure DNS服务器,需要将其关联到订阅#1的专用DNS区域,这样VNET2内的主机才能直接查询该区域的DNS记录。
Terraform实现步骤
由于VNET2属于不同订阅,需要在订阅#1的Terraform配置中引用订阅#2的VNET资源:
- 通过数据源获取订阅#2中的VNET2信息:
data "azurerm_virtual_network" "spoke_vnet" { name = "VNET2" resource_group_name = "订阅#2中VNET2所在的资源组名" subscription_id = "订阅#2的ID" }
- 创建跨订阅的虚拟网络链接:
resource "azurerm_private_dns_zone_virtual_network_link" "network_link_spoke_vnet_keyvault" { name = "vnet_link_spoke_vnet_keyvault" resource_group_name = azurerm_resource_group.ipz12-dat-np-connection-rg.name private_dns_zone_name = azurerm_private_dns_zone.keyvalutzone.name virtual_network_id = data.azurerm_virtual_network.spoke_vnet.id registration_enabled = false depends_on = [ azurerm_private_dns_zone.keyvalutzone, data.azurerm_virtual_network.spoke_vnet ] }
注意:执行此配置的服务主体需要同时拥有订阅#1的DNS区域管理权限,以及订阅#2的VNET读取权限。
方案2:利用已部署的Private DNS Resolver实现解析
你已经在订阅#1中部署了Private DNS Resolver,且该Resolver所在的VNET1已关联专用DNS区域,因此可以通过以下步骤让VNET2借助Resolver完成解析:
- 获取Private DNS Resolver入站端点的IP地址(可通过Terraform输出或Azure门户查看);
- 将VNET2的自定义DNS服务器设置为该入站端点的IP地址;
- 确认VNET1与VNET2的对等连接已启用允许转发DNS查询(默认已启用)。
这种方式无需将VNET2关联到专用DNS区域,所有VNET2的DNS查询会转发到Resolver,由Resolver查询订阅#1中的专用DNS区域并返回结果。
Terraform实现VNET2的DNS配置
如果VNET2通过Terraform管理,可直接修改其DNS设置:
resource "azurerm_virtual_network" "spoke_vnet" { # ... 其他已有配置 ... dns_servers = ["${azurerm_private_dns_resolver_inbound_endpoint.hub_private_dns_resolver_ie.ip_configurations.0.private_ip_address}"] }
若VNET2不在当前Terraform配置中,可通过Azure CLI或门户手动修改。
方案选择建议
- 若VNET数量较少,优先选择方案1,配置更直接;
- 若后续有多个跨订阅VNET需要解析同一专用DNS区域,方案2更易维护,只需统一配置DNS指向Resolver即可。
内容的提问来源于stack exchange,提问作者One Developer
相关产品推荐
相关产品推荐

