跨资源组现有VNet创建Azure负载均衡器时遇后端IP配置错误
解决Azure负载均衡器创建时的"Not all Backend IP Configurations referenced by the Load Balancer"错误
我来帮你拆解这个问题:当负载均衡器要和虚拟机规模集(VM Scale Set)配合使用时,必须给后端地址池绑定对应的子网,你当前的错误就是因为后端池没有关联到任何网络资源,导致Azure无法识别后端实例的归属范围。
问题根源
你现在创建的BackendAddressPoolConfig只是一个空的命名配置,没有绑定到VNet子网。而负载均衡器的规则(比如你配置的HTTP规则)已经引用了这个后端池,但后端池本身没有明确的网络边界,Azure自然会报错说“并非所有后端IP配置都被负载均衡器正确引用”。
修正方案
核心就是在创建BackendAddressPoolConfig时,通过-Subnet参数指定它关联的子网(也就是你后续要部署VMSS的子网,和前端IP的子网可以是同一个,也可以分开,看你的架构设计)。
修正后的完整PowerShell代码
# 获取跨资源组的目标VNet $vnet = Get-AzureRmVirtualNetwork -Name $vnetname -ResourceGroupName $vnetrg -ErrorAction Stop # 选择你要使用的子网(这里沿用你代码里的第3个子网,索引为2) $subnetMain = $vnet.Subnets[2] $subNetName = $subnetMain.Name # 创建前端IP配置(这部分你的原有代码没问题) $frontendIP = New-AzureRmLoadBalancerFrontendIpConfig -Name LB-Frontend ` -SubnetId $subnetMain.Id # 关键修正:给后端地址池绑定子网 $beaddresspool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name "LB-backend" ` -Subnet $subnetMain # 以下部分保持你原有的配置逻辑即可 $inboundNATRule1 = New-AzureRmLoadBalancerInboundNatRuleConfig -Name "RDP" ` -FrontendIpConfiguration $frontendIP ` -Protocol TCP ` -FrontendPort 3389 ` -BackendPort 3389 $healthProbe = New-AzureRmLoadBalancerProbeConfig -Name "HealthProbe" ` -RequestPath "Default.htm" ` -Protocol http -Port 80 ` -IntervalInSeconds 15 ` -ProbeCount 2 $lbrule = New-AzureRmLoadBalancerRuleConfig -Name "HTTP" ` -FrontendIpConfiguration $frontendIP ` -BackendAddressPool $beAddressPool ` -Probe $healthProbe ` -Protocol Tcp ` -FrontendPort 80 ` -BackendPort 80 # 创建负载均衡器 $nrplb = New-AzureRmLoadBalancer -ResourceGroupName $currentrg ` -Name "NRP-LB" ` -Location $loc ` -FrontendIpConfiguration $frontendIP ` -InboundNatRule $inboundNATRule1 ` -LoadBalancingRule $lbrule ` -BackendAddressPool $beAddressPool ` -Probe $healthProbe
额外注意事项
- 子网绑定的作用:VMSS的实例会部署在指定子网内,负载均衡器必须和这个子网关联,才能自动发现VMSS实例并将流量路由过去。
- 子网选择:如果你的VMSS要部署在其他子网,只需要把
-Subnet参数换成对应的子网对象即可。 - 后续VMSS配置:等负载均衡器创建完成后,配置VMSS时要将其网络设置关联到这个
LB-backend地址池,这样VMSS的实例才能被负载均衡器管理。
内容的提问来源于stack exchange,提问作者Daniel W.
相关产品推荐
相关产品推荐

