Équilibrer la charge du trafic réseau dans une infrastructure SDN à l’aide de VMM

Important

Cette version de Virtual Machine Manager (VMM) a atteint la fin du support. Nous vous recommandons de mettre à niveau vers VMM 2022.

Dans une infrastructure réseau à définition logicielle (SDN), vous pouvez utiliser l’équilibrage de charge logicielle (SLB) pour répartir équitablement le trafic réseau entre les différentes charges de travail gérées par les fournisseurs de services cloud (CSP) et les locataires. Pour plus d’informations, consultez Équilibreur de charge logiciel (SLB).

System Center Virtual Machine Manager (VMM) prend en charge les deux scénarios d’équilibrage de charge suivants :

  • Équilibrer la charge du trafic réseau externe : ce scénario inclut l’équilibrage de charge pour le trafic réseau provenant d’un réseau externe. L’équilibrage de charge s’effectue via une IP virtuelle publique (VIP). Cela concerne les charges de travail des machines virtuelles qui peuvent se connecter à un réseau de machines virtuelles sans aucune isolation ou à un réseau de machines virtuelles avec virtualisation de réseau.

  • Équilibrer la charge du trafic réseau interne (équilibrage de charge interne) : ce scénario inclut l’équilibrage de charge du trafic réseau pour les charges de travail des machines virtuelles connectées à un réseau avec virtualisation de réseau. L’équilibrage de charge s’effectue via une IP virtuelle publique (VIP).

    Notes

    VMM 2016 prend en charge la configuration de l’équilibrage de charge avec PowerShell, mais pas la configuration à l’aide de modèles de service.

Cet article explique comment configurer l’équilibrage des charges de travail des machines virtuelles à l’aide de PowerShell.

Notes

  • À compter de VMM 2019 UR1, le type de réseau Un réseau connecté est remplacé par Réseau connecté
  • VMM 2019 UR2 et les versions ultérieures prennent en charge IPv6.

Avant de commencer

Vérifiez les points suivants :

Créer un modèle d’adresse IP virtuelle

Effectuez les étapes suivantes pour configurer les adresses IP virtuelles afin d’équilibrer les charges de travail des machines virtuelles (DIP).

  1. Dans la console VMM, sélectionnezModèles d’adresses IP virtuelles d’infrastructure>. Cliquez avec le bouton droit sur Créer un modèle d’adresse IP virtuelle.

    Capture d’écran du nom du modèle d’adresse IP virtuelle.

  2. Dans la page Nom, entrez le nom et une description facultative. Spécifiez le port IP virtuel qui sera utilisé comme port frontal pour le trafic réseau. Dans le port principal, spécifiez le port sur lequel les charges de travail back-end sont hébergées. Sélectionnez Suivant.

    Capture d’écran du type de modèle d’adresse IP virtuelle.

  3. Dans Spécifier un type de modèle, sélectionnez « Spécifique ». Dans Fabricant, sélectionnez Microsoft. Dans Modèle, sélectionnez « Contrôleur de réseau Microsoft ». Sélectionnez Suivant.

    Capture d’écran des options de protocole VIP.

  4. Dans Spécifier les options du protocole, sélectionnez l’option « Personnalisé » et tapez « TCP/UDP » comme nom de protocole. Sélectionnez Suivant.

    Notes

    SLB prend en charge uniquement l’équilibrage de charge de couche 4 pour le trafic TCP/UDP. Les protocoles HTTP/HTTPS ne sont pas pris en charge.

  5. Pour les options Persistance et Équilibrage de charge, utilisez les valeurs par défaut. Sélectionnez Suivant.

    Capture d’écran du Moniteur d’intégrité.

    Notes

    SLB ne prend pas en charge la persistance et différentes méthodes d’équilibrage de charge. Par défaut, SLB utilise l’algorithme de tourniquet (round robin) pour l’équilibrage de charge.

  6. Dans Analyseurs d’intégrité, vous pouvez facultativement entrer les valeurs appropriées. Sélectionnez Suivant.

    Options : TCP et HTTP sont pris en charge comme protocoles d’analyseur d’intégrité si SLB est utilisé.

  7. Vérifiez les paramètres, puis sélectionnez Terminer.

