Guida introduttiva: Creare un servizio di bilanciamento del carico pubblico per bilanciare il carico delle macchine virtuali usando Azure PowerShell

Iniziare a usare Azure Load Balancer con Azure PowerShell per creare un servizio di bilanciamento del carico pubblico e due macchine virtuali. È anche possibile distribuire altre risorse, tra cui Azure Bastion, gateway NAT, una rete virtuale e le subnet necessarie.

Diagramma delle risorse distribuite per un bilanciatore del carico pubblico standard.

Prerequisiti

  • Un account Azure con una sottoscrizione attiva. Creare un account gratuito.

  • Azure PowerShell installato localmente o Azure Cloud Shell.

Se si sceglie di installare e usare PowerShell in locale, per questo articolo è necessario il modulo Azure PowerShell 5.4.1 o versione successiva. Eseguire Get-Module -ListAvailable Az per trovare la versione installata. Se è necessario eseguire l'aggiornamento, vedere Installare e configurare Azure PowerShell. Se si esegue PowerShell in locale, è anche necessario eseguire Connect-AzAccount per creare una connessione con Azure.

Creare un gruppo di risorse

Un gruppo di risorse Azure è un contenitore logico in cui si distribuiscono e si gestiscono le risorse Azure.

Creare un gruppo di risorse usando New-AzResourceGroup:

$rg = @{
    Name = 'load-balancer-ps-rg'
    Location = 'eastus'
}
New-AzResourceGroup @rg

Creare un indirizzo IP pubblico

Usare New-AzPublicIpAddress per creare un indirizzo IP pubblico.

$publicip = @{
    Name = 'lb-frontend-ip'
    ResourceGroupName = $rg.name
    Location = 'eastus'
    Sku = 'Standard'
    AllocationMethod = 'static'
    Zone = 1,2,3
}
New-AzPublicIpAddress @publicip

Per creare un indirizzo IP pubblico di zona nella zona 1, usare il comando seguente:

$publicip = @{
    Name = 'lb-frontend-ip'
    ResourceGroupName = $rg.name
    Location = 'eastus'
    Sku = 'Standard'
    AllocationMethod = 'static'
    Zone = 1
}
New-AzPublicIpAddress @publicip

Creare un servizio di bilanciamento del carico

Questa sezione illustra come creare e configurare i componenti seguenti del servizio di bilanciamento del carico:

  • Creare un IP front-end con New-AzLoadBalancerFrontendIpConfig per il pool di indirizzi IP front-end. Questo indirizzo IP riceve il traffico in ingresso nel servizio di bilanciamento del carico.

  • Creare un pool di indirizzi back-end con New-AzLoadBalancerBackendAddressPoolConfig per il traffico inviato dal front-end del servizio di bilanciamento del carico. Distribuisci le macchine virtuali di back-end in questo pool.

  • Creare una sonda di salute con Add-AzLoadBalancerProbeConfig che determina l'integrità delle istanze back-end della macchina virtuale.

  • Creare una regola di bilanciamento del carico con Add-AzLoadBalancerRuleConfig che definisce la modalità di distribuzione del traffico alle macchine virtuali.

  • Creare un servizio di bilanciamento del carico pubblico con New-AzLoadBalancer.

## Place public IP created in previous steps into variable. ##
$pip = @{
    Name = 'lb-frontend-ip'
    ResourceGroupName = $rg.name
}
$publicIp = Get-AzPublicIpAddress @pip

## Create load balancer frontend configuration and place in variable. ##
$fip = @{
    Name = 'lb-frontend'
    PublicIpAddress = $publicIp 
}
$feip = New-AzLoadBalancerFrontendIpConfig @fip

## Create backend address pool configuration and place in variable. ##
$bepool = New-AzLoadBalancerBackendAddressPoolConfig -Name 'lb-backend-pool'

## Create the health probe and place in variable. ##
$probe = @{
    Name = 'lb-health-probe'
    Protocol = 'tcp'
    Port = '80'
    IntervalInSeconds = '360'
    ProbeCount = '5'
}
$healthprobe = New-AzLoadBalancerProbeConfig @probe

## Create the load balancer rule and place in variable. ##
$lbrule = @{
    Name = 'lb-HTTP-rule'
    Protocol = 'tcp'
    FrontendPort = '80'
    BackendPort = '80'
    IdleTimeoutInMinutes = '15'
    FrontendIpConfiguration = $feip
    BackendAddressPool = $bePool
}
$rule = New-AzLoadBalancerRuleConfig @lbrule -EnableTcpReset -DisableOutboundSNAT

## Create the load balancer resource. ##
$loadbalancer = @{
    ResourceGroupName = $rg.name
    Name = 'load-balancer'
    Location = 'eastus'
    Sku = 'Standard'
    FrontendIpConfiguration = $feip
    BackendAddressPool = $bePool
    LoadBalancingRule = $rule
    Probe = $healthprobe
}
New-AzLoadBalancer @loadbalancer

Configurare la rete virtuale

Prima di distribuire le macchine virtuali e testare il servizio di bilanciamento del carico, creare le risorse di rete virtuale di supporto.

