You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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应用,故障截图如下:
网络故障排查显示未使用Private Link

我参考了微软官方文档的示例实现,当前的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:08:30