Criar um balanceador de carga público com IPv6 usando a CLI do Azure

Nota

Este artigo descreve um recurso IPv6 introdutório para permitir que os Balanceadores de Carga Básicos forneçam conectividade IPv4 e IPv6. A conectividade IPv6 abrangente agora está disponível com o IPv6 para VNETs do Azure, que integra a conectividade IPv6 com suas Redes Virtuais e inclui recursos importantes, como regras do Grupo de Segurança de Rede IPv6, roteamento IPv6 definido pelo usuário, balanceamento de carga IPv6 Basic e Standard e muito mais. O IPv6 para VNETs do Azure é o padrão recomendado para aplicativos IPv6 no Azure. Consulte IPv6 para implantação do Azure VNET PowerShell

Um balanceador de carga do Azure é um balanceador de carga de Camada 4 (TCP, UDP). Os balanceadores de carga fornecem alta disponibilidade distribuindo o tráfego de entrada entre instâncias de serviço íntegras em serviços de nuvem ou máquinas virtuais em um conjunto de balanceadores de carga. Os balanceadores de carga também podem apresentar esses serviços em várias portas ou vários endereços IP ou ambos.

Exemplo de cenário de implantação

O diagrama a seguir ilustra a solução de balanceamento de carga implantada usando o modelo de exemplo descrito neste artigo.

Load balancer scenario

Nesse cenário, você cria os seguintes recursos do Azure:

  • Duas máquinas virtuais (VMs)
  • Uma interface de rede virtual para cada VM com endereços IPv4 e IPv6 atribuídos
  • Um balanceador de carga público com um endereço IP público IPv4 e IPv6
  • Um conjunto de disponibilidade que contém as duas VMs
  • Duas regras de balanceamento de carga para mapear os VIPs públicos para os pontos de extremidade privados

Implantar a solução usando a CLI do Azure

As etapas a seguir mostram como criar um balanceador de carga público usando a CLI do Azure. Usando a CLI, você cria e configura cada objeto individualmente e, em seguida, os reúne para criar um recurso.

Para implantar um balanceador de carga, crie e configure os seguintes objetos:

  • Configuração de IP Frontend: Contém endereços IP públicos para tráfego de rede de entrada.
  • Pool de endereços de back-end: contém interfaces de rede (NICs) para que as máquinas virtuais recebam tráfego de rede do balanceador de carga.
  • Regras de balanceamento de carga: contém regras que mapeiam uma porta pública no balanceador de carga para uma porta no pool de endereços de back-end.
  • Regras NAT de entrada: contém regras NAT (conversão de endereços de rede) que mapeiam uma porta pública no balanceador de carga para uma porta para uma máquina virtual específica no pool de endereços de back-end.
  • Testes: contém testes de integridade que são usados para verificar a disponibilidade de instâncias de máquina virtual no pool de endereços de back-end.

Configurar a CLI do Azure

Neste exemplo, você executa as ferramentas da CLI do Azure em uma janela de comando do PowerShell. Para melhorar a legibilidade e a reutilização, use os recursos de script do PowerShell, não os cmdlets do Azure PowerShell.

  1. Instale e configure a CLI do Azure seguindo as etapas no artigo vinculado e entre na sua conta do Azure.

  2. Configure as variáveis do PowerShell para uso com os comandos da CLI do Azure:

    $subscriptionid = "########-####-####-####-############"  # enter subscription id
    $location = "southcentralus"
    $rgName = "pscontosorg1southctrlus09152016"
    $vnetName = "contosoIPv4Vnet"
    $vnetPrefix = "10.0.0.0/16"
    $subnet1Name = "clicontosoIPv4Subnet1"
    $subnet1Prefix = "10.0.0.0/24"
    $subnet2Name = "clicontosoIPv4Subnet2"
    $subnet2Prefix = "10.0.1.0/24"
    $dnsLabel = "contoso09152016"
    $lbName = "myIPv4IPv6Lb"
    