Après avoir créé le modèle, vous pouvez le voir sous InfrastructureModèles d’adresse IP virtuelle.

Créer une adresse IP virtuelle à l’aide de PowerShell

Créez une adresse IP virtuelle en utilisant les exemples de scripts suivants. Sélectionnez le script correspondant au type de trafic réseau pour lequel vous souhaitez équilibrer la charge :

Script pour créer une adresse IP virtuelle afin d’équilibrer le trafic réseau externe

Script pour créer une adresse IP virtuelle afin d’équilibrer le trafic réseau interne

Script pour créer une adresse IP virtuelle afin d’équilibrer le trafic réseau externe

L’exemple de script suivant permet de créer l’adresse IP virtuelle à partir d’un réseau IP public pour équilibrer la charge de travail des machines virtuelles WGB-001 et WGB-002 sur le port 80.

Vous pouvez utiliser ce script pour créer des adresses IP virtuelles d’équilibrage de charge en transmettant également une adresse IP virtuelle IPv6.

Cela concerne les charges de travail des machines virtuelles qui peuvent se connecter à un réseau sans aucune isolation ou à des réseaux de machines virtuelles avec virtualisation de réseau.

Notes

  • Dans la section Paramètres de script, remplacez les valeurs par celles de votre environnement de test pour les exemples utilisés dans ce script.
  • Veillez à exécuter le script sur un serveur VMM ou sur un ordinateur exécutant la console VMM.
param(

[Parameter(Mandatory=$false)]
# Name of the Network Controller Network Service
# This value should be the name you gave the Network Controller service
# when you on-boarded the Network Controller to VMM
$LBServiceName = "NC",

[Parameter(Mandatory=$false)]
# Name of the workload VMs you want to load balance.
$VipMemberVMNames =  @("WGB-001","WGB-002"),

[Parameter(Mandatory=$false)]
# Name of the VIP VM Network
$VipNetworkName = "PublicVIP",


[Parameter(Mandatory=$false)]
# VIP address you want to assign from the VIP VM Network IP pool.
# Pick any VIP that falls within your VIP IP Pool range.
$VipAddress = "44.15.10.253",


[Parameter(Mandatory=$false)]
# The name of the VIP template you created via the VMM Console.
$VipTemplateName = "WebsiteHTTP",

[Parameter(Mandatory=$false)]
# Arbitrary but good to match the VIP you're using.
$VipName = "scvmm_44_15_10_253_80"

)

Import-Module virtualmachinemanager

$lb = Get-scLoadBalancer | where { $_.Service.Name -like $LBServiceName};
$vipNetwork = get-scvmnetwork -Name $VipNetworkName;

$vipMemberNics = @();
foreach ($vmName in $VipMemberVMNames)
{
$vm = get-scvirtualmachine -Name $vmName;
#    if ($vm.VirtualNetworkAdapters[0].VMNetwork.ID -ne $vipNetwork.ID)
#    {
#        $vm.VirtualNetworkAdapters[0] | set-scvirtualnetworkadapter -VMNetwork $vipNetwork;
#    }

$vipMemberNics += $vm.VirtualNetworkAdapters[0];
}

$existingVip = get-scloadbalancervip -Name $VipName
    if ($existingVip -ne $null)
{
#    foreach ($mem in $existingVip.VipMembers)
#    {
#        $mem | remove-scloadbalancervipmember;
#    }

    $existingVip | remove-scloadbalancervip;
}

$vipt = get-scloadbalancerviptemplate -Name $VipTemplateName;

$vip = New-SCLoadBalancerVIP -Name $VipName -LoadBalancer $lb
-IPAddress $VipAddress -LoadBalancerVIPTemplate $vipt
-FrontEndVMNetwork $vipNetwork
-BackEndVirtualNetworkAdapters $vipMemberNics;
Write-Output "Created VIP " $vip;

