Partager via


Configurer l’équilibreur de charge logicielle pour l’équilibrage de charge et la traduction d’adresses réseau (NAT)

S’applique à : Windows Server 2022, Windows Server 2019, Windows Server 2016, Azure Stack HCI versions 21H2 et 20H2

Vous pouvez utiliser cette rubrique afin de découvrir comment utiliser l’équilibreur de charge logiciel SDN (Software-Defined Networking) pour fournir une fonctionnalité NAT (traduction d’adresses réseau) sortante, une fonctionnalité NAT entrante ou un équilibrage de charge entre plusieurs instances d’une application.

Vue d’ensemble d’un équilibreur de charge logicielle

L’équilibreur de charge logicielle SDN offre une haute disponibilité et des performances réseau optimales à vos applications. Il s’agit d’un équilibreur de charge de Couche 4 (TCP, UDP) qui distribue le trafic entrant entre les instances de service saines au sein des services cloud, ou les machines virtuelles définies dans un ensemble d’équilibreurs de charge.

Configurez l’équilibreur de charge logiciel pour effectuer les opérations suivantes :

  • Équilibrer la charge du trafic entrant externe vers un réseau virtuel et vers des machines virtuelles, également appelé équilibrage de charge d’adresses IP virtuelles publiques.
  • Équilibrer la charge du trafic entrant entre les machines virtuelles d’un réseau virtuel, entre les machines virtuelles des services cloud ou entre les ordinateurs locaux et les machines virtuelles d’un réseau virtuel entre différents locaux.
  • Rediriger le trafic réseau des machines virtuelles du réseau virtuel vers des destinations externes à l’aide de la fonctionnalité de traduction d’adresses réseau (NAT). Porte également le nom de NAT sortant.
  • Rediriger le trafic externe vers une machine virtuelle spécifique. Porte également le nom de NAT entrant.

Exemple : Créer une adresse IP virtuelle publique pour l’équilibrage de charge d’un pool de deux machines virtuelles dans un réseau virtuel

Dans cet exemple, vous créez un objet d’équilibreur de charge avec une adresse IP virtuelle publique et deux machines virtuelles membres d’un pool pour traiter les requêtes adressées à l’adresse IP virtuelle. Cet exemple de code ajoute également une sonde d’intégrité HTTP pour détecter si l’un des membres du pool cesse de répondre.

  1. Préparez l’objet d’équilibreur de charge.

     import-module NetworkController
    
     $URI = "https://sdn.contoso.com"
    
     $LBResourceId = "LB2"
    
     $LoadBalancerProperties = new-object Microsoft.Windows.NetworkController.LoadBalancerProperties
    
  2. Affectez une adresse IP de front-end, communément appelée adresse IP virtuelle.

    L’adresse IP virtuelle doit correspondre à une adresse IP inutilisée dans l’un des pools d’adresses IP de réseau logique fournis au gestionnaire de l’équilibreur de charge.

     $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. Allouez un pool d’adresses de back-end, qui contient les adresses IP dynamiques composant les membres de l’ensemble de machines virtuelles à charge équilibrée.

     $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. Définissez une sonde d’intégrité que l’équilibreur de charge va utiliser pour déterminer l’état d’intégrité des membres du pool de back-ends.

    Dans cet exemple, vous définissez une sonde HTTP qui interroge le RequestPath de « /health.htm ». La requête s’exécute toutes les 5 secondes, comme le spécifie la propriété IntervalInSeconds.

    La sonde d’intégrité doit recevoir un code de réponse HTTP 200 pour 11 requêtes consécutives afin que la sonde considère l’IP de back-end comme saine. Si l’adresse IP de back-end n’est pas saine, elle ne reçoit pas de trafic de l’équilibreur de charge.

    Important

    Ne bloquez pas le trafic à destination ou en provenance de la première adresse IP du sous-réseau pour les listes ACL (listes de contrôle d’accès) que vous appliquez à l’IP de back-end, car il s’agit du point d’origine des sondes.

    Utilisez l’exemple suivant pour définir une sonde d’intégrité.

     $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. Définissez une règle d’équilibrage de charge pour envoyer le trafic qui arrive à l’IP de front-end vers l’IP de back-end. Dans cet exemple, le pool de back-ends reçoit le trafic TCP sur le port 80.

    Utilisez l’exemple suivant pour définir une règle d’équilibrage de charge :

    $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. Ajoutez la configuration de l’équilibreur de charge au Contrôleur de réseau.

    Utilisez l’exemple suivant pour ajouter la configuration de l’équilibreur de charge au Contrôleur de réseau :

     $LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
    
  7. Suivez l’exemple ci-après pour ajouter les interfaces réseau à ce pool de back-ends.

Exemple : Utiliser l’équilibreur de charge logiciel pour la fonctionnalité NAT sortante

