Freigeben über


Konfigurieren des Software Load Balancers für den Lastenausgleich und Netzwerkadressenübersetzung

In diesem Thema erfahren Sie, wie Sie den Software-Defined Networking-Softwarelastenausgleich (SLB) verwenden, um Netzwerkadressenübersetzung (NAT) für aus- und eingehenden Datenverkehr oder Lastenausgleich zwischen mehreren Instanzen einer Anwendung bereitzustellen.

Übersicht über Software Load Balancer

Der SDN-Softwarelastenausgleich (SLB) bietet Hochverfügbarkeit und Netzwerkleistung für Ihre Anwendungen. Es handelt sich um einen Ebene-4-Lastenausgleich (TCP, UDP), der eingehenden Datenverkehr auf fehlerfreie Dienstinstanzen in Clouddiensten oder auf VMs verteilt, die in einer Lastenausgleichsgruppe definiert sind.

Konfigurieren Sie SLB für die folgenden Aufgaben:

  • Lastenausgleich für eingehenden Datenverkehr, der für ein virtuelles Netzwerk extern ist, auf VMs, auch als öffentlicher VIP-Lastenausgleich bezeichnet.
  • Lastenausgleich für eingehenden Datenverkehr zwischen VMs in einem virtuellen Netzwerk, zwischen VMs in Clouddiensten oder zwischen lokalen Computern und VMs in einem standortübergreifenden virtuellen Netzwerk.
  • Weiterleiten von VM-Netzwerkdatenverkehr vom virtuellen Netzwerk an externe Ziele mithilfe von Netzwerkadressübersetzung (Network Address Translation, NAT), auch als ausgehende NAT bezeichnet.
  • Weiterleiten von externem Datenverkehr an eine bestimmte VM, auch als eingehende NAT bezeichnet.

Beispiel: Erstellen einer öffentlichen VIP für Lastenausgleich eines Pools mit zwei VMs in einem virtuellen Netzwerk

In diesem Beispiel erstellen Sie ein Lastenausgleichsobjekt mit einer öffentlichen VIP und zwei VMs als Poolmitglieder, um Anforderungen an die VIP zu verarbeiten. Dieser Beispielcode fügt auch einen HTTP-Integritätstest hinzu, um zu erkennen, ob eines der Poolmitglieder nicht mehr reagiert.

  1. Bereiten Sie das Lastenausgleichsobjekt vor.

     import-module NetworkController
    
     $URI = "https://sdn.contoso.com"
    
     $LBResourceId = "LB2"
    
     $LoadBalancerProperties = new-object Microsoft.Windows.NetworkController.LoadBalancerProperties
    
  2. Weisen Sie eine Front-End-IP-Adresse zu, die häufig als virtuelle IP-Adresse (VIP) bezeichnet wird.

    Die VIP muss von einer nicht verwendeten IP-Adresse in einem der IP-Pools des logischen Netzwerks stammen, die dem Lastenausgleichs-Manager zugewiesen wurden.

     $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. Weisen Sie einen Back-End-Adresspool zu, der die dynamischen IP-Adressen (DIPs) enthält, die die Mitglieder der Lastenausgleichsgruppe von VMs bilden.

     $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. Definieren Sie einen Integritätstest, den der Lastenausgleich verwendet, um den Integritätsstatus der Mitglieder im Back-End-Pool zu bestimmen.

    In diesem Beispiel definieren Sie einen HTTP-Test, der den RequestPath von „/health.htm“ abfragt. Die Abfrage wird alle 5 Sekunden ausgeführt, wie durch die IntervalInSeconds-Eigenschaft angegeben.

    Der Integritätstest muss den HTTP-Antwortcode 200 für 11 aufeinanderfolgende Abfragen erhalten, damit der Test die Back-End-IP-Adresse als fehlerfrei annimmt. Wenn die Back-End-IP nicht fehlerfrei ist, empfängt sie keinen Datenverkehr vom Lastenausgleich.

    Wichtig

    Blockieren Sie keinen Datenverkehr zur oder von der ersten IP-Adresse im Subnetz für ACLs (Access Control Lists), die Sie auf die Back-End-IP-Adresse anwenden, da dies der Ursprungspunkt für die Tests ist.

    Verwenden Sie das folgende Beispiel, um einen Integritätstest zu definieren.

     $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. Definieren Sie eine Lastenausgleichsregel, um Datenverkehr, der an der Front-End-IP-Adresse eingeht, an die Back-End-IP-Adresse zu senden. In diesem Beispiel empfängt der Back-End-Pool TCP-Datenverkehr an Port 80.

    Verwenden Sie das folgende Beispiel, um eine Lastenausgleichsregel zu definieren:

    $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. Fügen Sie dem Netzwerkcontroller die Konfiguration des Lastenausgleichs hinzu.

    Verwenden Sie das folgende Beispiel, um dem Netzwerkcontroller die Lastenausgleichskonfiguration hinzuzufügen:

     $LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
    
  7. Entnehmen Sie dem nächsten Beispiel, wie Sie diesem Back-End-Pool die Netzwerkschnittstellen hinzufügen.

Beispiel: Verwenden von SLB für ausgehende NAT

