Implantar um aplicativo de pilha dupla IPv6 usando o Standard Internal Load Balancer no Azure usando PowerShell

Este artigo mostra como implantar um aplicativo de pilha dual (IPv4 e IPv6) no Azure que inclui uma rede virtual e uma sub-rede de pilha dual, um balanceador de carga interno Standard com configurações de front-end dual (IPv4 e IPv6), VMs com adaptadores de rede que têm uma configuração de IP dual, um grupo de segurança de rede e IPs públicos.

O procedimento para criar um Load Balancer interno com suporte a IPv6 é quase idêntico ao processo para criar um Load Balancer IPv6 voltado para a Internet descrito aqui. As únicas diferenças para a criação de um balanceador de carga interno estão na configuração de front-end, conforme ilustrado no exemplo do PowerShell abaixo:

 $frontendIPv6 = New-AzLoadBalancerFrontendIpConfig `
 -Name "dsLbFrontEnd_v6" `
 -PrivateIpAddress "fd00:db8:deca:deed::100" `
 -PrivateIpAddressVersion "IPv6" `
 -Subnet $DsSubnet

As alterações que fazem da configuração acima uma configuração de frontend de um balanceador de carga interno são:

  • O PrivateIpAddressVersion é especificado como "IPv6"
  • O -PublicIpAddress argumento foi omitido ou substituído por -PrivateIpAddress. Observe que o endereço privado deve estar no intervalo do espaço de IP de sub-rede no qual o balanceador de carga interno será implantado. Se um endereço IP estático -PrivateIpAddress não for especificado, o próximo endereço IPv6 disponível será selecionado da sub-rede na qual o balanceador de carga interno está implantado.
  • A sub-rede de pilha dupla na qual o balanceador de carga interno será implantado é especificada com um -Subnetou -SubnetId argumento.

Azure Cloud Shell

O Azure hospeda o Azure Cloud Shell, um ambiente de shell interativo que pode ser usado por meio do navegador. É possível usar o bash ou o PowerShell com o Cloud Shell para trabalhar com os serviços do Azure. É possível usar os comandos pré-instalados do Cloud Shell para executar o código neste artigo, sem precisar instalar nada no seu ambiente local.

Para iniciar o Azure Cloud Shell:

Opção Exemplo/Link
Selecione Experimentar no canto superior direito de um bloco de código ou de comando. Selecionar Experimentar não copia automaticamente o código nem o comando para o Cloud Shell. Captura de tela que mostra um exemplo do recurso Testar no Azure Cloud Shell.
Acesse https://shell.azure.com ou selecione o botão Iniciar o Cloud Shell para abri-lo no navegador. Botão para iniciar o Azure Cloud Shell.
Selecione o botão Cloud Shell na barra de menus no canto superior direito do portal do Azure. Captura de tela que mostra o botão Cloud Shell no portal do Azure

Para usar o Azure Cloud Shell:

  1. Inicie o Cloud Shell.

  2. Selecione o botão Copiar em um bloco de código (ou bloco de comando) para copiar o código ou o comando.

  3. Cole o código ou comando na sessão do Cloud Shell selecionando Ctrl+Shift+V no Windows e no Linux, ou selecionando Cmd+Shift+V no macOS.

  4. Selecione Enter para executar o código ou o comando.

Se você optar por instalar e usar o PowerShell localmente, este artigo exigirá o módulo do Azure PowerShell versão 6.9.0 ou posterior. Execute Get-Module -ListAvailable Az para localizar a versão instalada. Se você precisa atualizar, consulte Instalar o módulo do Azure PowerShell. Se você estiver executando o PowerShell localmente, também precisará executar o Connect-AzAccount para criar uma conexão com o Azure.

Criar um grupo de recursos

Antes de criar sua rede virtual de pilha dupla, você deve criar um grupo de recursos com New-AzResourceGroup. O exemplo a seguir cria um grupo de recursos chamado dsStd_ILB_RG na localização east us:

$rg = New-AzResourceGroup `
  -ResourceGroupName "dsStd_ILB_RG"  `
  -Location "east us"

Criar endereços IP públicos IPv4 e IPv6

Para acessar suas máquinas virtuais pela Internet, você precisa de endereços IP públicos IPv4 e IPv6 para as VMs. Crie endereços IP públicos com New-AzPublicIpAddress. O exemplo a seguir cria o endereço IP público IPv4 e IPv6 denominado RdpPublicIP_1 e RdpPublicIP_2 no grupo de recursos dsStd_ILB_RG :