Creare una rete virtuale per le macchine virtuali back-end.

Creare un gruppo di sicurezza di rete per definire le connessioni in ingresso alla rete virtuale.

Creare un host Azure Bastion per gestire in modo sicuro le macchine virtuali nel pool di back-end.

Usa un gateway NAT per fornire accesso a Internet in uscita alle risorse nel pool di backend del bilanciatore del carico.

Creare una rete virtuale, un gruppo di sicurezza di rete, un host bastion e un gateway NAT

Importante

La tariffa oraria inizia dal momento in cui viene distribuito Bastion, a prescindere dall'utilizzo dei dati in uscita. Per altre informazioni, vedere Prezzi e SKU. Se si distribuisce Bastion come parte di un'esercitazione o un test, è consigliabile eliminare questa risorsa dopo averla usata.

## Create public IP address for NAT gateway ##
$ip = @{
    Name = 'nat-gw-public-ip'
    ResourceGroupName = $rg.name
    Location = 'eastus'
    Sku = 'Standard'
    AllocationMethod = 'Static'
}
$publicIP = New-AzPublicIpAddress @ip

## Create NAT gateway resource ##
$nat = @{
    ResourceGroupName = $rg.name
    Name = 'lb-nat-gateway'
    IdleTimeoutInMinutes = '10'
    Sku = 'Standard'
    Location = 'eastus'
    PublicIpAddress = $publicIP
}
$natGateway = New-AzNatGateway @nat

## Create backend subnet config ##
$subnet = @{
    Name = 'backend-subnet'
    AddressPrefix = '10.1.0.0/24'
    NatGateway = $natGateway
}
$subnetConfig = New-AzVirtualNetworkSubnetConfig @subnet 

## Create Azure Bastion subnet. ##
$bastsubnet = @{
    Name = 'AzureBastionSubnet' 
    AddressPrefix = '10.1.1.0/27'
}
$bastsubnetConfig = New-AzVirtualNetworkSubnetConfig @bastsubnet

## Create the virtual network ##
$net = @{
    Name = 'lb-vnet'
    ResourceGroupName = $rg.name
    Location = 'eastus'
    AddressPrefix = '10.1.0.0/16'
    Subnet = $subnetConfig,$bastsubnetConfig
}
$vnet = New-AzVirtualNetwork @net

## Create public IP address for bastion host. ##
$ip = @{
    Name = 'lb-vnet-bastion-ip'
    ResourceGroupName = $rg.name
    Location = 'eastus'
    Sku = 'Standard'
    AllocationMethod = 'Static'
}
$publicip = New-AzPublicIpAddress @ip

## Create bastion host ##
$bastion = @{
    ResourceGroupName = $rg.name
    Name = 'lb-vnet-bastion'
    PublicIpAddress = $publicip
    VirtualNetwork = $vnet
}
New-AzBastion @bastion -AsJob

## Create rule for network security group and place in variable. ##
$nsgrule = @{
    Name = 'lb-nsg-rule'
    Description = 'Allow HTTP'
    Protocol = '*'
    SourcePortRange = '*'
    DestinationPortRange = '80'
    SourceAddressPrefix = 'Internet'
    DestinationAddressPrefix = '*'
    Access = 'Allow'
    Priority = '200'
    Direction = 'Inbound'
}
$rule1 = New-AzNetworkSecurityRuleConfig @nsgrule

## Create network security group ##
$nsg = @{
    Name = 'lb-nsg'
    ResourceGroupName = $rg.name
    Location = 'eastus'
    SecurityRules = $rule1
}
New-AzNetworkSecurityGroup @nsg

Creare macchine virtuali

In questa sezione si creano le due macchine virtuali per il pool back-end del servizio di bilanciamento del carico.

# Set the administrator and password for the VMs. ##
$cred = Get-Credential

## Place the virtual network into a variable. ##
$net = @{
    Name = 'lb-vnet'
    ResourceGroupName = $rg.name
}
$vnet = Get-AzVirtualNetwork @net

## Place the load balancer into a variable. ##
$lb = @{
    Name = 'load-balancer'
    ResourceGroupName = $rg.name
}
$bepool = Get-AzLoadBalancer @lb  | Get-AzLoadBalancerBackendAddressPoolConfig

## Place the network security group into a variable. ##
$ns = @{
    Name = 'lb-nsg'
    ResourceGroupName = $rg.name
}
$nsg = Get-AzNetworkSecurityGroup @ns