Criar um grupo de recursos, um balanceador de carga, uma rede virtual e sub-redes

  1. Criar um grupo de recursos:

    az group create --name $rgName --location $location
    
  2. Crie um balanceador de carga:

    $lb = az network lb create --resource-group $rgname --location $location --name $lbName
    
  3. Criar uma rede virtual:

    $vnet = az network vnet create  --resource-group $rgname --name $vnetName --location $location --address-prefixes $vnetPrefix
    
  4. Nesta rede virtual, crie duas sub-redes:

    $subnet1 = az network vnet subnet create --resource-group $rgname --name $subnet1Name --address-prefix $subnet1Prefix --vnet-name $vnetName
    $subnet2 = az network vnet subnet create --resource-group $rgname --name $subnet2Name --address-prefix $subnet2Prefix --vnet-name $vnetName
    

Criar endereços IP públicos para o pool de front-end

  1. Configure as variáveis do PowerShell:

    $publicIpv4Name = "myIPv4Vip"
    $publicIpv6Name = "myIPv6Vip"
    
  2. Crie um endereço IP público para o pool de IP frontend:

    $publicipV4 = az network public-ip create --resource-group $rgname --name $publicIpv4Name --location $location --version IPv4 --allocation-method Dynamic --dns-name $dnsLabel
    $publicipV6 = az network public-ip create --resource-group $rgname --name $publicIpv6Name --location $location --version IPv6 --allocation-method Dynamic --dns-name $dnsLabel
    

    Importante

    O balanceador de carga usa o rótulo de domínio do IP público como seu nome de domínio totalmente qualificado (FQDN). Isso é uma alteração da implantação clássica, que usa o nome do serviço de nuvem como o FQDN do balanceador de carga.

    Neste exemplo, o FQDN é contoso09152016.southcentralus.cloudapp.azure.com.

Criar pools de frontend e back-end

Nesta seção, você cria os seguintes pools de IP:

  • O pool de IP frontend que recebe o tráfego de rede de entrada no balanceador de carga.
  • O pool de IP de back-end para o qual o pool de front-end envia o tráfego de rede com balanceamento de carga.
  1. Configure as variáveis do PowerShell:

    $frontendV4Name = "FrontendVipIPv4"
    $frontendV6Name = "FrontendVipIPv6"
    $backendAddressPoolV4Name = "BackendPoolIPv4"
    $backendAddressPoolV6Name = "BackendPoolIPv6"
    
  2. Crie um pool de IP frontend e associe-o ao IP público que você criou na etapa anterior e ao balanceador de carga.

    $frontendV4 = az network lb frontend-ip create --resource-group $rgname --name $frontendV4Name --public-ip-address $publicIpv4Name --lb-name $lbName
    $frontendV6 = az network lb frontend-ip create --resource-group $rgname --name $frontendV6Name --public-ip-address $publicIpv6Name --lb-name $lbName
    $backendAddressPoolV4 = az network lb address-pool create --resource-group $rgname --name $backendAddressPoolV4Name --lb-name $lbName
    $backendAddressPoolV6 = az network lb address-pool create --resource-group $rgname --name $backendAddressPoolV6Name --lb-name $lbName
    

Criar o teste, as regras NAT e as regras do balanceador de carga

Este exemplo cria os seguintes itens:

  • Uma regra de teste para verificar a conectividade com a porta TCP 80.
  • Uma regra NAT para traduzir todo o tráfego de entrada na porta 3389 para a porta 3389 para RDP.*
  • Uma regra NAT para traduzir todo o tráfego de entrada na porta 3391 para a porta 3389 para o protocolo RDP (Remote Desktop Protocol).*
  • Uma regra de balanceador de carga para equilibrar todo o tráfego de entrada na porta 80 para a porta 80 nos endereços no pool de back-end.