Dans cet exemple, vous configurez l’équilibreur de charge logiciel avec un pool de back-ends pour fournir une fonctionnalité NAT sortante à une machine virtuelle située dans l’espace d’adressage privé d’un réseau virtuel afin qu’elle puisse établir des connexions sortantes vers Internet.

  1. Créez les propriétés de l’équilibreur de charge, l’IP de front-end et le pool de back-ends.

     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. Définissez la règle NAT sortante.

     $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. Ajoutez l’objet d’équilibreur de charge au Contrôleur de réseau.

     $LoadBalancerResource = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $LBResourceId -Properties $LoadBalancerProperties -Force -PassInnerException
    
  4. Suivez l’exemple ci-après pour ajouter les interfaces réseau auxquelles vous souhaitez fournir l’accès à Internet.

Exemple : Ajouter des interfaces réseau au pool de back-ends

Dans cet exemple, vous ajoutez des interfaces réseau au pool de back-ends. Vous devez répéter cette étape pour chaque interface réseau pouvant traiter les requêtes adressées à l’adresse IP virtuelle.

Vous pouvez également répéter ce processus sur une seule interface réseau pour l’ajouter à plusieurs objets d’équilibreur de charge. Par exemple, vous avez un objet d’équilibreur de charge pour une adresse IP virtuelle de serveur web, et un objet d’équilibreur de charge distinct pour fournir la fonctionnalité NAT sortante.

  1. Récupérez l’objet d’équilibreur de charge contenant le pool de back-ends pour ajouter une interface réseau.

    $lbresourceid = "LB2"
    $lb = get-networkcontrollerloadbalancer -connectionuri $uri -resourceID $LBResourceId -PassInnerException
    
  2. Récupérez l’interface réseau, puis ajoutez le pool d’adresses de back-end au tableau loadbalancerbackendaddresspools.

    $nic = get-networkcontrollernetworkinterface  -connectionuri $uri -resourceid 6daca142-7d94-0000-1111-c38c0141be06 -PassInnerException
    $nic.properties.IpConfigurations[0].properties.LoadBalancerBackendAddressPools += $lb.properties.backendaddresspools[0]
    
  3. Placez l’interface réseau pour appliquer le changement.

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

Exemple : Utiliser l’équilibreur de charge logiciel pour la redirection du trafic

Si vous devez mapper une adresse IP virtuelle à une seule interface réseau sur un réseau virtuel sans définir de ports individuels, vous pouvez créer une règle de redirection L3. Cette règle redirige tout le trafic à destination et en provenance de la machine virtuelle via l’adresse IP virtuelle affectée contenue dans un objet PublicIPAddress.

Si vous avez défini l’adresse IP virtuelle et l’adresse IP dynamique dans le même sous-réseau, cela équivaut à effectuer une redirection L3 sans NAT.

Notes

Ce processus ne vous oblige pas à créer un objet d’équilibreur de charge. L’affectation de PublicIPAddress à l’interface réseau suffit à l’équilibreur de charge logiciel pour effectuer sa configuration.

  1. Créez un objet d’adresse IP publique pour contenir l’adresse IP virtuelle.

    $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. Affectez PublicIPAddress à une interface réseau.

    $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
    

Exemple : Utiliser l’équilibreur de charge logiciel pour la redirection du trafic avec une adresse IP virtuelle allouée de manière dynamique

Cet exemple répète la même action que l’exemple précédent. Toutefois, il alloue automatiquement l’adresse IP virtuelle à partir du pool d’adresses IP virtuelles disponibles dans l’équilibreur de charge au lieu de spécifier une adresse IP particulière.

  1. Créez un objet d’adresse IP publique pour contenir l’adresse IP virtuelle.

    $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. Interrogez la ressource PublicIPAddress pour déterminer l’adresse IP affectée.

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

    La propriété IpAddress contient l’adresse affectée. Le résultat ressemble à ce qui suit :

     Counters                 : {}
     ConfigurationState       :
     IpAddress                : 10.127.134.2
     PublicIPAddressVersion   : IPv4
     PublicIPAllocationMethod : Dynamic
     IdleTimeoutInMinutes     : 4
     DnsSettings              :
     ProvisioningState        : Succeeded
     IpConfiguration          :
     PreviousIpConfiguration  :
    
  3. Affectez PublicIPAddress à une interface réseau.

    $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
    

    Exemple : Supprimer une adresse IP publique utilisée pour la redirection du trafic, et la retourner au pool d’adresses IP virtuelles

    Cet exemple supprime la ressource PublicIPAddress créée par les exemples précédents. Une fois la ressource PublicIPAddress supprimée, la référence à PublicIPAddress est automatiquement supprimée de l’interface réseau, le trafic cesse d’être redirigé, et l’adresse IP est retournée au pool d’adresses IP virtuelles publiques pour être réutilisée.

  4. Supprimer l’adresse IP publique

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