## For loop with variable to create virtual machines for load balancer backend pool. ##
for ($i=1; $i -le 2; $i++){

    ## Command to create network interface for VMs ##
    $nic = @{
        Name = "lb-nic-VM$i"
        ResourceGroupName = $rg.name
        Location = 'eastus'
        Subnet = $vnet.Subnets[0]
        NetworkSecurityGroup = $nsg
        LoadBalancerBackendAddressPool = $bepool
    }
    $nicVM = New-AzNetworkInterface @nic

    ## Create a virtual machine configuration for VMs ##
    $vmsz = @{
        VMName = "lb-VM$i"
        VMSize = 'Standard_DS1_v2'  
    }
    $vmos = @{
        ComputerName = "lb-VM$i"
        Credential = $cred
    }
    $vmimage = @{
        PublisherName = 'MicrosoftWindowsServer'
        Offer = 'WindowsServer'
        Skus = '2019-Datacenter'
        Version = 'latest'    
    }
    $vmConfig = New-AzVMConfig @vmsz `
        | Set-AzVMOperatingSystem @vmos -Windows `
        | Set-AzVMSourceImage @vmimage `
        | Add-AzVMNetworkInterface -Id $nicVM.Id

    ## Create the virtual machine for VMs ##
    $vm = @{
        ResourceGroupName = $rg.name
        Location = 'eastus'
        VM = $vmConfig
        Zone = "$i"
    }
    New-AzVM @vm -AsJob
}

Inviare le distribuzioni delle macchine virtuali e dell'host bastion come processi di PowerShell. Per visualizzare lo stato dei processi, usare Get-Job:

Get-Job

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
1      Long Running O… AzureLongRunni… Completed     True            localhost            New-AzBastion
2      Long Running O… AzureLongRunni… Completed     True            localhost            New-AzVM
3      Long Running O… AzureLongRunni… Completed     True            localhost            New-AzVM

Verificare che lo Stato della creazione della macchina virtuale sia Completato prima di passare ai passaggi successivi.

Nota

Azure fornisce un IP di accesso in uscita predefinito per le macchine virtuali a cui non è stato assegnato un indirizzo IP pubblico o che si trovano nel pool back-end di un servizio del bilanciamento del carico di base di Azure. Il meccanismo dell'IP di accesso in uscita predefinito fornisce un IP in uscita non configurabile.

L'IP di accesso in uscita predefinito è disabilitato quando si verifica uno degli eventi seguenti:

  • Alla macchina virtuale viene assegnato un indirizzo IP pubblico.
  • La macchina virtuale è posizionata nel pool back-end di un servizio di bilanciamento del carico standard, con o senza regole in uscita.
  • Una risorsa del gateway NAT di Azure viene assegnata alla subnet della macchina virtuale.

Le macchine virtuali create usando set di scalabilità di macchine virtuali nella modalità orchestrazione flessibile non dispongono dell'accesso in uscita predefinito.

Per altre informazioni sulle connessioni in uscita in Azure, vedere Accesso in uscita predefinito in Azure e Uso di Source Network Address Translation (SNAT) per le connessioni in uscita.

Installare IIS

Usare Set-AzVMExtension per installare l'estensione per script personalizzati.

L'estensione viene eseguita PowerShell Add-WindowsFeature Web-Server per installare il server Web IIS e quindi aggiorna la pagina Default.htm per visualizzare il nome host della macchina virtuale:

Importante

Assicurarsi che le distribuzioni delle macchine virtuali siano state completate nel passaggio precedente prima di procedere. Usare Get-Job per verificare lo stato dei processi di distribuzione delle macchine virtuali.

## For loop with variable to install custom script extension on virtual machines. ##
for ($i=1; $i -le 2; $i++)
{
$ext = @{
    Publisher = 'Microsoft.Compute'
    ExtensionType = 'CustomScriptExtension'
    ExtensionName = 'IIS'
    ResourceGroupName = $rg.name
    VMName = "lb-VM$i"
    Location = 'eastus'
    TypeHandlerVersion = '1.8'
    SettingString = '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}'
}
Set-AzVMExtension @ext -AsJob
}

Le estensioni vengono distribuite come processi di PowerShell. Per visualizzare lo stato dei processi di installazione, usare Get-Job:

Get-Job

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
8      Long Running O… AzureLongRunni… Running       True            localhost            Set-AzVMExtension
9      Long Running O… AzureLongRunni… Running       True            localhost            Set-AzVMExtension

Verificare che lo Stato dei processi sia Completato prima di passare ai passaggi successivi.

Testare il bilanciatore del carico

Usare Get-AzPublicIpAddress per ottenere l'indirizzo IP pubblico del servizio di bilanciamento del carico:

$ip = @{
    ResourceGroupName = $rg.name
    Name = 'lb-frontend-ip'
}  
Get-AzPublicIPAddress @ip | select IpAddress

Copiare l'indirizzo IP pubblico e quindi incollarlo nella barra degli indirizzi del browser. La pagina predefinita del server Web IIS viene visualizzata nel browser.

Screenshot della pagina Web di test del bilanciamento del carico.

Pulire le risorse

Quando le risorse non sono più necessarie, usare il comando Remove-AzResourceGroup per rimuovere il gruppo di risorse, il servizio di bilanciamento del carico e le risorse rimanenti.

Remove-AzResourceGroup -Name $rg.name

Passaggi successivi

Questo avvio rapido spiega come:

  • Creato un Azure Load Balancer

  • Due macchine virtuali collegate al servizio di bilanciamento del carico

  • Bilanciatore del carico testato

Per altre informazioni su Azure Load Balancer, passare a: