Azure VM Scale Set节点无法访问外部资源技术咨询
排查RHEL VMSS节点无外部出站流量问题
碰到过好多次类似的VMSS出站故障,结合你提到的「同一子网前端RHEL VM正常、VMSS节点不行」这个关键信息,咱们一步步来定位问题:
1. 先揪出负载均衡器的问题(它本该当NAT网关用)
首先确认你的负载均衡器是公共负载均衡器(内部LB没法做NAT网关),然后重点查这几点:
- 有没有配置出站规则:得确保出站规则关联了VMSS对应的后端池,并且绑定了有效的公共IP/公共IP前缀。要是没出站规则,LB根本不会帮VMSS做NAT转发。
- 后端池健康状态:如果VMSS节点没通过LB的健康探针,会被踢出后端池,自然走不了LB的NAT。去LB的「后端池」页面看看,节点是不是显示「健康」。
- 规则优先级:有没有其他高优先级的NSG规则或者路由规则,把LB的出站流量给拦截了?比如子网NSG里如果有拒绝所有出站的规则,优先级比LB出站规则高的话,肯定会生效。
2. 检查VMSS的网络配置是否正确
VMSS的网络设置和普通VM有差异,别漏了这些点:
- 网络接口是否关联LB后端池:很多ARM模板部署时会漏掉这个关联,导致VMSS节点根本没接入LB。去VMSS的「网络」页面,看看网络接口配置里有没有绑定到目标LB的后端池。
- 有效路由表:挑一个VMSS实例,进入它的「网络接口」→「有效路由」,确认默认路由的下一跳是不是指向LB的出站规则,而不是其他无效的自定义路由。
- 有没有实例级公共IP:如果给VMSS配置了实例级公IP,节点可能会直接用自己的公IP出站,而不走LB的NAT。要是这个公IP没被NSG允许,就会出现出站失败。
3. 登录RHEL节点排查本地配置
既然前端VM正常,那VMSS节点的本地配置大概率有差异:
- 检查默认网关:执行
ip route show,看看默认网关是不是和前端VM一致(子网的网关地址)。如果路由不对,流量根本发不出去。 - 本地防火墙:用
firewall-cmd --list-all或者iptables -L看看,有没有本地防火墙规则禁止了出站流量?比如不小心配置了拒绝所有出站的规则。 - DNS解析测试:执行
nslookup azure.microsoft.com,如果解析失败,可能是VMSS没继承子网的DNS服务器配置,导致连域名都解析不了。 - 抓包验证:在节点上跑
tcpdump -i eth0 dst port 80,然后尝试访问外部网站,看看有没有数据包发出,或者有没有收到「不可达」的ICMP错误,这能帮你判断是流量没发出去,还是被中途拦截了。
4. 回头检查ARM模板的关键配置
如果是模板部署的问题,重点核对这几个地方:
- VMSS的网络接口配置里,
loadBalancerBackendAddressPools有没有正确指向LB的后端池资源ID? - LB的出站规则里,
backendAddressPool是不是关联了VMSS的后端池,frontendIPConfigurations是不是绑定了公共IP? - 有没有给VMSS的子网配置了自定义路由表,把默认路由指向了其他地方(比如没配置的VPN网关)?
一个常见的坑
我碰到最多的情况就是:ARM模板里VMSS的网络接口没关联LB的后端池,导致节点根本没接入LB的NAT网关。你可以先在Azure门户里手动把VMSS节点加入LB的后端池,测试下能不能出站——如果能,那肯定是模板里的关联配置写错了。
内容的提问来源于stack exchange,提问作者Mitms
相关产品推荐
相关产品推荐

