Краткое руководство. Создание общедоступной подсистемы балансировки нагрузки с помощью Azure PowerShell для распределения нагрузки между виртуальными машинами
Начните работу с Azure Load Balancer, создав с помощью Azure PowerShell общедоступную подсистему балансировки нагрузки и две виртуальные машины. Кроме того, вы развертываете другие ресурсы, включая Бастион Azure, шлюз NAT, виртуальную сеть и необходимые подсети.
Необходимые компоненты
Учетная запись Azure с активной подпиской. Создание бесплатной учетной записи
Локальная установка Azure PowerShell или Azure Cloud Shell
Чтобы установить и использовать PowerShell локально, для работы с этой статьей вам понадобится модуль Azure PowerShell 5.4.1 или более поздней версии. Выполните командлет Get-Module -ListAvailable Az
, чтобы узнать установленную версию. Если вам необходимо выполнить обновление, ознакомьтесь со статьей, посвященной установке модуля Azure PowerShell. При использовании PowerShell на локальном компьютере также нужно запустить Connect-AzAccount
, чтобы создать подключение к Azure.
Создание или изменение группы ресурсов
Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими.
Создайте группу ресурсов с помощью командлета New-AzResourceGroup:
$rg = @{
Name = 'CreatePubLBQS-rg'
Location = 'westus2'
}
New-AzResourceGroup @rg
Создание общедоступного IP-адреса
Создайте общедоступный IP-адрес с помощью командлета New-AzPublicIpAddress.
$publicip = @{
Name = 'myPublicIP'
ResourceGroupName = $rg.name
Location = 'westus2'
Sku = 'Standard'
AllocationMethod = 'static'
Zone = 1,2,3
}
New-AzPublicIpAddress @publicip
Чтобы создать зональный общедоступный IP-адрес в зоне доступности 1, используйте следующую команду:
$publicip = @{
Name = 'myPublicIP'
ResourceGroupName = $rg.name
Location = 'westus2'
Sku = 'Standard'
AllocationMethod = 'static'
Zone = 1
}
New-AzPublicIpAddress @publicip
Создание подсистемы балансировки нагрузки
В этом разделе описано, как создать и настроить следующие компоненты подсистемы балансировки нагрузки:
Создайте внешний IP-адрес с помощью New-AzLoadBalancerFrontendIpConfig для пула интерфейсных IP-адресов. Этот IP-адрес получает входящий трафик в подсистеме балансировки нагрузки.
Создайте серверный пул адресов с помощью New-AzLoadBalancerBackendAddressPoolConfig для трафика, отправляемого из интерфейса подсистемы балансировки нагрузки. В этом пуле вы развернете серверные виртуальные машины
Создайте с помощью командлета Add-AzLoadBalancerProbeConfig пробу работоспособности, которая оценивает работоспособность экземпляров виртуальной машины во внутреннем пуле
Создайте с помощью командлета Add-AzLoadBalancerRuleConfig правило подсистемы балансировки нагрузки, которое определяет способ распределения трафика между виртуальными машинами
Теперь создайте общедоступную подсистему балансировки нагрузки с помощью командлета New-AzLoadBalancer
## Place public IP created in previous steps into variable. ##
$pip = @{
Name = 'myPublicIP'
ResourceGroupName = $rg.name
}
$publicIp = Get-AzPublicIpAddress @pip
## Create load balancer frontend configuration and place in variable. ##
$fip = @{
Name = 'myFrontEnd'
PublicIpAddress = $publicIp
}
$feip = New-AzLoadBalancerFrontendIpConfig @fip
## Create backend address pool configuration and place in variable. ##
$bepool = New-AzLoadBalancerBackendAddressPoolConfig -Name 'myBackEndPool'
## Create the health probe and place in variable. ##
$probe = @{
Name = 'myHealthProbe'
Protocol = 'tcp'
Port = '80'
IntervalInSeconds = '360'
ProbeCount = '5'
}
$healthprobe = New-AzLoadBalancerProbeConfig @probe
## Create the load balancer rule and place in variable. ##
$lbrule = @{
Name = 'myHTTPRule'
Protocol = 'tcp'
FrontendPort = '80'
BackendPort = '80'
IdleTimeoutInMinutes = '15'
FrontendIpConfiguration = $feip
BackendAddressPool = $bePool
}
$rule = New-AzLoadBalancerRuleConfig @lbrule -EnableTcpReset -DisableOutboundSNAT
## Create the load balancer resource. ##
$loadbalancer = @{
ResourceGroupName = $rg.name
Name = 'myLoadBalancer'
Location = 'westus2'
Sku = 'Standard'
FrontendIpConfiguration = $feip
BackendAddressPool = $bePool
LoadBalancingRule = $rule
Probe = $healthprobe
}
New-AzLoadBalancer @loadbalancer
Настройка виртуальной сети
Прежде чем развертывать виртуальные машины и тестировать подсистему балансировки нагрузки, создайте вспомогательные ресурсы виртуальной сети.
Создайте виртуальную сеть для серверных виртуальных машин.
Создайте группу безопасности сети для определения входящих подключений к виртуальной сети.
Создайте узел Бастиона Azure для безопасного управления виртуальными машинами во внутреннем пуле.
Используйте шлюз NAT, чтобы предоставить исходящий доступ в Интернет ресурсам, размещенным во внутреннем пуле подсистемы балансировки нагрузки.
Создание виртуальной сети, группы безопасности сети, узла-бастиона и шлюза NAT
Создайте виртуальную сеть с помощью командлета New-AzVirtualNetwork
Создайте правило группы безопасности сети с помощью командлета New-AzNetworkSecurityRuleConfig
Создайте узел Бастиона Azure с помощью командлета New-AzBastion
Создайте группу безопасности сети с помощью командлета New-AzNetworkSecurityGroup
Создайте ресурс шлюза NAT с помощью командлета New-AzNatGateway
Примените командлет New-AzVirtualNetworkSubnetConfig, чтобы связать шлюз NAT с подсетью виртуальной сети
Внимание
Почасовая цена начинается с момента развертывания Бастиона независимо от использования исходящих данных. Дополнительные сведения см. в разделе "Цены и номера SKU". Если вы развертываете Бастион в рамках руководства или теста, рекомендуется удалить этот ресурс после завершения работы с ним.
## Create public IP address for NAT gateway ##
$ip = @{
Name = 'myNATgatewayIP'
ResourceGroupName = $rg.name
Location = 'westus2'
Sku = 'Standard'
AllocationMethod = 'Static'
}
$publicIP = New-AzPublicIpAddress @ip
## Create NAT gateway resource ##
$nat = @{
ResourceGroupName = $rg.name
Name = 'myNATgateway'
IdleTimeoutInMinutes = '10'
Sku = 'Standard'
Location = 'westus2'
PublicIpAddress = $publicIP
}
$natGateway = New-AzNatGateway @nat
## Create backend subnet config ##
$subnet = @{
Name = 'myBackendSubnet'
AddressPrefix = '10.1.0.0/24'
NatGateway = $natGateway
}
$subnetConfig = New-AzVirtualNetworkSubnetConfig @subnet
## Create Azure Bastion subnet. ##
$bastsubnet = @{
Name = 'AzureBastionSubnet'
AddressPrefix = '10.1.1.0/24'
}
$bastsubnetConfig = New-AzVirtualNetworkSubnetConfig @bastsubnet
## Create the virtual network ##
$net = @{
Name = 'myVNet'
ResourceGroupName = $rg.name
Location = 'westus2'
AddressPrefix = '10.1.0.0/16'
Subnet = $subnetConfig,$bastsubnetConfig
}
$vnet = New-AzVirtualNetwork @net
## Create public IP address for bastion host. ##
$ip = @{
Name = 'myBastionIP'
ResourceGroupName = $rg.name
Location = 'westus2'
Sku = 'Standard'
AllocationMethod = 'Static'
}
$publicip = New-AzPublicIpAddress @ip
## Create bastion host ##
$bastion = @{
ResourceGroupName = $rg.name
Name = 'myBastion'
PublicIpAddress = $publicip
VirtualNetwork = $vnet
}
New-AzBastion @bastion -AsJob
## Create rule for network security group and place in variable. ##
$nsgrule = @{
Name = 'myNSGRuleHTTP'
Description = 'Allow HTTP'
Protocol = '*'
SourcePortRange = '*'
DestinationPortRange = '80'
SourceAddressPrefix = 'Internet'
DestinationAddressPrefix = '*'
Access = 'Allow'
Priority = '2000'
Direction = 'Inbound'
}
$rule1 = New-AzNetworkSecurityRuleConfig @nsgrule
## Create network security group ##
$nsg = @{
Name = 'myNSG'
ResourceGroupName = $rg.name
Location = 'westus2'
SecurityRules = $rule1
}
New-AzNetworkSecurityGroup @nsg
Создание виртуальных машин
В этом разделе описано, как создать две виртуальные машины для внутреннего пула подсистемы балансировки нагрузки.
Создайте два сетевых интерфейса с помощью командлета New-AzNetworkInterface
Укажите имя и пароль администратора для этих виртуальных машин с помощью командлета Get-Credential
Создайте виртуальные машины с помощью следующих командлетов:
# Set the administrator and password for the VMs. ##
$cred = Get-Credential
## Place the virtual network into a variable. ##
$net = @{
Name = 'myVNet'
ResourceGroupName = $rg.name
}
$vnet = Get-AzVirtualNetwork @net
## Place the load balancer into a variable. ##
$lb = @{
Name = 'myLoadBalancer'
ResourceGroupName = $rg.name
}
$bepool = Get-AzLoadBalancer @lb | Get-AzLoadBalancerBackendAddressPoolConfig
## Place the network security group into a variable. ##
$ns = @{
Name = 'myNSG'
ResourceGroupName = $rg.name
}
$nsg = Get-AzNetworkSecurityGroup @ns
## For loop with variable to create virtual machines for load balancer backend pool. ##
for ($i=1; $i -le 2; $i++){
## Command to create network interface for VMs ##
$nic = @{
Name = "myNicVM$i"
ResourceGroupName = $rg.name
Location = 'westus2'
Subnet = $vnet.Subnets[0]
NetworkSecurityGroup = $nsg
LoadBalancerBackendAddressPool = $bepool
}
$nicVM = New-AzNetworkInterface @nic
## Create a virtual machine configuration for VMs ##
$vmsz = @{
VMName = "myVM$i"
VMSize = 'Standard_DS1_v2'
}
$vmos = @{
ComputerName = "myVM$i"
Credential = $cred
}
$vmimage = @{
PublisherName = 'MicrosoftWindowsServer'
Offer = 'WindowsServer'
Skus = '2019-Datacenter'
Version = 'latest'
}
$vmConfig = New-AzVMConfig @vmsz `
| Set-AzVMOperatingSystem @vmos -Windows `
| Set-AzVMSourceImage @vmimage `
| Add-AzVMNetworkInterface -Id $nicVM.Id
## Create the virtual machine for VMs ##
$vm = @{
ResourceGroupName = $rg.name
Location = 'westus2'
VM = $vmConfig
Zone = "$i"
}
New-AzVM @vm -AsJob
}
Развертывания виртуальных машин и узла-бастиона отправляются как задания PowerShell. Чтобы просмотреть состояние заданий, используйте команду Get-Job.
Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Long Running O… AzureLongRunni… Completed True localhost New-AzBastion
2 Long Running O… AzureLongRunni… Completed True localhost New-AzVM
3 Long Running O… AzureLongRunni… Completed True localhost New-AzVM
Перед переходом к следующим шагам убедитесь, что параметр Состояние для процесса создания виртуальной машины имеет значение Завершено.
Примечание.
Azure предоставляет IP-адрес исходящего доступа по умолчанию для виртуальных машин, которые либо не назначены общедоступным IP-адресом, либо находятся в серверном пуле внутренней подсистемы балансировки нагрузки Azure. Механизм IP-адреса исходящего трафика по умолчанию предоставляет исходящий IP-адрес, который нельзя настроить.
IP-адрес исходящего доступа по умолчанию отключен при возникновении одного из следующих событий:
- Общедоступный IP-адрес назначается виртуальной машине.
- Виртуальная машина размещается в серверном пуле стандартной подсистемы балансировки нагрузки с правилами исходящего трафика или без нее.
- Ресурс шлюза NAT Azure назначается подсети виртуальной машины.
Виртуальные машины, созданные с помощью масштабируемых наборов виртуальных машин в гибком режиме оркестрации, не имеют исходящего доступа по умолчанию.
Дополнительные сведения об исходящих подключениях в Azure см. в статье об исходящем доступе по умолчанию в Azure и использовании преобразования исходящих сетевых адресов (SNAT) для исходящих подключений.
Установить IIS
Воспользуйтесь командлетом Set-AzVMExtension, чтобы установить расширение пользовательских скриптов.
Это расширение запускает PowerShell Add-WindowsFeature Web-Server
для установки веб-сервера IIS, а затем обновляет страницу Default.htm для отображения имени узла виртуальной машины.
Внимание
Прежде чем продолжить убедитесь, что развертывания виртуальной машины, выполняемые на предыдущих шагах, завершились. Используйте Get-Job
, чтобы проверить состояние заданий развертывания виртуальной машины.
## For loop with variable to install custom script extension on virtual machines. ##
for ($i=1; $i -le 2; $i++)
{
$ext = @{
Publisher = 'Microsoft.Compute'
ExtensionType = 'CustomScriptExtension'
ExtensionName = 'IIS'
ResourceGroupName = $rg.name
VMName = "myVM$i"
Location = 'westus2'
TypeHandlerVersion = '1.8'
SettingString = '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}'
}
Set-AzVMExtension @ext -AsJob
}
Расширения развертываются как задания PowerShell. Чтобы просмотреть состояние заданий установки, используйте Get-Job:
Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
8 Long Running O… AzureLongRunni… Running True localhost Set-AzVMExtension
9 Long Running O… AzureLongRunni… Running True localhost Set-AzVMExtension
Перед переходом к следующим шагам убедитесь, что параметр Состояние для всех заданий имеет значение Завершено.
Тестирование подсистемы балансировки нагрузки
Используйте командлет Get-AzPublicIPAddress, чтобы получить сведения об общедоступном IP-адресе подсистемы балансировки нагрузки:
$ip = @{
ResourceGroupName = $rg.name
Name = 'myPublicIP'
}
Get-AzPublicIPAddress @ip | select IpAddress
Скопируйте общедоступный IP-адрес и вставьте его в адресную строку браузера. В браузере отобразится страница по умолчанию веб-сервера IIS.
Очистка ресурсов
Чтобы удалить группу ресурсов, подсистему балансировки нагрузки и все остальные ресурсы, можно воспользоваться командлетом Remove-AzResourceGroup.
Remove-AzResourceGroup -Name $rg.name
Следующие шаги
В этом кратком руководстве вы:
создать Azure Load Balancer;
подключить две виртуальные машины к подсистеме балансировки нагрузки;
Протестировали подсистему балансировки нагрузки
Чтобы узнать больше об Azure Load Balancer, ознакомьтесь со следующей статьей: