Azure外部负载均衡器 - 使用PowerShell添加LB规则

时间:2016-12-18 21:27:42

标签: powershell azure azure-powershell azure-virtual-network

我一直在使用Azure负载均衡器解决这个问题几天了,我仍在拔头发...... :(

首先,我可以使用以下方式登录Azure:

Login-AzureRmAccount

所以,情况如下:

外部负载均衡器 具有唯一公共IP地址的多个前端池 具有唯一专用IP地址的多个后端池(池中具有VM) 前端和后端池匹配1:1 LBRule1 - FrontEndPool - > BackEndPool前端和后端的端口80 LBRule1 - FrontEndPool - > BackEndPool前端和后端的端口443

现在,当试图添加另一个80/443的LBRule时,我不能,因为它已经被使用了。与Microsoft支持人员交谈,它只能通过Powershell完成(我也启用/禁用了浮动IP)。

这是我的剧本:

# Variables
$rg='ResourceGroupName'
$location='west us'
$lb=Get-AzureRmLoadBalancer -Name LBName -ResourceGroupName $rg 
$FEConfig=get-AzureRmLoadBalancerFrontendIpConfig -Name FEPoolName -LoadBalancer $lb
$fec=Get-AzureRmLoadBalancerFrontendIpConfig -Name $FEConfig.Name -LoadBalancer $lb
$BEPool=Get-AzureRmLoadBalancerBackendAddressPoolConfig -Name BEPoolName -LoadBalancer $lb
$BEP=Get-AzureRmLoadBalancerBackendAddressPoolConfig -Name $BEPool.Name -LoadBalancer $lb
$Probe=Get-AzureRmLoadBalancerProbeConfig -Name HTTP-80 -LoadBalancer $lb
$Probe1=Get-AzureRmLoadBalancerProbeConfig -Name HTTPS-443 -LoadBalancer $lb
$LBRule1=New-AzureRmLoadBalancerRuleConfig -Name APP-HTTP80 -FrontendIpConfigurationId $fec.Id -BackendAddressPoolId $BEP.Id -ProbeId $Probe.Id -Protocol Tcp -FrontendPort 80 -BackendPort 80 -EnableFloatingIP 
$LBRule2=New-AzureRmLoadBalancerRuleConfig -Name APP-HTTP443 -FrontendIpConfigurationId $fec.Id -BackendAddressPoolId $BEP.Id -ProbeId $Probe.Id -Protocol Tcp -FrontendPort 443 -BackendPort 443 -EnableFloatingIP 

# Command
$lb.LoadBalancingRules.Add($LBRule1)
$lb.LoadBalancingRules.Add($LBRule2)

现在,当我运行它时,没有任何反应。如果您使用Powershell ISE来使用它,您将看到变量将返回正确的信息,但查看资源管理器,不会创建新池。

所以,我做了一些研究并使用上面相同的变量集,我把它放在一起:

New-AzureRmLoadBalancerRuleConfig -Name $FEConfig.Name -FrontendIpConfigurationId $fec.Id -BackendAddressPoolId $BEP.Id -ProbeId $Probe.Id -Protocol Tcp -FrontendPort 80 -BackendPort 80 -EnableFloatingIP 

这同样的事情,没有。没有错误,没有。

任何人都能看到我错过的东西吗?

1 个答案:

答案 0 :(得分:2)

好的,不知道为什么会有所不同,但我修好了(我想我需要发泄并发布问题)。无论如何,我希望这可以帮助处于这种情况的其他人:

将以下行添加到脚本的末尾:

$Set=Set-AzureRmLoadBalancer -LoadBalancer $lb

所以整个事情看起来像:

# Variables
$rg='ResourceGroupName'
$location='west us'
$lb=Get-AzureRmLoadBalancer -Name LBName -ResourceGroupName $rg 
$FEConfig=get-AzureRmLoadBalancerFrontendIpConfig -Name FEPoolName -LoadBalancer $lb
$fec=Get-AzureRmLoadBalancerFrontendIpConfig -Name $FEConfig.Name -LoadBalancer $lb
$BEPool=Get-AzureRmLoadBalancerBackendAddressPoolConfig -Name BEPoolName -LoadBalancer $lb
$BEP=Get-AzureRmLoadBalancerBackendAddressPoolConfig -Name $BEPool.Name -LoadBalancer $lb
$Probe=Get-AzureRmLoadBalancerProbeConfig -Name HTTP-80 -LoadBalancer $lb
$Probe1=Get-AzureRmLoadBalancerProbeConfig -Name HTTPS-443 -LoadBalancer $lb
$LBRule1=New-AzureRmLoadBalancerRuleConfig -Name APP-HTTP80 -FrontendIpConfigurationId $fec.Id -BackendAddressPoolId $BEP.Id -ProbeId $Probe.Id -Protocol Tcp -FrontendPort 80 -BackendPort 80 -EnableFloatingIP 
$LBRule2=New-AzureRmLoadBalancerRuleConfig -Name APP-HTTP443 -FrontendIpConfigurationId $fec.Id -BackendAddressPoolId $BEP.Id -ProbeId $Probe.Id -Protocol Tcp -FrontendPort 443 -BackendPort 443 -EnableFloatingIP 

# Command
$lb.LoadBalancingRules.Add($LBRule1)
$lb.LoadBalancingRules.Add($LBRule2)
$Set=Set-AzureRmLoadBalancer -LoadBalancer $lb

嗯,我很高兴能够解决这个问题,我希望这有助于其他人。 :d