Azure External Load Balancer — добавление правил LB с помощью PowerShell

Я боролся с этой проблемой с помощью балансировщиков нагрузки Azure уже пару дней и все еще рву на себе волосы... :(

Во-первых, я могу без проблем войти в Azure, используя:

Login-AzureRmAccount

Итак, вот ситуация:

Внешний балансировщик нагрузки Несколько интерфейсных пулов с уникальными общедоступными IP-адресами Несколько внутренних пулов с уникальными частными IP-адресами (с виртуальными машинами в пулах) Передние и внутренние пулы соответствуют 1:1 LBRule1 — FrontEndPool -> BackEndPool Порт 80 на переднем и задний конец LBRule1 — FrontEndPool -> BackEndPool Порт 443 на переднем и заднем концах

Теперь, при попытке добавить еще один LBRule с 80/443, я не могу, потому что он уже используется. Говоря со службой поддержки 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 

Это делает то же самое, ничего. Ни ошибок, ничего.

Кто-нибудь может увидеть, что мне не хватает?


person DC.Skells    schedule 18.12.2016    source источник


Ответы (1)


Хорошо, не уверен, почему это имеет значение, но я это исправил (думаю, мне нужно было высказаться и опубликовать вопрос). В любом случае, я надеюсь, что это поможет кому-то еще, кто находится в ситуации:

Добавьте следующую строку в конец скрипта:

$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

person DC.Skells    schedule 18.12.2016