Compartilhar via


Configurar o balanceador de carga de software para balanceamento de carga e Conversão de endereços de rede (NAT)

Você pode usar este tópico para aprender a usar o SLB (balanceador de carga de software) de SDN (Rede Definida pelo Software) 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 Balanceador de Carga de Software

O SBL (Balanceador de Carga de Software) oferece alta disponibilidade e desempenho de rede para seus aplicativos. Trata-se de um balanceador de carga (TCP, UDP) da quarta camada que distribui o tráfego de entrada entre instâncias de serviço íntegras em serviços de nuvem ou em máquinas virtuais definidas em um conjunto do balanceador de carga.

Configure o SLB para fazer o seguinte:

  • Balanceamento de carga do tráfego de entrada externo a uma rede virtual para VMs (máquinas virtuais), também chamado de balanceamento de carga de VIP público.
  • Balancear a carga do tráfego de entrada entre máquinas virtuais em uma rede virtual, entre VMs em serviços de nuvem ou entre computadores locais e máquinas virtuais em uma rede virtual entre instalações.
  • Encaminhe o tráfego de rede da 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 balanceamento de 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 do VIP. Este código de exemplo também adiciona uma investigação de integridade de HTTP para detectar se um dos membros do pool se tornou não responsivo.

  1. Prepare o objeto do balanceador de carga.

     import-module NetworkController
    
     $URI = "https://sdn.contoso.com"
    
     $LBResourceId = "LB2"
    
     $LoadBalancerProperties = new-object Microsoft.Windows.NetworkController.LoadBalancerProperties
    
  2. Atribua um endereço IP de front-end, normalmente conhecido como um IP Virtual (VIP).

    O VIP deve ser de um IP não utilizado em um dos pools de IP da rede lógica dados ao gerenciador 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
    
  3. Aloque um pool de endereços de back-end, que contém os DIPs (IPs Dinâmicos) 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
    
  4. Defina uma investigação de integridade que será usada pelo balanceador de carga para determinar o estado de integridade dos membros do pool de back-end.

    Neste exemplo, você define uma investigação de HTTP que consulta o RequestPath de "/health.htm". A consulta é executada a cada 5 segundos, conforme especificado pela propriedade IntervalInSeconds.

    A investigação de integridade deve receber um código de resposta HTTP de 200 para 11 consultas consecutivas para que a investigação 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.

    Importante

    Não bloqueie o tráfego de ou para o primeiro IP na sub-rede para quaisquer ACLs (Listas de Controle de Acesso) que você aplicar ao IP de back-end porque esse é o ponto de origem para as investigações.

    Use o exemplo a seguir para definir uma investigação de integridade.

     $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
    
  5. Defina uma regra de balanceamento de carga para enviar o tráfego que chega ao IP de front-end para o IP de 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
    
  6. 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
    
  7. Siga o próximo exemplo para adicionar os adaptadores de rede a esse pool de back-end.

Exemplo: usar o SLB para NAT de saída

Neste exemplo, você configura o SLB com um pool de back-end para fornecer funcionalidade NAT de saída para uma VM no espaço de endereço privado de uma rede virtual para acessar a saída para a Internet.

  1. Crie as propriedades do balanceador de carga, o IP de 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
    
  2. 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
    
  3. Adicione o objeto do balanceador de carga no Controlador de Rede.

     $LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
    
  4. Siga o próximo exemplo para adicionar os adaptadores de rede aos quais você deseja fornecer acesso à Internet.

Exemplo: adicionar adaptadores de rede ao pool de back-end

Neste exemplo, você adiciona adaptadores de rede ao pool de back-end. Você deve repetir essa etapa para cada adaptador de rede que pode processar solicitações feitas ao VIP.

Você também pode repetir esse processo em um único adaptador de rede para adicioná-lo a vários objetos do balanceador de carga. Por exemplo, se você tiver um objeto do balanceador de carga para um VIP do servidor Web e um objeto do balanceador de carga separado para fornecer NAT de saída.

  1. Obtenha o objeto do balanceador de carga que contém o pool de back-end para adicionar um adaptador de rede.

    $lbresourceid = "LB2"
    $lb = get-networkcontrollerloadbalancer -connectionuri $uri -resourceID $LBResourceId -PassInnerException
    
  2. Obtenha o adaptador de rede e adicione o pool backendaddress à matriz loadbalancerbackendaddresspools.

    $nic = get-networkcontrollernetworkinterface  -connectionuri $uri -resourceid 6daca142-7d94-0000-1111-c38c0141be06 -PassInnerException
    $nic.properties.IpConfigurations[0].properties.LoadBalancerBackendAddressPools += $lb.properties.backendaddresspools[0]
    
  3. Coloque o adaptador de rede para aplicar a alteração.

    new-networkcontrollernetworkinterface  -connectionuri $uri -resourceid 6daca142-7d94-0000-1111-c38c0141be06 -properties $nic.properties -force -PassInnerException
    

Exemplo: usar o Balanceador de carga de software para encaminhar o tráfego

Se você precisar mapear um IP virtual para um único adaptador de rede em uma rede virtual sem definir portas individuais, poderá criar uma regra de encaminhamento L3. Essa 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 equivale a executar o encaminhamento L3 sem NAT.

Observação

Esse processo não exige que você crie um objeto do balanceador de carga. Atribuir o PublicIPAddress ao adaptador de rede é informação suficiente para o Balanceador de Carga de Software executar sua configuração.

  1. 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
    
  2. Atribua o PublicIPAddress a um adaptador 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: usar o Balanceador de Carga de Software para encaminhar o tráfego com um VIP alocado dinamicamente

Este exemplo repete a mesma ação que o 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.

  1. 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
    
  2. 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 parecerá com o seguinte:

     Counters                 : {}
     ConfigurationState       :
     IpAddress                : 10.127.134.2
     PublicIPAddressVersion   : IPv4
     PublicIPAllocationMethod : Dynamic
     IdleTimeoutInMinutes     : 4
     DnsSettings              :
     ProvisioningState        : Succeeded
     IpConfiguration          :
     PreviousIpConfiguration  :
    
  3. Atribua o PublicIPAddress a um adaptador 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 PublicIP que está sendo usado para encaminhar o tráfego e devolvê-lo ao pool de VIP

    Este exemplo remove o recurso PublicIPAddress que foi criado pelos exemplos anteriores. Depois que o PublicIPAddress for removido, a referência ao PublicIPAddress será removida automaticamente do adaptador de rede, o tráfego deixará de ser encaminhado e o endereço IP será retornado ao pool de VIP Público para reutilização.

  4. Remover o PublicIP

    Remove-NetworkControllerPublicIPAddress -ConnectionURI $uri -ResourceId "MyPIP"