Dela via


Konfigurera lastbalanseraren för programvara för belastningsutjämning och NAT (Network Address Translation)

Du kan använda det här avsnittet för att lära dig hur du använder SDN(Software Defined Networking) software load balancer (SLB) för att tillhandahålla utgående nätverksadressöversättning (NAT), inkommande NAT eller belastningsutjämning mellan flera instanser av ett program.

Översikt över Software Load Balancer

SDN Software Load Balancer (SLB) ger dina program hög tillgänglighet och nätverksprestanda. Det är en lastbalanserare för Layer 4 (TCP, UDP) som distribuerar inkommande trafik mellan felfria tjänstinstanser i molntjänster eller virtuella datorer som definierats i en lastbalanserareuppsättning.

Konfigurera SLB för att göra följande:

  • Belastningsutjämning av inkommande trafik utanför ett virtuellt nätverk till virtuella datorer (VM), även kallat offentlig VIP-belastningsutjämning.
  • Belastningsutjämning av inkommande trafik mellan virtuella datorer i ett virtuellt nätverk, mellan virtuella datorer i molntjänster eller mellan lokala datorer och virtuella datorer i ett virtuellt nätverk mellan platser.
  • Vidarebefordra vm-nätverkstrafik från det virtuella nätverket till externa mål med hjälp av NAT (Network Address Translation), även kallat utgående NAT.
  • Vidarebefordra extern trafik till en specifik virtuell dator, även kallad inkommande NAT.

Exempel: Skapa en offentlig VIP för belastningsutjämning av en pool med två virtuella datorer i ett virtuellt nätverk

I det här exemplet skapar du ett lastbalanserarobjekt med en offentlig VIP och två virtuella datorer som poolmedlemmar för att hantera begäranden till VIP:en. Den här exempelkoden lägger också till en HTTP-hälsokontroll för att upptäcka om någon av poolmedlemmarna blir icke-svarande.

  1. Förbered lastbalanserarens objekt.

     import-module NetworkController
    
     $URI = "https://sdn.contoso.com"
    
     $LBResourceId = "LB2"
    
     $LoadBalancerProperties = new-object Microsoft.Windows.NetworkController.LoadBalancerProperties
    
  2. Tilldela en klientdels-IP-adress, som vanligtvis kallas en virtuell IP-adress (VIP).

    VIP måste vara från en oanvänd IP-adress i någon av de logiska nätverks-IP-poolerna som ges till lastbalanserarens chef.

     $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. Allokera en serverdelsadresspool som innehåller de dynamiska IP-adresserna (DIP) som är del av den lastbalanserade uppsättningen virtuella datorer.

     $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. Definiera en hälsoövervakning som lastbalanseraren använder för att fastställa hälsostatusen för medlemmarna i bakgrundspoolen.

    I det här exemplet definierar du en HTTP-avsökning som frågar till RequestPath för "/health.htm." Frågan körs var 5:e sekund, enligt egenskapen IntervalInSeconds.

    Hälsoavsökningen måste ta emot en HTTP-svarskod på 200 för 11 frågor i följd för att avsökningen ska kunna betrakta serverdels-IP-adressen som felfri. Om serverdels-IP-adressen inte är felfri tar den inte emot trafik från lastbalanseraren.

    Viktigt!

    Blockera inte trafik till eller från den första IP-adressen i undernätet för åtkomstkontrollistor (ACL:er) som du tillämpar på serverdels-IP-adressen eftersom det är ursprungspunkten för avsökningarna.

    Använd följande exempel för att definiera en hälsokontroll.

     $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. Definiera en belastningsutjämningsregel för att skicka trafik som kommer till klientdelens IP-adress till serverdels-IP-adressen. I det här exemplet tar serverdelspoolen emot TCP-trafik till port 80.

    Använd följande exempel för att definiera en belastningsutjämningsregel:

    $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. Lägg till lastbalanserarens konfiguration i nätverksstyrenheten.

    Använd följande exempel för att lägga till lastbalanserarens konfiguration i nätverksstyrenheten:

     $LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
    
  7. Följ nästa exempel för att lägga till nätverksgränssnitten i den här serverdelspoolen.

Exempel: Använd SLB för utgående NAT

