Compartir a través de


Configuración del equilibrador de carga de software para el equilibrio de carga y la traducción de direcciones de red (NAT)

Con este artículo aprenderá a usar el equilibrador de carga de software (SLB) de redes definidas por software (SDN) para proporcionar traducción de direcciones de red salientes (NAT), NAT de entrada o equilibrio de carga entre varias instancias de una aplicación.

Introducción al software Load Balancer

El equilibrador de carga de software SDN ofrece alta disponibilidad y rendimiento de red para sus aplicaciones. Se trata de un equilibrador de carga de capa 4 (TCP, UDP) que distribuye el tráfico entrante entre las instancias de servicio de mantenimiento de los servicios en la nube o en las máquinas virtuales que se definieron en un conjunto de equilibradores de carga.

Configure el SLB para que haga lo siguiente:

  • Equilibrar la carga del tráfico entrante externo a una red virtual y a máquinas virtuales (VM), también denominado equilibrio de carga de VIP público.
  • Equilibrar la carga del tráfico entrante entre máquinas virtuales en una red virtual, entre máquinas virtuales en servicios en la nube o entre equipos locales y máquinas virtuales en una red virtual entre entornos.
  • Reenviar el tráfico de red de la máquina virtual desde la red virtual a destinos externos mediante la traducción de direcciones de red (NAT), también denominada NAT de salida.
  • Reenviar el tráfico externo a una máquina virtual específica, también denominada NAT de entrada.

Ejemplo: Creación de una VIP pública para equilibrar la carga de un grupo de dos máquinas virtuales en una red virtual

En este ejemplo, se crea un objeto de equilibrador de carga con una VIP pública y dos máquinas virtuales como miembros del grupo para atender solicitudes a la VIP. Este código de ejemplo también agrega un sondeo de estado HTTP para detectar si uno de los miembros del grupo deja de responder.

  1. Prepare el objeto del equilibrador de carga.

     import-module NetworkController
    
     $URI = "https://sdn.contoso.com"
    
     $LBResourceId = "LB2"
    
     $LoadBalancerProperties = new-object Microsoft.Windows.NetworkController.LoadBalancerProperties
    
  2. Asigne una dirección IP de front-end, denominada normalmente IP virtual (VIP).

    La dirección VIP debe ser de una dirección IP sin usar en uno de los grupos de direcciones IP de red lógicas proporcionados al administrador del equilibrador 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. Asigne un grupo de direcciones de back-end, que contiene las direcciones IP dinámicas (DIP) que componen los miembros del conjunto de máquinas virtuales con equilibrio 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 un sondeo de estado que utilizará el equilibrador de carga para determinar el estado de los miembros del grupo de back-end.

    En este ejemplo, se define un sondeo HTTP que consulta a RequestPath de "/health.htm". La consulta se ejecuta cada 5 segundos, tal como se especifica en la propiedad IntervalInSeconds.

    El sondeo de estado debe recibir un código de respuesta HTTP de 200 para 11 consultas consecutivas para que considere que la dirección IP de back-end es correcta. Si la dirección IP de back-end no está en buen estado, no recibe tráfico del equilibrador de carga.

    Importante

    No bloquee el tráfico hacia o desde la primera dirección IP de la subred para las listas (ACL) de control de acceso que aplique a la dirección IP de back-end, ya que es el punto de origen de los sondeos.

    Use el ejemplo siguiente para definir un sondeo de estado.

     $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 una regla de equilibrio de carga para enviar tráfico que llegue a la dirección IP de front-end y la dirección IP de back-end. En este ejemplo, el grupo de back-end recibe tráfico TCP en el puerto 80.

    Use el ejemplo siguiente para definir una regla de equilibrio 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. Agregue la configuración del equilibrador de carga a la Controladora de red.

    Use el ejemplo siguiente para agregar la configuración del equilibrador de carga a la Controladora de red:

     $LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
    
  7. Siga el ejemplo siguiente para agregar las interfaces de red a este grupo de back-end.

