Condividi tramite


Configurare il servizio di bilanciamento del carico software per il bilanciamento del carico e Network Address Translation (NAT)

È possibile utilizzare questo argomento per ottenere informazioni su come usare il servizio di bilanciamento del carico software Software Defined Networking per offrire servizi di conversione degli indirizzi di rete in uscita e in ingresso o il bilanciamento del carico tra più istanze di un'applicazione.

Panoramica di Bilanciamento del carico software

Il Bilanciamento del carico software SDN offre prestazioni di rete e disponibilità elevata alle applicazioni. Si tratta di un servizio di bilanciamento del carico di livello 4 (TCP, UDP) che distribuisce il traffico in ingresso tra istanze di servizi integri nei servizi cloud o nelle macchine virtuali definite in un set di bilanciamento del carico.

Configurare SLB per eseguire le operazioni seguenti:

  • Bilanciare il carico del traffico esterno in ingresso a una rete virtuale alle macchine virtuali, detto anche bilanciamento del carico VIP pubblico.
  • Bilanciare il carico del traffico in ingresso tra macchine virtuali in una rete virtuale, tra macchine virtuali nei servizi cloud o tra computer e macchine virtuali locali in una rete virtuale cross-premise.
  • Inoltrare il traffico di rete delle macchine virtuali dalla rete virtuale alle destinazioni esterne usando Network Address Translation (NAT), detto anche NAT in uscita.
  • Inoltrare il traffico esterno a una macchina virtuale specifica, detto anche NAT in ingresso.

Esempio: creare un indirizzo VIP pubblico per il bilanciamento del carico di un pool di due macchine virtuali in una rete virtuale

In questo esempio viene creato un oggetto di bilanciamento del carico con un indirizzo VIP pubblico e due macchine virtuali come membri del pool per gestire le richieste all'indirizzo VIP. Questo codice di esempio aggiunge anche un probe di integrità HTTP per rilevare se uno dei membri del pool diventa non reattivo.

  1. Preparare l'oggetto di bilanciamento del carico.

     import-module NetworkController
    
     $URI = "https://sdn.contoso.com"
    
     $LBResourceId = "LB2"
    
     $LoadBalancerProperties = new-object Microsoft.Windows.NetworkController.LoadBalancerProperties
    
  2. Assegnare un indirizzo IP front-end, comunemente definito indirizzo IP virtuale (VIP).

    L'indirizzo IP virtuale deve provenire da un indirizzo IP inutilizzato in uno dei pool IP di rete logica assegnati alla gestione del servizio di bilanciamento del carico.

     $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. Allocare un pool di indirizzi back-end, che contiene gli indirizzi IP dinamici che costituiscono i membri del set di macchine virtuali con carico bilanciato.

     $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. Definire un probe di integrità usato dal servizio di bilanciamento del carico per determinare lo stato di integrità dei membri del pool back-end.

    In questo esempio viene definito un probe HTTP che esegue query su RequestPath of "/health.htm." La query viene eseguita ogni 5 secondi, come specificato dalla proprietà IntervalInSeconds.

    Il probe di integrità deve ricevere un codice di risposta HTTP pari a 200 per 11 query consecutive affinché il probe consideri integro l'indirizzo IP back-end. Se l'indirizzo IP back-end non è integro, non riceve traffico dal servizio di bilanciamento del carico.

    Importante

    Non bloccare il traffico in entrata o in uscita dal primo indirizzo IP nella subnet per gli elenchi di controllo degli accessi applicati all'indirizzo IP back-end perché si tratta del punto di origine per i probe.

    Usare l'esempio seguente per definire un probe di integrità.

     $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. Definire una regola di bilanciamento del carico per inviare il traffico che arriva all'indirizzo IP front-end all'indirizzo IP back-end. In questo esempio il pool back-end riceve il traffico TCP nella porta 80.

    Usare l'esempio seguente per definire una regola di bilanciamento del carico:

    $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. Aggiungere la configurazione del servizio di bilanciamento del carico al Controller di rete.

    Usare l'esempio seguente per aggiungere la configurazione del servizio di bilanciamento del carico al Controller di rete:

     $LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
    
  7. Seguire l'esempio seguente per aggiungere le interfacce di rete a questo pool back-end.

Esempio: usare Bilanciamento del carico software per NAT in uscita