$RdpPublicIP_1 = New-AzPublicIpAddress `
  -Name "RdpPublicIP_1" `
  -ResourceGroupName $rg.ResourceGroupName `
  -Location $rg.Location  `
  -AllocationMethod Static `
  -IpAddressVersion IPv4  `
  -sku Standard
  
$RdpPublicIP_2 = New-AzPublicIpAddress `
  -Name "RdpPublicIP_2" `
  -ResourceGroupName $rg.ResourceGroupName `
  -Location $rg.Location  `
  -AllocationMethod Static `
  -IpAddressVersion IPv6  `
  -sku Standard

Criar a rede virtual e a sub-rede

Crie uma rede virtual usando New-AzVirtualNetwork com pilha dupla uma configuração de sub-rede usando New-AzVirtualNetworkSubnetConfig. O exemplo a seguir cria uma rede virtual chamada dsVnet com uma sub-rede chamada mySubnet.

# Create dual stack subnet config
$DsSubnet = New-AzVirtualNetworkSubnetConfig `
  -Name "dsSubnet" `
  -AddressPrefix "10.0.0.0/24","fd00:db8:deca:deed::/64"

# Create the virtual network
$vnet = New-AzVirtualNetwork `
  -ResourceGroupName $rg.ResourceGroupName `
  -Location $rg.Location  `
  -Name "dsVnet" `
  -AddressPrefix "10.0.0.0/16","fd00:db8:deca::/48"  `
  -Subnet $DsSubnet

#Refresh the fully populated subnet for use in load balancer frontend configuration
$DsSubnet = get-AzVirtualNetworkSubnetconfig -name dsSubnet -VirtualNetwork $vnet

Criar o Standard Load Balancer

Nesta seção, você configura o IP de front-end duplo (IPv4 e IPv6) e o pool de endereços de back-end para o balanceador de carga e, em seguida, cria um balanceador de carga padrão.

Criar um IP de front-end

Crie um IP de front-end com New-AzLoadBalancerFrontendIpConfig. O exemplo a seguir cria as configurações de IP de front-end IPv4 e IPv6 chamadas dsLbFrontEnd_v4 e dsLbFrontEnd_v6:

$frontendIPv4 = New-AzLoadBalancerFrontendIpConfig `
  -Name "dsLbFrontEnd_v4" `
  -PrivateIpAddress "10.0.0.100"  `
  -PrivateIpAddressVersion "IPv4"   `
  -Subnet $DsSubnet

$frontendIPv6 = New-AzLoadBalancerFrontendIpConfig `
  -Name "dsLbFrontEnd_v6" `
  -PrivateIpAddress "fd00:db8:deca:deed::100"  `
  -PrivateIpAddressVersion "IPv6"   `
  -Subnet $DsSubnet

Configurar o pool de endereços de back-end

Crie um pool de endereços de back-end com New-AzLoadBalancerBackendAddressPoolConfig. As VMs são anexadas a este pool de back-end nas etapas restantes. O seguinte exemplo cria pools de endereços de back-end chamados dsLbBackEndPool_v4 e dsLbBackEndPool_v6 para incluir VMs com configurações de adaptadores de rede IPv4 e IPv6:

$backendPoolv4 = New-AzLoadBalancerBackendAddressPoolConfig -Name "dsLbBackEndPool_v4"

$backendPoolv6 = New-AzLoadBalancerBackendAddressPoolConfig -Name "dsLbBackEndPool_v6"

Criar uma regra de balanceador de carga

Uma regra de balanceador de carga é usada para definir como o tráfego é distribuído para as VMs. Defina a configuração de IP de front-end para o tráfego de entrada e o pool de IPs de back-end para receber o tráfego, junto com as portas de origem e de destino necessárias. Para garantir que apenas VMs saudáveis recebam tráfego, você pode opcionalmente definir uma sonda de saúde. Standard Load Balancer suporta sondas explícitas de saúde IPv6.

Crie uma regra de balanceador de carga com Add-AzLoadBalancerRuleConfig. O seguinte exemplo cria regras de balanceador de carga chamadas dsLBrule_v4 e dsLBrule_v6 e equilibra o tráfego na porta TCP80 para as configurações de IP de front-end IPv4 e IPv6:

$lbrule_v4 = New-AzLoadBalancerRuleConfig `
  -Name "dsLBrule_v4" `
  -FrontendIpConfiguration $frontendIPv4 `
  -BackendAddressPool $backendPoolv4 `
  -Protocol Tcp `
  -FrontendPort 80 `
  -BackendPort 80

$lbrule_v6 = New-AzLoadBalancerRuleConfig `
  -Name "dsLBrule_v6" `
  -FrontendIpConfiguration $frontendIPv6 `
  -BackendAddressPool $backendPoolv6 `
  -Protocol Tcp `
  -FrontendPort 80 `
  -BackendPort 80

Criar um balanceador de carga

Crie um Balanceador de Carga Standard com New-AzLoadBalancer. O exemplo a seguir cria um Standard Load Balancer público chamado myInternalLoadBalancer usando as configurações de IP de front-end IPv4 e IPv6, os pools de back-end e as regras de balanceamento de carga criados nas etapas anteriores:

$lb = New-AzLoadBalancer  `
  -ResourceGroupName $rg.ResourceGroupName  `
  -Location $rg.Location  `
  -Name  "MyInternalLoadBalancer"  `
  -Sku "Standard"  `
  -FrontendIpConfiguration  $frontendIPv4,$frontendIPv6  `
  -BackendAddressPool  $backendPoolv4,$backendPoolv6  `
  -LoadBalancingRule  $lbrule_v4,$lbrule_v6