$vip = get-scloadbalancervip -Name $VipName;
Write-Output "VIP created successfully " $vip;

Script pour créer une adresse IP virtuelle afin d’équilibrer le trafic réseau interne

Pour l’exemple de script suivant, nous avons suivi la procédure détaillée dans la section précédente pour créer un modèle d’adresse IP virtuelle appelé ILB-VIP-Template à utiliser pour l’équilibrage de charge sur le port 443. Le script crée une adresse IP virtuelle à partir du réseau de machines virtuelles locataires pour équilibrer la charge des machines virtuelles ILB-001 et ILB-002-001, qui font partie de ce réseau.

Vous pouvez utiliser ce script pour créer des adresses IP virtuelles d’équilibrage de charge en transmettant également une adresse IP virtuelle IPv6.

Notes

  • Dans le scénario d’équilibrage de charge interne, l’adresse IP virtuelle provient du réseau de machines virtuelles du locataire. Par conséquent, $VipNetworkName correspond au nom du réseau de machines virtuelles locataires auquel les machines virtuelles sont connectées. Vérifiez que le pool d’adresses IP du réseau de machines virtuelles locataires contient les adresses IP virtuelles réservées. $VipAddress est une adresse IP de l’ensemble des adresses IP virtuelles réservées.
  • Dans la section Paramètres de script, remplacez les valeurs par celles de votre environnement de test pour les exemples utilisés dans ce script.
  • Veillez à exécuter le script sur un serveur VMM ou sur un ordinateur exécutant la console VMM.
param(

[Parameter(Mandatory=$false)]
# Name of the Network Controller Network Service
# This value should be the name you gave the Network Controller service
# when you on-boarded the Network Controller to VMM
$LBServiceName = "NC",

[Parameter(Mandatory=$false)]
# Name of the workload VMs you want to load balance.
$VipMemberVMNames =  @("ILB-001","ILB-002"),

[Parameter(Mandatory=$false)]
# Name of the VIP VM Network
$VipNetworkName = "TenantNetwork",

[Parameter(Mandatory=$false)]
# VIP address you want to assign from the VIP VM Network IP pool.
# Pick any VIP that falls within your VIP IP Pool range.
$VipAddress = "192.168.100.75",

[Parameter(Mandatory=$false)]
# The name of the VIP template you created via the VMM Console.
$VipTemplateName = "ILB-VIP-Template",

[Parameter(Mandatory=$false)]
# Arbitrary but good to match the VIP you're using.
$VipName = "scvmm_192_168_100_75_443"

)

Import-Module virtualmachinemanager

$lb = Get-scLoadBalancer | where { $_.Service.Name -like $LBServiceName};
$vipNetwork = get-scvmnetwork -Name $VipNetworkName;

$vipMemberNics = @();
foreach ($vmName in $VipMemberVMNames)
{
$vm = get-scvirtualmachine -Name $vmName;
#    if ($vm.VirtualNetworkAdapters[0].VMNetwork.ID -ne $vipNetwork.ID)
#    {
#        $vm.VirtualNetworkAdapters[0] | set-scvirtualnetworkadapter -VMNetwork $vipNetwork;
#    }

$vipMemberNics += $vm.VirtualNetworkAdapters[0];
}

$existingVip = get-scloadbalancervip -Name $VipName
if ($existingVip -ne $null)
{
#    foreach ($mem in $existingVip.VipMembers)
#    {
#        $mem | remove-scloadbalancervipmember;
#    }

$existingVip | remove-scloadbalancervip;
}

$vipt = get-scloadbalancerviptemplate -Name $VipTemplateName;

$vip = New-SCLoadBalancerVIP -Name $VipName -LoadBalancer $lb
-IPAddress $VipAddress -LoadBalancerVIPTemplate $vipt
-FrontEndVMNetwork $vipNetwork
-BackEndVirtualNetworkAdapters $vipMemberNics;
Write-Output "Created VIP " $vip;

$vip = get-scloadbalancervip -Name $VipName;
Write-Output " VIP created successfully " $vip;