* As regras NAT estão associadas a uma instância específica de máquina virtual por trás do balanceador de carga. O tráfego de rede que chega na porta 3389 é enviado para a máquina virtual específica e a porta associada à regra NAT. Tem de especificar um protocolo (UDP ou TCP) para uma regra NAT. Não é possível atribuir ambos os protocolos à mesma porta.

  1. Configure as variáveis do PowerShell:

    $probeV4V6Name = "ProbeForIPv4AndIPv6"
    $natRule1V4Name = "NatRule-For-Rdp-VM1"
    $natRule2V4Name = "NatRule-For-Rdp-VM2"
    $lbRule1V4Name = "LBRuleForIPv4-Port80"
    $lbRule1V6Name = "LBRuleForIPv6-Port80"
    
  2. Crie a sonda.

    O exemplo a seguir cria uma sonda TCP que verifica a conectividade com a porta TCP de back-end 80 a cada 15 segundos. Após duas falhas consecutivas, ele marca o recurso de back-end como indisponível.

    $probeV4V6 = az network lb probe create --resource-group $rgname --name $probeV4V6Name --protocol tcp --port 80 --interval 15 --threshold 2 --lb-name $lbName
    
  3. Crie regras NAT de entrada que permitam conexões RDP com os recursos de back-end:

    $inboundNatRuleRdp1 = az network lb inbound-nat-rule create --resource-group $rgname --name $natRule1V4Name --frontend-ip-name $frontendV4Name --protocol Tcp --frontend-port 3389 --backend-port 3389 --lb-name $lbName
    $inboundNatRuleRdp2 = az network lb inbound-nat-rule create --resource-group $rgname --name $natRule2V4Name --frontend-ip-name $frontendV4Name --protocol Tcp --frontend-port 3391 --backend-port 3389 --lb-name $lbName
    
  4. Crie regras de balanceador de carga que enviem tráfego para diferentes portas de back-end, dependendo do front-end que recebeu a solicitação.

    $lbruleIPv4 = az network lb rule create --resource-group $rgname --name $lbRule1V4Name --frontend-ip-name $frontendV4Name --backend-pool-name $backendAddressPoolV4Name --probe-name $probeV4V6Name --protocol Tcp --frontend-port 80 --backend-port 80 --lb-name $lbName
    $lbruleIPv6 = az network lb rule create --resource-group $rgname --name $lbRule1V6Name --frontend-ip-name $frontendV6Name --backend-pool-name $backendAddressPoolV6Name --probe-name $probeV4V6Name --protocol Tcp --frontend-port 80 --backend-port 8080 --lb-name $lbName
    
  5. Verifique as suas definições:

    az network lb show --resource-group $rgName --name $lbName
    

    Resultado esperado:

    info:    Executing command network lb show
    info:    Looking up the load balancer "myIPv4IPv6Lb"
    data:    Id                              : /subscriptions/########-####-####-####-############/resourceGroups/pscontosorg1southctrlus09152016/providers/Microsoft.Network/loadBalancers/myIPv4IPv6Lb
    data:    Name                            : myIPv4IPv6Lb
    data:    Type                            : Microsoft.Network/loadBalancers
    data:    Location                        : southcentralus
    data:    Provisioning state              : Succeeded
    data:
    data:    Frontend IP configurations:
    data:    Name             Provisioning state  Private IP allocation  Private IP   Subnet  Public IP
    data:    ---------------  ------------------  ---------------------  -----------  ------  ---------
    data:    FrontendVipIPv4  Succeeded           Dynamic                                     myIPv4Vip
    data:    FrontendVipIPv6  Succeeded           Dynamic                                     myIPv6Vip
    data:
    data:    Probes:
    data:    Name                 Provisioning state  Protocol  Port  Path  Interval  Count
    data:    -------------------  ------------------  --------  ----  ----  --------  -----
    data:    ProbeForIPv4AndIPv6  Succeeded           Tcp       80          15        2
    data:
    data:    Backend Address Pools:
    data:    Name             Provisioning state
    data:    ---------------  ------------------
    data:    BackendPoolIPv4  Succeeded
    data:    BackendPoolIPv6  Succeeded
    data:
    data:    Load Balancing Rules:
    data:    Name                  Provisioning state  Load distribution  Protocol  Frontend port  Backend port  Enable floating IP  Idle timeout in minutes
    data:    --------------------  ------------------  -----------------  --------  -------------  ------------  ------------------  -----------------------
    data:    LBRuleForIPv4-Port80  Succeeded           Default            Tcp       80             80            false               4
    data:    LBRuleForIPv6-Port80  Succeeded           Default            Tcp       80             8080          false               4
    data:
    data:    Inbound NAT Rules:
    data:    Name                 Provisioning state  Protocol  Frontend port  Backend port  Enable floating IP  Idle timeout in minutes
    data:    -------------------  ------------------  --------  -------------  ------------  ------------------  -----------------------
    data:    NatRule-For-Rdp-VM1  Succeeded           Tcp       3389           3389          false               4
    data:    NatRule-For-Rdp-VM2  Succeeded           Tcp       3391           3389          false               4
    info:    network lb show
    

Criar NICs

Crie NICs e associe-as a regras NAT, regras de balanceador de carga e sondas.

  1. Configure as variáveis do PowerShell:

    $nic1Name = "myIPv4IPv6Nic1"
    $nic2Name = "myIPv4IPv6Nic2"
    $subnet1Id = "/subscriptions/$subscriptionid/resourceGroups/$rgName/providers/Microsoft.Network/VirtualNetworks/$vnetName/subnets/$subnet1Name"
    $subnet2Id = "/subscriptions/$subscriptionid/resourceGroups/$rgName/providers/Microsoft.Network/VirtualNetworks/$vnetName/subnets/$subnet2Name"
    $backendAddressPoolV4Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/loadbalancers/$lbName/backendAddressPools/$backendAddressPoolV4Name"
    $backendAddressPoolV6Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/loadbalancers/$lbName/backendAddressPools/$backendAddressPoolV6Name"
    $natRule1V4Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/loadbalancers/$lbName/inboundNatRules/$natRule1V4Name"
    $natRule2V4Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/loadbalancers/$lbName/inboundNatRules/$natRule2V4Name"
    
  2. Crie uma NIC para cada back-end e adicione uma configuração IPv6:

    $nic1 = az network nic create --name $nic1Name --resource-group $rgname --location $location --private-ip-address-version "IPv4" --subnet $subnet1Id --lb-address-pools $backendAddressPoolV4Id --lb-inbound-nat-rules $natRule1V4Id
    $nic1IPv6 = az network nic ip-config create --resource-group $rgname --name "IPv6IPConfig" --private-ip-address-version "IPv6" --lb-address-pools $backendAddressPoolV6Id --nic-name $nic1Name
    
    $nic2 = az network nic create --name $nic2Name --resource-group $rgname --location $location --private-ip-address-version "IPv4" --subnet $subnet2Id --lb-address-pools $backendAddressPoolV4Id --lb-inbound-nat-rules $natRule2V4Id
    $nic2IPv6 = az network nic ip-config create --resource-group $rgname --name "IPv6IPConfig" --private-ip-address-version "IPv6" --lb-address-pools $backendAddressPoolV6Id --nic-name $nic2Name
    

Crie os recursos de VM de back-end e anexe cada NIC

Para criar VMs, você deve ter uma conta de armazenamento. Para balanceamento de carga, as VMs precisam ser membros de um conjunto de disponibilidade. Para obter mais informações sobre como criar VMs, consulte Criar uma VM do Azure usando o PowerShell.

  1. Configure as variáveis do PowerShell:

    $availabilitySetName = "myIPv4IPv6AvailabilitySet"
    $vm1Name = "myIPv4IPv6VM1"
    $vm2Name = "myIPv4IPv6VM2"
    $nic1Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/networkInterfaces/$nic1Name"
    $nic2Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/networkInterfaces/$nic2Name"
    $imageurn = "MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:latest"
    $vmUserName = "vmUser"
    $mySecurePassword = "PlainTextPassword*1"
    

    Aviso

    Este exemplo usa o nome de usuário e a senha para as VMs em texto não criptografado. Tome o cuidado apropriado ao usar essas credenciais em texto não criptografado. Para obter um método mais seguro de manipulação de credenciais no PowerShell, consulte o Get-Credential cmdlet.

  2. Crie o conjunto de disponibilidade:

    $availabilitySet = az vm availability-set create --name $availabilitySetName --resource-group $rgName --location $location
    
  3. Crie as máquinas virtuais com as NICs associadas:

    az vm create --resource-group $rgname --name $vm1Name --image $imageurn --admin-username $vmUserName --admin-password $mySecurePassword --nics $nic1Id --location $location --availability-set $availabilitySetName --size "Standard_A1" 
    
    az vm create --resource-group $rgname --name $vm2Name --image $imageurn --admin-username $vmUserName --admin-password $mySecurePassword --nics $nic2Id --location $location --availability-set $availabilitySetName --size "Standard_A1"