Criar recursos da rede

Antes de implantar algumas VMs e testar seu balanceador, você deve criar recursos de rede de suporte — conjunto de disponibilidade, grupo de segurança de rede e NICs virtuais.

Criar um conjunto de disponibilidade

Para melhorar a alta disponibilidade do seu aplicativo, coloque suas VMs em um conjunto de disponibilidade.

Crie um conjunto de disponibilidade com New-AzAvailabilitySet. O seguinte exemplo cria um conjunto de disponibilidade chamadodsAVset:

$avset = New-AzAvailabilitySet `
  -ResourceGroupName $rg.ResourceGroupName `
  -Location $rg.Location  `
  -Name "dsAVset" `
  -PlatformFaultDomainCount 2 `
  -PlatformUpdateDomainCount 2 `
  -Sku aligned

Criar um grupo de segurança de rede

Crie um grupo de segurança de rede para as regras que controlarão a comunicação de entrada e saída em sua VNET.

Criar uma regra do grupo de segurança de rede para a porta 3389

Crie uma regra do grupo de segurança de rede para permitir conexões RDP pela porta 3389 com New-AzNetworkSecurityRuleConfig.

$rule1 = New-AzNetworkSecurityRuleConfig `
  -Name 'myNetworkSecurityGroupRuleRDP' `
  -Description 'Allow RDP' `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 100 `
  -SourceAddressPrefix * `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 3389

Criar uma regra do grupo de segurança de rede para a porta 80

Crie uma regra do grupo de segurança de rede para permitir conexões da Internet pela porta 80 com New-AzNetworkSecurityRuleConfig.

$rule2 = New-AzNetworkSecurityRuleConfig `
  -Name 'myNetworkSecurityGroupRuleHTTP' `
  -Description 'Allow HTTP' `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 200 `
  -SourceAddressPrefix * `
  -SourcePortRange 80 `
  -DestinationAddressPrefix * `
  -DestinationPortRange 80

Criar um grupo de segurança de rede

Crie um grupo de segurança de rede com New-AzNetworkSecurityGroup.

$nsg = New-AzNetworkSecurityGroup `
  -ResourceGroupName $rg.ResourceGroupName `
  -Location $rg.Location  `
  -Name "dsNSG1"  `
  -SecurityRules $rule1,$rule2

Criar NICs

Crie NICs virtuais com New-AzNetworkInterface. O exemplo a seguir cria duas NICs virtuais com as configurações de IPv4 e IPv6. (Uma NIC virtual para cada VM criada para seu aplicativo nas etapas a seguir).


# Create the IPv4 configuration for NIC 1
$Ip4Config=New-AzNetworkInterfaceIpConfig `
  -Name dsIp4Config `
  -Subnet $vnet.subnets[0] `
  -PrivateIpAddressVersion IPv4 `
  -LoadBalancerBackendAddressPool $backendPoolv4 `
  -PublicIpAddress  $RdpPublicIP_1

# Create the IPv6 configuration
$Ip6Config=New-AzNetworkInterfaceIpConfig `
  -Name dsIp6Config `
  -Subnet $vnet.subnets[0] `
  -PrivateIpAddressVersion IPv6 `
  -LoadBalancerBackendAddressPool $backendPoolv6

# Create NIC 1
$NIC_1 = New-AzNetworkInterface `
  -Name "dsNIC1" `
  -ResourceGroupName $rg.ResourceGroupName `
  -Location $rg.Location  `
  -NetworkSecurityGroupId $nsg.Id `
  -IpConfiguration $Ip4Config,$Ip6Config