In questo esempio si configura Bilanciamento del carico software con un pool back-end per fornire funzionalità NAT in uscita per una macchina virtuale nello spazio indirizzi privato di una rete virtuale per raggiungere Internet.

  1. Creare le proprietà del servizio di bilanciamento del carico, l'indirizzo IP front-end e il pool 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. Definire la regola NAT in uscita.

     $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. Aggiungere l'oggetto del servizio di bilanciamento del carico al Controller di rete.

     $LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
    
  4. Seguire l'esempio seguente per aggiungere le interfacce di rete a cui si vuole fornire l'accesso a Internet.

Esempio: aggiungere interfacce di rete al pool back-end

In questo esempio vengono aggiunte interfacce di rete al pool back-end. È necessario ripetere questo passaggio per ogni interfaccia di rete in grado di elaborare le richieste effettuate all'indirizzo VIP.

È anche possibile ripetere questo processo in una singola interfaccia di rete per aggiungerla a più oggetti del servizio di bilanciamento del carico. Ad esempio, se si dispone di un oggetto del servizio di bilanciamento del carico per un indirizzo VIP del server Web e di un oggetto del servizio di bilanciamento del carico separato per offrire NAT in uscita.

  1. Ottenere l'oggetto del servizio di bilanciamento del carico contenente il pool back-end per aggiungere un'interfaccia di rete.

    $lbresourceid = "LB2"
    $lb = get-networkcontrollerloadbalancer -connectionuri $uri -resourceID $LBResourceId -PassInnerException
    
  2. Ottenere l'interfaccia di rete e aggiungere il pool backendaddress alla matrice loadbalancerbackendaddresspools.

    $nic = get-networkcontrollernetworkinterface  -connectionuri $uri -resourceid 6daca142-7d94-0000-1111-c38c0141be06 -PassInnerException
    $nic.properties.IpConfigurations[0].properties.LoadBalancerBackendAddressPools += $lb.properties.backendaddresspools[0]
    
  3. Inserire l'interfaccia di rete per applicare la modifica.

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

Esempio: usare il servizio di bilanciamento del carico software per l'inoltro del traffico

Se è necessario eseguire il mapping di un indirizzo IP virtuale a una singola interfaccia di rete in una rete virtuale senza definire singole porte, è possibile creare una regola di inoltro L3. Questa regola inoltra tutto il traffico in entrata e in uscita dalla macchina virtuale tramite l'indirizzo VIP assegnato contenuto in un oggetto PublicIPAddress.

La definizione dell'indirizzo VIP e dell'indirizzo dinamico come la stessa subnet, equivale a eseguire la regola di inoltro L3 senza NAT.

Nota

Questo processo non richiede la creazione di un oggetto del servizio di bilanciamento del carico. L'assegnazione di PublicIPAddress all'interfaccia di rete è sufficiente per l'esecuzione della configurazione di Bilanciamento del carico software.

  1. Creare un oggetto IP pubblico per contenere l'indirizzo 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. Assegnare PublicIPAddress a un'interfaccia di rete.

    $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
    

Esempio: usare Bilanciamento del carico software per l'inoltro del traffico con un indirizzo VIP allocato dinamicamente

Questo esempio ripete la stessa azione dell'esempio precedente, ma alloca automaticamente l'indirizzo VIP dal pool di indirizzi VIP disponibili nel servizio di bilanciamento del carico anziché specificare un indirizzo IP specifico.

  1. Creare un oggetto IP pubblico per contenere l'indirizzo 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. Eseguire una query sulla risorsa PublicIPAddress per determinare l'indirizzo IP assegnato.

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

    La proprietà IPAddress contiene l'indirizzo assegnato. L'output sarà simile al seguente:

     Counters                 : {}
     ConfigurationState       :
     IpAddress                : 10.127.134.2
     PublicIPAddressVersion   : IPv4
     PublicIPAllocationMethod : Dynamic
     IdleTimeoutInMinutes     : 4
     DnsSettings              :
     ProvisioningState        : Succeeded
     IpConfiguration          :
     PreviousIpConfiguration  :
    
  3. Assegnare PublicIPAddress a un'interfaccia di rete.

    $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
    

    Esempio: rimuovere un indirizzo PublicIP usato per l'inoltro del traffico e restituirlo al pool VIP

    In questo esempio viene rimossa la risorsa PublicIPAddress creata dagli esempi precedenti. Dopo aver rimosso PublicIPAddress, il riferimento all'indirizzo PublicIPAddress verrà automaticamente rimosso dall'interfaccia di rete, il traffico smetterà di essere inoltrato e l'indirizzo IP verrà restituito al pool di indirizzi VIP pubblici per essere usato in futuro.

  4. Rimuovere PublicIP

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