问题描述
一个典型的场景是:应用部署在 Azure 虚拟机中,通过公网 IP 对外提供服务,同时配置了严格的 IP 白名单来限制访问。随后,你配置了 Application Insights 的标准可用性测试,却发现探测请求始终无法成功。
问题根源在哪里?探测请求实际上来自 Microsoft 托管的探测节点,这些节点的 IP 地址段并不在你预先知晓的范围内。换句话说,Application Insights 可用性测试的请求来源,并未被包含在应用入口的白名单中。
因此,核心矛盾就变成了:如何获取 Application Insights 可用性服务的 IP 地址段?
问题解答
Application Insights 可用性测试的配置页面:
Application Insights 可用性测试适用于从公共互联网可访问、且能够通过公共 DNS 解析的 HTTP/HTTPS 终结点。根据 Azure Monitor 网络访问与防火墙配置的官方文档,若要覆盖此类网络例外,应在 Azure 网络安全组或 Azure 防火墙的入站规则中,放行 ActionGroup、ApplicationInsightsAvailability 和 AzureMonitor 这几个服务标记,并且仅开放应用实际所需的端口(通常是 TCP 443)。
不过,在 Azure 中国云环境下,情况略有不同:ActionGroup 和 ApplicationInsightsAvailability 虽然在官方 Azure IP 范围与服务标签 JSON 文件中存在,但在网络安全组或防火墙规则中尚无法作为可直接引用的服务标记(JSON 中的 networkFeatures 字段为 null)。
(文档链接:从官方 Microsoft 下载中心下载 Azure IP 范围和服务标签 – 中国云)
因此,实际的解决方案是:从上述 JSON 文件中提取 ActionGroup 和 ApplicationInsightsAvailability 这两个服务的 addressPrefixes,然后将对应的公网 CIDR 段手动添加到虚拟机公网入口的白名单中。至于 AzureMonitor,它在当前环境中已经可以作为服务标记使用,因此无需手动添加其 IP 地址段。
注意:IP 地址范围会定期更新,因此不能将一次导出的列表视为永久配置。应定期同步 JSON 文件,并自动化更新防火墙规则。
参考资料
Application Insights 可用性测试:https://learn.microsoft.com/azure/azure-monitor/app/availability
Azure Monitor 终结点访问与防火墙配置:https://learn.microsoft.com/azure/azure-monitor/fundamentals/azure-monitor-network-access
服务标记概述:https://learn.microsoft.com/azure/virtual-network/service-tags-overview
在防火墙后的内部服务器上使用可用性测试:https://learn.microsoft.com/troubleshoot/azure/azure-monitor/app-insights/availability/internal-server-availability-tests-firewall



