如何从Azure App Service访问私有虚拟机本地运行的Windows服务
App Service 经VNet集成访问VM内服务的配置方法
核心访问地址
只要VNet集成配置正确,不需要使用任何特殊映射地址,直接用虚拟机的私有IP拼接服务端口即可,访问地址格式为 x.x.x.x:abc,根据服务协议补全前缀就是最终调用地址,比如HTTP服务对应 http://x.x.x.x:abc。
注意:绝对不要用localhost或者127.0.0.1访问,这个地址指向App Service自身的运行环境,根本到不了目标虚拟机。
必做配置检查(90%的连接失败都是这几个问题)
- 校验VNet集成有效性:App Service配置的VNet集成,必须和目标虚拟机在同一个虚拟网络内;如果跨VNet部署,要提前配置VNet对等并打通路由,确保集成子网的流量能正常转发到虚拟机所在子网。
- 放行虚拟机本地防火墙:VM内能通过
localhost:abc访问只代表服务本地运行正常,不代表外部流量能接入。需要在Windows Defender防火墙(或第三方安全软件)里添加入站规则,放行abc端口的TCP流量,来源地址段填App Service集成子网的CIDR即可,不需要全开公网访问,安全性有保障。 - 确认服务监听地址:不要让目标Windows服务只绑定
127.0.0.1回环地址,需要把服务绑定到0.0.0.0(监听所有网卡地址)或者直接绑定VM的私有IPx.x.x.x。改完配置先在VM本地测试访问x.x.x.x:abc,如果本地用私有IP都访问失败,先调整服务监听配置再往下排查。 - 检查NSG规则:虚拟机所在子网关联的网络安全组、虚拟机网卡绑定的网络安全组,都要添加入站允许规则,放行来自App Service集成子网地址段、目标端口为
abc的TCP流量,规则优先级要高于默认的拒绝入站规则。
连通性验证方式
所有配置调整完后,进入App Service的Kudu高级工具,打开内置的PowerShell或Bash控制台,执行命令 tcpping x.x.x.x:abc 做连通性测试:
- 如果返回连通成功,说明网络链路完全正常,Web应用里直接用前面提到的
x.x.x.x:abc地址调用服务即可 - 如果返回连通失败,按「NSG规则→VM本地防火墙→服务监听地址→VNet路由配置」的顺序倒推排查即可
跨区域部署场景注意:如果App Service和虚拟机不在同一个Azure区域,配置VNet对等后要确认开启了跨区域流量转发,同时VNet集成侧没有配置自定义路由拦截到虚拟机网段的流量。
内容的提问来源于stack exchange,提问作者Mihir
相关产品推荐
相关产品推荐

