Azure Terraform:子网间Web应用专用链接通信异常排查
问题描述
我有两个Web应用:public和private(分别位于不同资源组),以及同属一个虚拟网络(VNet)的两个子网(Subnet)。具体配置如下:
- public Web应用关联了public和private子网
- private Web应用仅关联private子网
- public子网及对应的Web应用已配置端点作为公网访问入口
需求是将private Web应用设置为私有状态:阻断公网访问,仅通过Private Link暴露服务,同时让public Web应用通过Private Link与private Web应用通信。
但使用Azure门户的网络故障排查工具测试连接时,发现public Web应用仍在通过公网访问private Web应用,故障截图如下:
我参考了微软官方文档的示例实现,当前的DNS配置Terraform代码如下:
resource "azurerm_app_service_virtual_network_swift_connection" "vnetprivateconnection" { app_service_id = azurerm_windows_web_app.webapp_pub.id subnet_id = azurerm_subnet.sbpriv.id } resource "azurerm_private_dns_zone" "dnsprivatezone" { name = "plpoc.myspace.com" resource_group_name = azurerm_resource_group.rg_pub.name } resource "azurerm_private_dns_zone_virtual_network_link" "dnszonelink" { name = "dnszonelink" resource_group_name = azurerm_resource_group.rg_pub.name private_dns_zone_name = azurerm_private_dns_zone.dnsprivatezone.name virtual_network_id = data.azurerm_virtual_network.vnet.id } resource "azurerm_private_endpoint" "privateendpoint" { name = "privateendpoint" location = azurerm_resource_group.rg_pub.location resource_group_name = azurerm_resource_group.rg_pub.name subnet_id = azurerm_subnet.sbpub.id private_dns_zone_group { name = "privatednszonegroup" private_dns_zone_ids = [azurerm_private_dns_zone.dnsprivatezone.id] } private_service_connection { name = "privateendpointconnection" private_connection_resource_id = azurerm_windows_web_app.webapp_priv.id subresource_names = ["sites"] is_manual_connection = false } }
排查与解决方案
1. 补全私有DNS区域的记录
当前代码仅创建了私有DNS区域plpoc.myspace.com,但未确保private Web应用的私有IP已注册到该区域:
- 登录Azure门户,进入该私有DNS区域,检查是否存在指向private Web应用私有端点IP的A记录(格式通常为
<private-webapp-name>.plpoc.myspace.com) - 若未自动生成,手动添加A记录,将private Web应用的访问域名映射到私有端点的内网IP
2. 确认private Web应用的公网访问已完全阻断
- 进入private Web应用的网络 > 访问限制页面,添加优先级最高的规则:拒绝所有公网IP(IP范围填
0.0.0.0/0) - 检查Private Link设置,确保已开启“仅允许通过Private Link访问”的配置
3. 验证public Web应用的DNS解析结果
- 登录public Web应用的Kudu控制台,执行命令
nslookup <private-webapp-domain> - 若返回公网IP,说明DNS配置未生效:检查私有DNS区域与VNet的链接(
azurerm_private_dns_zone_virtual_network_link)是否部署成功,确认VNet已正确关联到私有DNS区域
4. 调整Private Endpoint的子网部署位置
当前Private Endpoint部署在sbpub子网,建议将其迁移到sbpriv子网(与private Web应用同子网),避免跨子网的DNS解析干扰。同时确保子网的Private Endpoint网络策略已启用。
5. 检查Private Link连接状态
进入private Web应用的Private Link设置,确认与public Web应用对应的Private Endpoint连接处于已批准状态(代码中is_manual_connection = false会自动批准,但需确认无异常)
内容的提问来源于stack exchange,提问作者KaHinCostner
相关产品推荐
相关产品推荐