I det här exemplet konfigurerar du SLB med en serverdelspool för att tillhandahålla utgående NAT-kapacitet för en virtuell dator på ett virtuellt nätverks privata adressutrymme för att nå utgående trafik till Internet.

  1. Skapa lastbalanserarens egenskaper, klientdels-IP och serverdelspool.

     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. Definiera den utgående NAT-regeln.

     $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. Lägg till lastbalanserarens objekt i nätverksstyrenheten.

     $LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
    
  4. Följ nästa exempel för att lägga till de nätverksgränssnitt som du vill ge internetåtkomst till.

Exempel: Lägga till nätverksgränssnitt i serverdelspoolen

I det här exemplet lägger du till nätverksgränssnitt i serverdelspoolen. Du måste upprepa det här steget för varje nätverksgränssnitt som kan bearbeta begäranden som görs till VIP:en.

Du kan också upprepa den här processen i ett enda nätverksgränssnitt för att lägga till den i flera lastbalanseringsobjekt. Om du till exempel har ett lastbalanserarobjekt för en webbserver-VIP och ett separat lastbalanserarobjekt för att tillhandahålla utgående NAT.

  1. Hämta lastbalanserarobjektet som innehåller serverdelspoolen för att lägga till ett nätverksgränssnitt.

    $lbresourceid = "LB2"
    $lb = get-networkcontrollerloadbalancer -connectionuri $uri -resourceID $LBResourceId -PassInnerException
    
  2. Hämta nätverksgränssnittet och lägg till backendaddress-poolen i matrisen loadbalancerbackendaddresspools.

    $nic = get-networkcontrollernetworkinterface  -connectionuri $uri -resourceid 6daca142-7d94-0000-1111-c38c0141be06 -PassInnerException
    $nic.properties.IpConfigurations[0].properties.LoadBalancerBackendAddressPools += $lb.properties.backendaddresspools[0]
    
  3. Placera nätverksgränssnittet för att tillämpa ändringen.

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

Exempel: Använd lastbalanseraren för programvara för vidarebefordring av trafik

Om du behöver mappa en virtuell IP-adress till ett enda nätverksgränssnitt i ett virtuellt nätverk utan att definiera enskilda portar kan du skapa en L3-vidarebefordransregel. Den här regeln vidarebefordrar all trafik till och från den virtuella datorn via den tilldelade VIP som finns i ett PublicIPAddress-objekt.

Om du har definierat VIP och DIP som samma undernät motsvarar detta att utföra L3-vidarebefordran utan NAT.

Anmärkning

Den här processen kräver inte att du skapar ett lastbalanserarobjekt. Att tilldela PublicIPAddress till nätverksgränssnittet är tillräckligt med information för att lastbalanseraren för programvara ska kunna utföra sin konfiguration.

  1. Skapa ett offentligt IP-objekt som ska innehålla VIP:en.

    $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. Tilldela PublicIPAddress till ett nätverksgränssnitt.

    $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
    

Exempel: Använd Software Load Balancer för att vidarebefordra trafik med en dynamiskt allokerad VIP

I det här exemplet upprepas samma åtgärd som i föregående exempel, men VIP allokeras automatiskt från den tillgängliga poolen med VIP:er i lastbalanseraren i stället för att ange en specifik IP-adress.

  1. Skapa ett offentligt IP-objekt som ska innehålla VIP:en.

    $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. Fråga resursen PublicIPAddress för att avgöra vilken IP-adress som tilldelades.

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

    Egenskapen IpAddress innehåller den tilldelade adressen. Utdata ser ut ungefär så här:

     Counters                 : {}
     ConfigurationState       :
     IpAddress                : 10.127.134.2
     PublicIPAddressVersion   : IPv4
     PublicIPAllocationMethod : Dynamic
     IdleTimeoutInMinutes     : 4
     DnsSettings              :
     ProvisioningState        : Succeeded
     IpConfiguration          :
     PreviousIpConfiguration  :
    
  3. Tilldela PublicIPAddress till ett nätverksgränssnitt.

    $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
    

    Exempel: Ta bort en OffentligIP-adress som används för vidarebefordran av trafik och returnera den till VIP-poolen

    Det här exemplet tar bort resursen PublicIPAddress som skapades av föregående exempel. När PublicIPAddress har tagits bort tas referensen till PublicIPAddress automatiskt bort från nätverksgränssnittet, trafiken slutar vidarebefordras och IP-adressen returneras till den offentliga VIP-poolen för återanvändning.

  4. Ta bort PublicIP

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