# Create the IPv4 configuration for NIC 2
$Ip4Config=New-AzNetworkInterfaceIpConfig `
  -Name dsIp4Config `
  -Subnet $vnet.subnets[0] `
  -PrivateIpAddressVersion IPv4 `
  -LoadBalancerBackendAddressPool $backendPoolv4 `
  -PublicIpAddress  $RdpPublicIP_2

# Create NIC 2 reusing the IPv6 configuration from NIC 1
$NIC_2 = New-AzNetworkInterface `
  -Name "dsNIC2" `
  -ResourceGroupName $rg.ResourceGroupName `
  -Location $rg.Location  `
  -NetworkSecurityGroupId $nsg.Id `
  -IpConfiguration $Ip4Config,$Ip6Config

Criar máquinas virtuais

Defina o nome de usuário e a senha de um administrador para as VMs com Get-Credential:

$cred = get-credential -Message "DUAL STACK VNET SAMPLE:  Please enter the Administrator credential to log into the VM's"

Agora, é possível criar as VMs com New-AzVM. O exemplo a seguir cria duas VMs e os componentes de rede virtual necessários, caso ainda não existam.

$vmsize = "Standard_A2"
$ImagePublisher = "MicrosoftWindowsServer"
$imageOffer = "WindowsServer"
$imageSKU = "2019-Datacenter"

$vmName= "dsVM1"
$VMconfig1 = New-AzVMConfig -VMName $vmName -VMSize $vmsize -AvailabilitySetId $avset.Id 3> $null | Set-AzVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent 3> $null | Set-AzVMSourceImage -PublisherName $ImagePublisher -Offer $imageOffer -Skus $imageSKU -Version "latest" 3> $null | Set-AzVMOSDisk -Name "$vmName.vhd" -CreateOption fromImage  3> $null | Add-AzVMNetworkInterface -Id $NIC_1.Id  3> $null
$VM1 = New-AzVM -ResourceGroupName $rg.ResourceGroupName  -Location $rg.Location  -VM $VMconfig1


$vmName= "dsVM2"
$VMconfig2 = New-AzVMConfig -VMName $vmName -VMSize $vmsize -AvailabilitySetId $avset.Id 3> $null | Set-AzVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent 3> $null | Set-AzVMSourceImage -PublisherName $ImagePublisher -Offer $imageOffer -Skus $imageSKU -Version "latest" 3> $null | Set-AzVMOSDisk -Name "$vmName.vhd" -CreateOption fromImage  3> $null | Add-AzVMNetworkInterface -Id $NIC_2.Id  3> $null
$VM2 = New-AzVM -ResourceGroupName $rg.ResourceGroupName  -Location $rg.Location  -VM $VMconfig2

Exibir a rede virtual de pilha dual IPv6 no portal do Azure

Veja a rede virtual de pilha dupla IPv6 no portal do Azure da seguinte maneira:

  1. Na barra de pesquisa do portal, insira dsVnet.
  2. Quando dsVnet aparecer nos resultados de pesquisa, selecione-o. Isso inicia a página Visão geral da rede virtual de pilha dual chamada dsVnet. A rede virtual de pilha dupla exibe as duas NICs, com configurações IPv4 e IPv6, localizadas na sub-rede de pilha dupla chamada dsSubnet.

Limpar os recursos

Quando não forem mais necessários, você poderá usar o comando Remove-AzResourceGroup para remover o grupo de recursos, a VM e todos os recursos relacionados.

Remove-AzResourceGroup -Name dsStd_ILB_RG

Próximas etapas

Neste artigo, você criou um Standard Load Balancer com uma configuração de IP de front-end dual (IPv4 e IPv6). Você também criou duas máquinas virtuais que incluíam NICs com configurações de IP duplo (IPV4 + IPv6) que foram adicionadas ao pool de back-end do balanceador de carga. Para saber mais sobre o suporte a IPv6 em redes virtuais do Azure, confira O que é o IPv6 para a Rede Virtual do Azure?