Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Você pode usar este tópico para aprender a usar o balanceador de carga (SLB) de software SDN (Software Defined Networking) para fornecer NAT (conversão de endereços de rede) de saída, NAT de entrada ou balanceamento de carga entre várias instâncias de um aplicativo.
Visão geral do Software Load Balancer
O SDN Software Load Balancer (SLB) oferece alta disponibilidade e desempenho de rede para seus aplicativos. É um balanceador de carga de Camada 4 (TCP, UDP) que distribui o tráfego de entrada entre instâncias de serviço saudáveis em serviços de nuvem ou máquinas virtuais definidas em um conjunto de balanceador de carga.
Configure o SLB para fazer o seguinte:
- Balanceie a carga do tráfego de entrada externo a uma rede virtual para máquinas virtuais (VMs), também chamado de balanceamento de carga VIP público.
- Balanceie a carga do tráfego de entrada entre VMs em uma rede virtual, entre VMs em serviços de nuvem ou entre computadores locais e VMs em uma rede virtual entre locais.
- Encaminhe o tráfego de rede VM da rede virtual para destinos externos usando a NAT (conversão de endereços de rede), também chamada NAT de saída.
- Encaminhe o tráfego externo para uma VM específica, também chamada NAT de entrada.
Exemplo: Criar um VIP público para balancear a carga de um pool de duas VMs em uma rede virtual
Neste exemplo, você cria um objeto de balanceador de carga com um VIP público e duas VMs como membros do pool para atender solicitações ao VIP. Este código de exemplo também adiciona uma sonda de saúde HTTP para detetar se um dos membros do pool torna-se não responsivo.
Prepare o objeto do balanceador de carga.
import-module NetworkController $URI = "https://sdn.contoso.com" $LBResourceId = "LB2" $LoadBalancerProperties = new-object Microsoft.Windows.NetworkController.LoadBalancerProperties
Atribua um endereço IP front-end, comumente chamado de IP Virtual (VIP).
O VIP deve vir de um IP não utilizado em um dos pools de IPs de redes lógicas atribuídos ao gestor do balanceador de carga.
$VIPIP = "10.127.134.5" $VIPLogicalNetwork = get-networkcontrollerlogicalnetwork -ConnectionUri $uri -resourceid "PublicVIP" -PassInnerException $FrontEndIPConfig = new-object Microsoft.Windows.NetworkController.LoadBalancerFrontendIpConfiguration $FrontEndIPConfig.ResourceId = "FE1" $FrontEndIPConfig.ResourceRef = "/loadBalancers/$LBResourceId/frontendIPConfigurations/$($FrontEndIPConfig.ResourceId)" $FrontEndIPConfig.Properties = new-object Microsoft.Windows.NetworkController.LoadBalancerFrontendIpConfigurationProperties $FrontEndIPConfig.Properties.Subnet = new-object Microsoft.Windows.NetworkController.Subnet $FrontEndIPConfig.Properties.Subnet.ResourceRef = $VIPLogicalNetwork.Properties.Subnets[0].ResourceRef $FrontEndIPConfig.Properties.PrivateIPAddress = $VIPIP $FrontEndIPConfig.Properties.PrivateIPAllocationMethod = "Static" $LoadBalancerProperties.FrontEndIPConfigurations += $FrontEndIPConfig
Aloque um pool de endereços back-end, que contém os IPs dinâmicos (DIPs) que compõem os membros do conjunto de VMs com balanceamento de carga.
$BackEndAddressPool = new-object Microsoft.Windows.NetworkController.LoadBalancerBackendAddressPool $BackEndAddressPool.ResourceId = "BE1" $BackEndAddressPool.ResourceRef = "/loadBalancers/$LBResourceId/backendAddressPools/$($BackEndAddressPool.ResourceId)" $BackEndAddressPool.Properties = new-object Microsoft.Windows.NetworkController.LoadBalancerBackendAddressPoolProperties $LoadBalancerProperties.backendAddressPools += $BackEndAddressPool
Defina uma sonda de integridade que o balanceador de carga usa para determinar o estado de saúde dos membros do pool de back-end.
Neste exemplo, você define um teste HTTP que consulta o RequestPath de "/health.htm". A consulta é executada a cada 5 segundos, conforme especificado pela propriedade IntervalInSeconds.
O teste de integridade deve receber um código de resposta HTTP de 200 para 11 consultas consecutivas para que o teste considere o IP de back-end íntegro. Se o IP de back-end não estiver íntegro, ele não receberá tráfego do balanceador de carga.
Important
Não bloqueie o tráfego de ou para o primeiro IP na sub-rede para quaisquer ACLs (Listas de Controle de Acesso) aplicadas ao IP de back-end, pois esse é o ponto de origem das sondas.
Utilize o exemplo a seguir para definir uma sonda de verificação de saúde.
$Probe = new-object Microsoft.Windows.NetworkController.LoadBalancerProbe $Probe.ResourceId = "Probe1" $Probe.ResourceRef = "/loadBalancers/$LBResourceId/Probes/$($Probe.ResourceId)" $Probe.properties = new-object Microsoft.Windows.NetworkController.LoadBalancerProbeProperties $Probe.properties.Protocol = "HTTP" $Probe.properties.Port = "80" $Probe.properties.RequestPath = "/health.htm" $Probe.properties.IntervalInSeconds = 5 $Probe.properties.NumberOfProbes = 11 $LoadBalancerProperties.Probes += $Probe
Defina uma regra de balanceamento de carga para enviar o tráfego que chega ao IP front-end para o IP back-end. Neste exemplo, o pool de back-end recebe tráfego TCP para a porta 80.
Use o exemplo a seguir para definir uma regra de balanceamento de carga:
$Rule = new-object Microsoft.Windows.NetworkController.LoadBalancingRule $Rule.ResourceId = "webserver1" $Rule.Properties = new-object Microsoft.Windows.NetworkController.LoadBalancingRuleProperties $Rule.Properties.FrontEndIPConfigurations += $FrontEndIPConfig $Rule.Properties.backendaddresspool = $BackEndAddressPool $Rule.Properties.protocol = "TCP" $Rule.Properties.FrontEndPort = 80 $Rule.Properties.BackEndPort = 80 $Rule.Properties.IdleTimeoutInMinutes = 4 $Rule.Properties.Probe = $Probe $LoadBalancerProperties.loadbalancingRules += $Rule
Adicione a configuração do balanceador de carga ao controlador de rede.
Use o exemplo a seguir para adicionar a configuração do balanceador de carga ao controlador de rede:
$LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
Siga o próximo exemplo para adicionar as interfaces de rede a esse pool de back-end.
Exemplo: Usar SLB para NAT de saída
Neste exemplo, você configura o SLB com um pool de back-end para fornecer capacidade de NAT de saída para uma VM no espaço de endereçamento privado de uma rede virtual para alcançar a saída para a Internet.
Crie as propriedades do balanceador de carga, o IP front-end e o pool de back-end.
import-module NetworkController $URI = "https://sdn.contoso.com" $LBResourceId = "OutboundNATMMembers" $VIPIP = "10.127.134.6" $VIPLogicalNetwork = get-networkcontrollerlogicalnetwork -ConnectionUri $uri -resourceid "PublicVIP" -PassInnerException $LoadBalancerProperties = new-object Microsoft.Windows.NetworkController.LoadBalancerProperties $FrontEndIPConfig = new-object Microsoft.Windows.NetworkController.LoadBalancerFrontendIpConfiguration $FrontEndIPConfig.ResourceId = "FE1" $FrontEndIPConfig.ResourceRef = "/loadBalancers/$LBResourceId/frontendIPConfigurations/$($FrontEndIPConfig.ResourceId)" $FrontEndIPConfig.Properties = new-object Microsoft.Windows.NetworkController.LoadBalancerFrontendIpConfigurationProperties $FrontEndIPConfig.Properties.Subnet = new-object Microsoft.Windows.NetworkController.Subnet $FrontEndIPConfig.Properties.Subnet.ResourceRef = $VIPLogicalNetwork.Properties.Subnets[0].ResourceRef $FrontEndIPConfig.Properties.PrivateIPAddress = $VIPIP $FrontEndIPConfig.Properties.PrivateIPAllocationMethod = "Static" $LoadBalancerProperties.FrontEndIPConfigurations += $FrontEndIPConfig $BackEndAddressPool = new-object Microsoft.Windows.NetworkController.LoadBalancerBackendAddressPool $BackEndAddressPool.ResourceId = "BE1" $BackEndAddressPool.ResourceRef = "/loadBalancers/$LBResourceId/backendAddressPools/$($BackEndAddressPool.ResourceId)" $BackEndAddressPool.Properties = new-object Microsoft.Windows.NetworkController.LoadBalancerBackendAddressPoolProperties $LoadBalancerProperties.backendAddressPools += $BackEndAddressPool
Defina a regra NAT de saída.
$OutboundNAT = new-object Microsoft.Windows.NetworkController.LoadBalancerOutboundNatRule $OutboundNAT.ResourceId = "onat1" $OutboundNAT.properties = new-object Microsoft.Windows.NetworkController.LoadBalancerOutboundNatRuleProperties $OutboundNAT.properties.frontendipconfigurations += $FrontEndIPConfig $OutboundNAT.properties.backendaddresspool = $BackEndAddressPool $OutboundNAT.properties.protocol = "ALL" $LoadBalancerProperties.OutboundNatRules += $OutboundNAT
Adicione o objeto do balanceador de carga no controlador de rede.
$LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
Siga o próximo exemplo para adicionar as interfaces de rede às quais você deseja fornecer acesso à Internet.
Exemplo: Adicionar interfaces de rede ao pool de back-end
Neste exemplo, você adiciona interfaces de rede ao pool de back-end. Você deve repetir esta etapa para cada interface de rede que pode processar solicitações feitas ao VIP.
Você também pode repetir esse processo em uma única interface de rede para adicioná-lo a vários objetos do balanceador de carga. Por exemplo, se você tiver um objeto de balanceador de carga para um VIP de servidor Web e um objeto de balanceador de carga separado para fornecer NAT de saída.
Para adicionar uma interface de rede, obtenha o objeto do balanceador de carga que contém o pool de back-end.
$lbresourceid = "LB2" $lb = get-networkcontrollerloadbalancer -connectionuri $uri -resourceID $LBResourceId -PassInnerException
Obtenha a interface de rede e adicione o pool de endereços de backend ao array loadbalancerbackendaddresspools.
$nic = get-networkcontrollernetworkinterface -connectionuri $uri -resourceid 6daca142-7d94-0000-1111-c38c0141be06 -PassInnerException $nic.properties.IpConfigurations[0].properties.LoadBalancerBackendAddressPools += $lb.properties.backendaddresspools[0]
Coloque a interface de rede para aplicar a alteração.
new-networkcontrollernetworkinterface -connectionuri $uri -resourceid 6daca142-7d94-0000-1111-c38c0141be06 -properties $nic.properties -force -PassInnerException
Exemplo: Use o Balanceador de Carga de Software para encaminhar o tráfego
Se você precisar mapear um IP virtual para uma única interface de rede em uma rede virtual sem definir portas individuais, poderá criar uma regra de encaminhamento L3. Esta regra encaminha todo o tráfego de e para a VM por meio do VIP atribuído contido em um objeto PublicIPAddress.
Se você definiu o VIP e o DIP como a mesma sub-rede, isso é equivalente a executar o encaminhamento L3 sem NAT.
Note
Esse processo não requer que você crie um objeto de balanceador de carga. A atribuição do PublicIPAddress à interface de rede é informação suficiente para que o Software Load Balancer execute a sua configuração.
Crie um objeto IP público para conter o VIP.
$publicIPProperties = new-object Microsoft.Windows.NetworkController.PublicIpAddressProperties $publicIPProperties.ipaddress = "10.127.134.7" $publicIPProperties.PublicIPAllocationMethod = "static" $publicIPProperties.IdleTimeoutInMinutes = 4 $publicIP = New-NetworkControllerPublicIpAddress -ResourceId "MyPIP" -Properties $publicIPProperties -ConnectionUri $uri -Force -PassInnerException
Atribua o PublicIPAddress a uma interface de rede.
$nic = get-networkcontrollernetworkinterface -connectionuri $uri -resourceid 6daca142-7d94-0000-1111-c38c0141be06 $nic.properties.IpConfigurations[0].Properties.PublicIPAddress = $publicIP New-NetworkControllerNetworkInterface -ConnectionUri $uri -ResourceId $nic.ResourceId -Properties $nic.properties -PassInnerException
Exemplo: Use o Software Load Balancer para encaminhar tráfego com um VIP alocado dinamicamente
Este exemplo repete a mesma ação do exemplo anterior, mas aloca automaticamente o VIP do pool disponível de VIPs no balanceador de carga em vez de especificar um endereço IP específico.
Crie um objeto IP público para conter o VIP.
$publicIPProperties = new-object Microsoft.Windows.NetworkController.PublicIpAddressProperties $publicIPProperties.PublicIPAllocationMethod = "dynamic" $publicIPProperties.IdleTimeoutInMinutes = 4 $publicIP = New-NetworkControllerPublicIpAddress -ResourceId "MyPIP" -Properties $publicIPProperties -ConnectionUri $uri -Force -PassInnerException
Consulte o recurso PublicIPAddress para determinar qual endereço IP foi atribuído.
(Get-NetworkControllerPublicIpAddress -ConnectionUri $uri -ResourceId "MyPIP").properties
A propriedade IpAddress contém o endereço atribuído. A saída será semelhante a esta:
Counters : {} ConfigurationState : IpAddress : 10.127.134.2 PublicIPAddressVersion : IPv4 PublicIPAllocationMethod : Dynamic IdleTimeoutInMinutes : 4 DnsSettings : ProvisioningState : Succeeded IpConfiguration : PreviousIpConfiguration :
Atribua o PublicIPAddress a uma interface de rede.
$nic = get-networkcontrollernetworkinterface -connectionuri $uri -resourceid 6daca142-7d94-0000-1111-c38c0141be06 $nic.properties.IpConfigurations[0].Properties.PublicIPAddress = $publicIP New-NetworkControllerNetworkInterface -ConnectionUri $uri -ResourceId $nic.ResourceId -Properties $nic.properties -PassInnerException
Exemplo: Remover um endereço IP público que está a ser utilizado para reencaminhar tráfego e devolvê-lo ao pool VIP
Este exemplo remove o recurso PublicIPAddress que foi criado pelos exemplos anteriores. Assim que o PublicIPAddress for removido, a referência ao PublicIPAddress será automaticamente removida da interface de rede, o tráfego deixará de ser encaminhado e o endereço IP será devolvido ao pool VIP Público para reutilização.
Remover o PublicIP
Remove-NetworkControllerPublicIPAddress -ConnectionURI $uri -ResourceId "MyPIP"