Краткое руководство. Создание внутренней подсистемы балансировки нагрузки для балансировки нагрузки виртуальных машин с помощью 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 = 'CreateINTLBQS-rg'
Location = 'westus2'
}
New-AzResourceGroup @rg
Настройка виртуальной сети
При создании внутренней подсистемы балансировки нагрузки виртуальная сеть настраивается в качестве сети для подсистемы балансировки нагрузки. Прежде чем развертывать виртуальные машины и тестировать подсистему балансировки нагрузки, создайте вспомогательные ресурсы виртуальной сети.
Создание общедоступного IP-адреса для шлюза NAT
Создайте виртуальную сеть для серверных виртуальных машин.
Создайте группу безопасности сети для определения входящих подключений к виртуальной сети.
Создайте узел Бастиона Azure для безопасного управления виртуальными машинами во внутреннем пуле.
Создание общедоступного IP-адреса
Чтобы создать общедоступный IP-адрес для шлюза NAT, используйте командлет New-AzPublicIpAddress.
## Create public IP address for NAT gateway and place IP in variable ##
$gwpublicip = @{
Name = 'myNATgatewayIP'
ResourceGroupName = $rg.name
Location = 'westus2'
Sku = 'Standard'
AllocationMethod = 'static'
Zone = 1,2,3
}
$gwpublicip = New-AzPublicIpAddress @gwpublicip
Чтобы создать зональный общедоступный IP-адрес в зоне доступности 1, используйте следующую команду:
## Create a zonal public IP address for NAT gateway and place IP in variable ##
$gwpublicip = @{
Name = 'myNATgatewayIP'
ResourceGroupName = $rg.name
Location = 'westus2'
Sku = 'Standard'
AllocationMethod = 'static'
Zone = 1
}
$gwpublicip = New-AzPublicIpAddress @gwpublicip
Примечание.
Общедоступный IP-адрес используется шлюзом NAT для обеспечения исходящего подключения для виртуальных машин в серверном пуле. Это рекомендуется при создании внутренней подсистемы балансировки нагрузки и необходимости в ресурсах внутреннего пула для исходящего подключения. Дополнительные сведения см. в разделе шлюза NAT.
Создание виртуальной сети, группы безопасности сети, узла-бастиона и шлюза NAT
Создайте виртуальную сеть с помощью командлета New-AzVirtualNetwork
Создайте правило группы безопасности сети с помощью командлета New-AzNetworkSecurityRuleConfig
Создайте узел Бастиона Azure с помощью командлета New-AzBastion
Создайте ресурс шлюза NAT с помощью командлета New-AzNatGateway
Примените командлет New-AzVirtualNetworkSubnetConfig, чтобы связать шлюз NAT с подсетью виртуальной сети
Внимание
Почасовая цена начинается с момента развертывания Бастиона независимо от использования исходящих данных. Дополнительные сведения см. в разделе "Цены и номера SKU". Если вы развертываете Бастион в рамках руководства или теста, рекомендуется удалить этот ресурс после завершения работы с ним.
## Create NAT gateway resource ##
$nat = @{
ResourceGroupName = $rg.name
Name = 'myNATgateway'
IdleTimeoutInMinutes = '10'
Sku = 'Standard'
Location = 'westus2'
PublicIpAddress = $gwpublicip
}
$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. ##
$bastionip = @{
Name = 'myBastionIP'
ResourceGroupName = $rg.name
Location = 'westus2'
Sku = 'Standard'
AllocationMethod = 'Static'
}
$bastionip = New-AzPublicIpAddress @bastionip
## Create bastion host ##
$bastion = @{
ResourceGroupName = $rg.name
Name = 'myBastion'
PublicIpAddress = $bastionip
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
Создание подсистемы балансировки нагрузки
В этом разделе описано, как создать и настроить следующие компоненты подсистемы балансировки нагрузки:
Создайте внешний IP-адрес с помощью New-AzLoadBalancerFrontendIpConfig для пула интерфейсных IP-адресов. Этот IP-адрес получает входящий трафик в подсистеме балансировки нагрузки.
Создание серверного пула адресов с помощью New-AzLoadBalancerBackendAddressPoolConfig для трафика, отправляемого из интерфейса подсистемы балансировки нагрузки
Создайте с помощью командлета Add-AzLoadBalancerProbeConfig пробу работоспособности, которая оценивает работоспособность экземпляров виртуальной машины во внутреннем пуле
Создайте с помощью командлета Add-AzLoadBalancerRuleConfig правило подсистемы балансировки нагрузки, которое определяет способ распределения трафика между виртуальными машинами
Теперь создайте общедоступную подсистему балансировки нагрузки с помощью командлета New-AzLoadBalancer
## Place virtual network created in previous step into a variable. ##
$net = @{
Name = 'myVNet'
ResourceGroupName = $rg.name
}
$vnet = Get-AzVirtualNetwork @net
## Create load balancer frontend configuration and place in variable. ##
$lbip = @{
Name = 'myFrontEnd'
PrivateIpAddress = '10.1.0.4'
SubnetId = $vnet.subnets[0].Id
}
$feip = New-AzLoadBalancerFrontendIpConfig @lbip
## 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
## 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
Создание виртуальных машин
В этом разделе описано, как создать две виртуальные машины для внутреннего пула подсистемы балансировки нагрузки.
Создайте три сетевых интерфейса с помощью командлета New-AzNetworkInterface.
Укажите имя и пароль администратора для этих виртуальных машин с помощью командлета Get-Credential
Создайте виртуальные машины с помощью следующих командлетов:
# Set the administrator and password for the VMs. ##
$cred = Get-Credential
## Place virtual network created in previous step 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. ##
$sg = @{
Name = 'myNSG'
ResourceGroupName = $rg.name
}
$nsg = Get-AzNetworkSecurityGroup @sg
## 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
Создание тестовой виртуальной машины
Создайте виртуальную машину с помощью следующих командлетов:
# Set the administrator and password for the VM. ##
$cred = Get-Credential
## Place the virtual network into a variable. ##
$net = @{
Name = 'myVNet'
ResourceGroupName = $rg.name
}
$vnet = Get-AzVirtualNetwork @net
## Place the network security group into a variable. ##
$sg = @{
Name = 'myNSG'
ResourceGroupName = $rg.name
}
$nsg = Get-AzNetworkSecurityGroup @sg
## Command to create network interface for VM ##
$nic = @{
Name = "myNicTestVM"
ResourceGroupName = $rg.name
Location = 'westus2'
Subnet = $vnet.Subnets[0]
NetworkSecurityGroup = $nsg
}
$nicVM = New-AzNetworkInterface @nic
## Create a virtual machine configuration for VMs ##
$vmsz = @{
VMName = "myTestVM"
VMSize = 'Standard_DS1_v2'
}
$vmos = @{
ComputerName = "myTestVM"
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
}
New-AzVM @vm
Тестирование подсистемы балансировки нагрузки
Найдите частный IP-адрес для подсистемы балансировки нагрузки на экране обзора. В меню слева щелкните Все службы, выберите Все ресурсы, а затем — myLoadBalancer.
Запишите или скопируйте адрес рядом с частным IP-адресом на экранеобзора myLoadBalancer.
В меню слева щелкните Все службы, выберите Все ресурсы, а затем в списке ресурсов выберите виртуальную машину myTestVM, расположенную в группе ресурсов CreateIntLBQS-rg.
На странице Обзор выберите Подключиться и Бастион.
Введите имя пользователя и пароль, введенные в процессе создания виртуальной машины.
На виртуальной машине myTestVM откройте браузер Internet Explorer.
Введите IP-адрес с предыдущего шага в адресную строку браузера. Отображается пользовательская страница веб-сервера IIS.
Чтобы увидеть, как подсистема балансировки нагрузки распределяет трафик по всем трем виртуальным машинам, вы можете принудительно обновить веб-браузер с тестового компьютера.
Очистка ресурсов
Чтобы удалить группу ресурсов, подсистему балансировки нагрузки и все остальные ресурсы, можно воспользоваться командлетом Remove-AzResourceGroup.
Remove-AzResourceGroup -Name $rg.name
Следующие шаги
В этом кратком руководстве:
вы создали внутреннюю подсистему балансировки нагрузки;
подключили к ней виртуальные машины;
настроили правило трафика подсистемы балансировки нагрузки и пробу работоспособности;
Протестировали подсистему балансировки нагрузки
Чтобы узнать больше об Azure Load Balancer, ознакомьтесь со следующей статьей: