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.
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.
Instale e configure a CLI do Azure seguindo as etapas no artigo vinculado e entre na sua conta do Azure.
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
Criar um grupo de recursos:
az group create --name $rgName --location $location
Crie um balanceador de carga:
$lb = az network lb create --resource-group $rgname --location $location --name $lbName
Criar uma rede virtual:
$vnet = az network vnet create --resource-group $rgname --name $vnetName --location $location --address-prefixes $vnetPrefix
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
Configure as variáveis do PowerShell:
$publicIpv4Name = "myIPv4Vip" $publicIpv6Name = "myIPv6Vip"
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.
Configure as variáveis do PowerShell:
$frontendV4Name = "FrontendVipIPv4" $frontendV6Name = "FrontendVipIPv6" $backendAddressPoolV4Name = "BackendPoolIPv4" $backendAddressPoolV6Name = "BackendPoolIPv6"
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.
Configure as variáveis do PowerShell:
$probeV4V6Name = "ProbeForIPv4AndIPv6" $natRule1V4Name = "NatRule-For-Rdp-VM1" $natRule2V4Name = "NatRule-For-Rdp-VM2" $lbRule1V4Name = "LBRuleForIPv4-Port80" $lbRule1V6Name = "LBRuleForIPv6-Port80"
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
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
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
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.
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"
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.
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.Crie o conjunto de disponibilidade:
$availabilitySet = az vm availability-set create --name $availabilitySetName --resource-group $rgName --location $location
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"