Ejemplo: Uso de SLB para NAT de salida

En este ejemplo, se configura SLB con un grupo de back-end para proporcionar la funcionalidad NAT de salida para una máquina virtual en el espacio de direcciones privado de una red virtual para alcanzar la salida a Internet.

  1. Cree las propiedades del equilibrador de carga, la dirección IP de front-end y el grupo 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 la regla NAT de salida.

     $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. Agregue el objeto del equilibrador de carga en la Controladora de red.

     $LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
    
  4. Siga el ejemplo siguiente para agregar las interfaces de red a las que desea proporcionar acceso a Internet.

Ejemplo: Adición de interfaces de red al grupo de back-end

En este ejemplo, agregará interfaces de red al grupo de back-end. Debe repetir este paso para cada interfaz de red que pueda procesar las solicitudes realizadas a la dirección VIP.

También puede repetir este proceso en una sola interfaz de red para agregarlo a varios objetos del equilibrador de carga. Por ejemplo, si tiene un objeto de equilibrador de carga para una VIP de servidor web y un objeto de equilibrador de carga independiente para proporcionar NAT de salida.

  1. Obtenga el objeto del equilibrador de carga que contiene el grupo de back-end para agregar una interfaz de red.

    $lbresourceid = "LB2"
    $lb = get-networkcontrollerloadbalancer -connectionuri $uri -resourceID $LBResourceId -PassInnerException
    
  2. Obtenga la interfaz de red y agregue el grupo backendaddress a la 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. Ponga la interfaz de red para aplicar el cambio.

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

Ejemplo: Uso del equilibrador de carga de software para reenviar el tráfico

Si necesita asignar una dirección IP virtual a una sola interfaz de red en una red virtual sin definir puertos individuales, puede crear una regla de reenvío L3. Esta regla reenvía todo el tráfico hacia y desde la máquina virtual a través de la VIP asignada contenida en un objeto PublicIPAddress.

Si definió la VIP y DIP como la misma subred, esto equivale a realizar el reenvío L3 sin NAT.

Nota

Este proceso no requiere crear un objeto de equilibrador de carga. La asignación de PublicIPAddress a la interfaz de red es suficiente información para que el equilibrador de carga de software realice su configuración.

  1. Cree un objeto de dirección IP pública para que contenga la 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. Asigne PublicIPAddress a una interfaz de red.

    $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
    

Ejemplo: Uso del equilibrador de carga de software para reenviar el tráfico con una VIP asignada dinámicamente

En este ejemplo se repite la misma acción que en el ejemplo anterior, pero se asigna automáticamente la dirección VIP del grupo de VIP disponible en el equilibrador de carga en lugar de especificar una dirección IP específica.

  1. Cree un objeto de dirección IP pública para que contenga la 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 el recurso PublicIPAddress para determinar a qué dirección IP se asignó.

     (Get-NetworkControllerPublicIpAddress -ConnectionUri $uri -ResourceId "MyPIP").properties
    

    La propiedad IpAddress contiene la dirección asignada. El resultado será similar al siguiente:

     Counters                 : {}
     ConfigurationState       :
     IpAddress                : 10.127.134.2
     PublicIPAddressVersion   : IPv4
     PublicIPAllocationMethod : Dynamic
     IdleTimeoutInMinutes     : 4
     DnsSettings              :
     ProvisioningState        : Succeeded
     IpConfiguration          :
     PreviousIpConfiguration  :
    
  3. Asigne PublicIPAddress a una interfaz de red.

    $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
    

    Ejemplo: Eliminación de una dirección PublicIP que se esté usando para reenviar el tráfico y devolverla al grupo de VIP

    En este ejemplo se quita el recurso PublicIPAddress creado por los ejemplos anteriores. Una vez quitado el recurso PublicIPAddress, la referencia a PublicIPAddress se quitará automáticamente de la interfaz de red, el tráfico dejará de reenviarse y la dirección IP se devolverá al grupo de VIP públicas para reutilizarse.

  4. Quite la PublicIP

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