Guia de início rápido: criar um balanceador de carga interno para balancear a carga de máquinas virtuais usando o Azure PowerShell
Introdução ao Azure Load Balancer criando um balanceador de carga interno e duas máquinas virtuais com o Azure PowerShell. Além disso, você implanta outros recursos, incluindo o Azure Bastion, o NAT Gateway, uma rede virtual e as sub-redes necessárias.
Pré-requisitos
Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente
Azure PowerShell instalado localmente ou Azure Cloud Shell
Se optar por instalar e utilizar o PowerShell localmente, este artigo requer a versão 5.4.1 ou posterior do módulo Azure PowerShell. Execute Get-Module -ListAvailable Az
para localizar a versão instalada. Se precisar de atualizar, veja Install Azure PowerShell module (Instalar o módulo do Azure PowerShell). Se você estiver executando o PowerShell localmente, também precisará executar Connect-AzAccount
para criar uma conexão com o Azure.
Criar um grupo de recursos
Um grupo de recursos do Azure é um contentor lógico no qual os recursos do Azure são implementados e geridos.
Crie um grupo de recursos com New-AzResourceGroup.
$rg = @{
Name = 'CreateINTLBQS-rg'
Location = 'westus2'
}
New-AzResourceGroup @rg
Configurar uma rede virtual
Quando você cria um balanceador de carga interno, uma rede virtual é configurada como a rede para o balanceador de carga. Antes de implantar VMs e testar seu balanceador de carga, crie os recursos de rede virtual de suporte.
Criar um IP público para o gateway NAT
Criar uma rede virtual para as máquinas virtuais de back-end
Criar um grupo de segurança de rede para definir conexões de entrada com sua rede virtual
Criar um host do Azure Bastion para gerenciar com segurança as máquinas virtuais no pool de back-end
Crie um endereço IP público
Use New-AzPublicIpAddress para criar um endereço IP público para o gateway NAT.
## 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
Para criar um endereço IP público zonal na zona 1, use o seguinte comando:
## 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
Nota
O endereço IP público é usado pelo gateway NAT para fornecer conectividade de saída para as máquinas virtuais no pool de back-end. Isso é recomendado quando você cria um balanceador de carga interno e precisa que os recursos do pool de back-end tenham conectividade de saída. Para obter mais informações, consulte Gateway NAT.
Criar rede virtual, grupo de segurança de rede, host bastion e gateway NAT
Criar uma rede virtual com New-AzVirtualNetwork
Criar uma regra de grupo de segurança de rede com New-AzNetworkSecurityRuleConfig
Criar um host do Azure Bastion com New-AzBastion
Criar o recurso de gateway NAT com New-AzNatGateway
Use New-AzVirtualNetworkSubnetConfig para associar o gateway NAT à sub-rede da rede virtual
Importante
O preço por hora começa a partir do momento em que o Bastion é implantado, independentemente do uso de dados de saída. Para obter mais informações, consulte Preços e SKUs. Se você estiver implantando o Bastion como parte de um tutorial ou teste, recomendamos excluir esse recurso depois de terminar de usá-lo.
## 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
Criar um balanceador de carga
Esta secção descreve como pode criar e configurar os seguintes componentes do balanceador de carga:
Crie um IP frontend com New-AzLoadBalancerFrontendIpConfig para o pool de IP frontend. Este IP recebe o tráfego de entrada no balanceador de carga
Crie um pool de endereços de back-end com New-AzLoadBalancerBackendAddressPoolConfig para o tráfego enviado do front-end do balanceador de carga
Crie uma sonda de integridade com Add-AzLoadBalancerProbeConfig que determina a integridade das instâncias de VM de back-end
Crie uma regra de balanceador de carga com Add-AzLoadBalancerRuleConfig que define como o tráfego é distribuído para as VMs
Criar um balanceador de carga público com 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
Criar máquinas virtuais
Nesta seção, você cria as duas máquinas virtuais para o pool de back-end do balanceador de carga.
Crie três interfaces de rede com New-AzNetworkInterface
Definir um nome de usuário e senha de administrador para as VMs com Get-Credential
Crie as máquinas virtuais com:
# 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
As implantações das máquinas virtuais e do host bastion são enviadas como trabalhos do PowerShell. Para exibir o status dos trabalhos, use 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
Nota
O Azure fornece um IP de acesso de saída padrão para VMs que não recebem um endereço IP público ou estão no pool de back-end de um balanceador de carga básico interno do Azure. O mecanismo IP de acesso de saída padrão fornece um endereço IP de saída que não é configurável.
O IP de acesso de saída padrão é desativado quando um dos seguintes eventos acontece:
- Um endereço IP público é atribuído à VM.
- A VM é colocada no pool de back-end de um balanceador de carga padrão, com ou sem regras de saída.
- Um recurso do Gateway NAT do Azure é atribuído à sub-rede da VM.
As VMs que você cria usando conjuntos de dimensionamento de máquina virtual no modo de orquestração flexível não têm acesso de saída padrão.
Para obter mais informações sobre conexões de saída no Azure, consulte Acesso de saída padrão no Azure e Usar SNAT (Conversão de Endereço de Rede de Origem) para conexões de saída.
Instalar o IIS
Use Set-AzVMExtension para instalar a extensão de script personalizado.
A extensão é executada PowerShell Add-WindowsFeature Web-Server
para instalar o servidor Web do IIS e, em seguida, atualiza a página Default.htm para mostrar o nome do host da VM:
Importante
Certifique-se de que as implantações de máquina virtual foram concluídas a partir das etapas anteriores antes de continuar. Use Get-Job
para verificar o status dos trabalhos de implantação da máquina virtual.
## 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
}
As extensões são implantadas como trabalhos do PowerShell. Para exibir o status dos trabalhos de instalação, use 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
Criar a máquina virtual de teste
Crie a máquina virtual com:
# 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
Testar o balanceador de carga
Encontre o endereço IP privado do balanceador de carga na tela Visão geral . Selecione Todos os serviços no menu à esquerda, selecione Todos os recursos e, em seguida, selecione myLoadBalancer.
Anote ou copie o endereço ao lado de Endereço IP Privado na Visão geral do myLoadBalancer.
Selecione Todos os serviços no menu à esquerda, selecione Todos os recursos e, na lista de recursos, selecione myTestVM que está localizado no grupo de recursos CreateIntLBQS-rg .
Na página Descrição geral, selecione Ligar e, em seguida, Bastion.
Insira o nome de usuário e a senha inseridos durante a criação da VM.
Abra o Internet Explorer em myTestVM.
Digite o endereço IP da etapa anterior na barra de endereços do navegador. A página personalizada do servidor Web do IIS é exibida.
Para ver o balanceador de carga distribuir o tráfego entre as três VMs, você pode forçar a atualização do navegador da Web a partir da máquina de teste.
Clean up resources (Limpar recursos)
Quando não for mais necessário, você poderá usar o comando Remove-AzResourceGroup para remover o grupo de recursos, o balanceador de carga e os recursos restantes.
Remove-AzResourceGroup -Name $rg.name
Próximos passos
Neste início rápido:
Você criou um balanceador de carga interno
Máquinas virtuais anexadas
Configurada a regra de tráfego do balanceador de carga e a sonda de integridade
Testou o balanceador de carga
Para saber mais sobre o Azure Load Balancer, continue:
What is Azure Load Balancer? (O que é o Balanceador de Carga do Azure?)