In diesem Beispiel konfigurieren Sie SLB mit einem Back-End-Pool, um ausgehende NAT-Funktionen für eine VM im privaten Adressraum eines virtuellen Netzwerks bereitzustellen, um ausgehende Verbindungen mit dem Internet herzustellen.

  1. Erstellen Sie die Lastenausgleichseigenschaften, die Front-End-IP-Adresse und den Back-End-Pool.

     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. Definieren Sie die NAT-Regel für ausgehenden Datenverkehr.

     $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. Fügen Sie das Lastenausgleichsobjekt im Netzwerkcontroller hinzu.

     $LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
    
  4. Entnehmen Sie dem nächsten Beispiel, wie Sie die Netzwerkschnittstellen hinzufügen, für die Sie Internetzugriff bereitstellen möchten.

Beispiel: Hinzufügen von Netzwerkschnittstellen zum Back-End-Pool

In diesem Beispiel fügen Sie dem Back-End-Pool Netzwerkschnittstellen hinzu. Sie müssen diesen Schritt für jede Netzwerkschnittstelle wiederholen, die Anforderungen an die VIP verarbeiten kann.

Sie können diesen Vorgang auch auf für eine einzelne Netzwerkschnittstelle wiederholen, um sie mehreren Lastenausgleichsobjekten hinzuzufügen. Wenn Sie beispielsweise über ein Lastenausgleichsobjekt für eine Webserver-VIP und ein separates Lastenausgleichsobjekt zum Bereitstellen ausgehender NAT verfügen.

  1. Rufen Sie das Lastenausgleichsobjekt ab, das den Back-End-Pool enthält, um eine Netzwerkschnittstelle hinzuzufügen.

    $lbresourceid = "LB2"
    $lb = get-networkcontrollerloadbalancer -connectionuri $uri -resourceID $LBResourceId -PassInnerException
    
  2. Rufen Sie die Netzwerkschnittstelle ab, und fügen Sie dem loadbalancerbackendaddresspools-Array den backendaddress-Pool hinzu.

    $nic = get-networkcontrollernetworkinterface  -connectionuri $uri -resourceid 6daca142-7d94-0000-1111-c38c0141be06 -PassInnerException
    $nic.properties.IpConfigurations[0].properties.LoadBalancerBackendAddressPools += $lb.properties.backendaddresspools[0]
    
  3. Legen Sie die Netzwerkschnittstelle fest, um die Änderung anzuwenden.

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

Beispiel: Verwenden des SLB zum Weiterleiten von Datenverkehr

Wenn Sie eine virtuelle IP-Adresse einer einzelnen Netzwerkschnittstelle in einem virtuellen Netzwerk zuordnen müssen, ohne einzelne Ports zu definieren, können Sie eine L3-Weiterleitungsregel erstellen. Diese Regel leitet den gesamten Datenverkehr an die und von der VM über die zugewiesene VIP weiter, die in einem PublicIPAddress-Objekt enthalten ist.

Wenn Sie die VIP und DIP als dasselbe Subnetz definiert haben, entspricht dies der Durchführung der L3-Weiterleitung ohne NAT.

Hinweis

Für diesen Vorgang müssen Sie kein Lastenausgleichsobjekt erstellen. Das Zuweisen von PublicIPAddress zur Netzwerkschnittstelle stellt ausreichende Informationen bereit, damit der SLB ihre Konfiguration ausführen kann.

  1. Erstellen Sie ein öffentliches IP-Adressobjekt, das die VIP enthält.

    $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. Weisen Sie PublicIPAddress einer Netzwerkschnittstelle zu.

    $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
    

Beispiel: Verwenden des SLB zum Weiterleiten von Datenverkehr mit einer dynamisch zugeordneten VIP

In diesem Beispiel wird dieselbe Aktion wie im vorherigen Beispiel wiederholt, aber die VIP wird automatisch aus dem verfügbaren Pool von VIPs im Lastenausgleich zugeordnet, anstatt eine bestimmte IP-Adresse anzugeben.

  1. Erstellen Sie ein öffentliches IP-Adressobjekt, das die VIP enthält.

    $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. Fragen Sie die PublicIPAddress-Ressource ab, um zu ermitteln, welche IP-Adresse zugewiesen wurde.

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

    Die IpAddress-Eigenschaft enthält die zugewiesene Adresse. Die Ausgabe sieht etwa wie folgt aus:

     Counters                 : {}
     ConfigurationState       :
     IpAddress                : 10.127.134.2
     PublicIPAddressVersion   : IPv4
     PublicIPAllocationMethod : Dynamic
     IdleTimeoutInMinutes     : 4
     DnsSettings              :
     ProvisioningState        : Succeeded
     IpConfiguration          :
     PreviousIpConfiguration  :
    
  3. Weisen Sie PublicIPAddress einer Netzwerkschnittstelle zu.

    $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
    

    Beispiel: Entfernen einer PublicIP-Adresse, die zum Weiterleiten von Datenverkehr sowie zum Zurückgeben an den VIP-Pool verwendet wird

    In diesem Beispiel wird die PublicIPAddress-Ressource entfernt, die in den vorherigen Beispielen erstellt wurde. Sobald PublicIPAddress entfernt wurde, wird der Verweis auf PublicIPAddress automatisch aus der Netzwerkschnittstelle entfernt, der Datenverkehr wird nicht mehr weitergeleitet, und die IP-Adresse wird zur Wiederverwendung an den öffentlichen VIP-Pool zurückgegeben.

  4. Entfernen von PublicIP

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