Avvio rapido: creare un servizio per il bilanciamento del carico delle macchine virtuali con Azure PowerShell

Introduzione ad Azure Load Balancer per la creazione di un servizio di bilanciamento del carico interno e di due macchine virtuali con Azure PowerShell. Si distribuiscono inoltre le risorse aggiuntive, tra cui Azure Bastion, gateway NAT, una rete virtuale e le subnet necessarie.

Diagramma delle risorse distribuite per il bilanciamento del carico interno.

Prerequisiti

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 di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.

Creare un gruppo di risorse con New-AzResourceGroup.

$rg = @{
    Name = 'CreateINTLBQS-rg'
    Location = 'westus2'
}
New-AzResourceGroup @rg

Configurare la rete virtuale

Quando si crea un servizio di bilanciamento del carico interno, occorre configurare una rete virtuale in cui eseguire il servizio. Prima di distribuire le macchine virtuali e testare il servizio di bilanciamento del carico, creare le risorse di rete virtuale di supporto.

  • Creare un indirizzo IP pubblico per il gateway NAT

  • 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

Creare un indirizzo IP pubblico

Usare New-AzPublicIpAddress per creare un indirizzo IP pubblico per il gateway NAT.

## Create public IP address for NAT gateway and place IP in variable ##
$gwpublicip = @{
    Name = 'myNATgatewayIP'
    ResourceGroupName = $rg.name
    Location = 'westus2'
    Sku = 'Standard'
    AllocationMethod = 'static'
    Zone = 1,2,3
}
$gwpublicip = New-AzPublicIpAddress @gwpublicip

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

## Create a zonal public IP address for NAT gateway and place IP in variable ##
$gwpublicip = @{
    Name = 'myNATgatewayIP'
    ResourceGroupName = $rg.name
    Location = 'westus2'
    Sku = 'Standard'
    AllocationMethod = 'static'
    Zone = 1
}
$gwpublicip = New-AzPublicIpAddress @gwpublicip

Nota

L'indirizzo IP pubblico viene usato dal gateway NAT per fornire connettività in uscita per le macchine virtuali nel pool back-end. Questa operazione è consigliata quando si crea un bilanciamento del carico interno e sono necessarie le risorse del pool back-end per avere connettività in uscita. Per altre informazioni, vedere gateway NAT.

Creare rete virtuale, gruppo di sicurezza di rete, host bastion e 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 di un test, è consigliabile eliminare questa risorsa dopo averla usata.


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

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

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

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

## Create public IP address for bastion host. ##
$bastionip = @{
    Name = 'myBastionIP'
    ResourceGroupName = $rg.name
    Location = 'westus2'
    Sku = 'Standard'
    AllocationMethod = 'Static'
}
$bastionip = New-AzPublicIpAddress @bastionip

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

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

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

Creare un servizio di bilanciamento del carico

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

## Place virtual network created in previous step into a variable. ##
$net = @{
    Name = 'myVNet'
    ResourceGroupName = $rg.name
}
$vnet = Get-AzVirtualNetwork @net

## Create load balancer frontend configuration and place in variable. ##
$lbip = @{
    Name = 'myFrontEnd'
    PrivateIpAddress = '10.1.0.4'
    SubnetId = $vnet.subnets[0].Id
}
$feip = New-AzLoadBalancerFrontendIpConfig @lbip

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

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

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

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

Creare macchine virtuali

In questa sezione, vengono create le due macchine virtuali per il pool back-end del bilanciamento del carico.

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

## Place virtual network created in previous step into a variable. ##
$net = @{
    Name = 'myVNet'
    ResourceGroupName = $rg.name
}
$vnet = Get-AzVirtualNetwork @net

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

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

## 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 = "myNicVM$i"
    ResourceGroupName = $rg.name
    Location = 'westus2'
    Subnet = $vnet.Subnets[0]
    NetworkSecurityGroup = $nsg
    LoadBalancerBackendAddressPool = $bepool
    }
    $nicVM = New-AzNetworkInterface @nic

    ## Create a virtual machine configuration for VMs ##
    $vmsz = @{
        VMName = "myVM$i"
        VMSize = 'Standard_DS1_v2'  
    }
    $vmos = @{
        ComputerName = "myVM$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 = 'westus2'
        VM = $vmConfig
        Zone = "$i"
    }
}
New-AzVM @vm -asjob

Le distribuzioni delle macchine virtuali e dell'host bastion vengono inviate 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

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 in modalità di orchestrazione flessibile non hanno l'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 esegue PowerShell Add-WindowsFeature Web-Server per installare il server Web IIS e quindi aggiorna la pagina Default.htm per visualizzare il nome host della VM:

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 = "myVM$i"
        Location = 'westus2'
        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

Creare la macchina virtuale di test

Creare la macchina virtuale con:

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

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

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

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

## Create a virtual machine configuration for VMs ##
$vmsz = @{
    VMName = "myTestVM"
    VMSize = 'Standard_DS1_v2' 
}
$vmos = @{
    ComputerName = "myTestVM"
    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 = 'westus2'
    VM = $vmConfig
}
New-AzVM @vm

Testare il servizio di bilanciamento del carico

  1. Accedere al portale di Azure.

  2. Individuare l'indirizzo IP privato del servizio di bilanciamento del carico nella schermata Panoramica. Selezionare Tutti i servizi nel menu a sinistra, quindi Tutte le risorse e infine selezionare myLoadBalancer.

  3. Annotare o copiare l'indirizzo accanto a Indirizzo IP privato nella pagina Panoramica di myLoadBalancer.

  4. Selezionare Tutti i servizi nel menu a sinistra, quindi Tutte le risorse e infine nell'elenco di risorse selezionare myTestVM, che si trova nel gruppo di risorse CreateIntLBQS-rg.

  5. Nella pagina Panoramica selezionare Connetti, quindi Bastion.

  6. Immettere il nome utente e la password specificati durante la creazione della VM.

  7. Aprire Internet Explorer in myTestVM.

  8. Immettere l'indirizzo IP del passaggio precedente nella barra degli indirizzi del browser. Viene visualizzata la pagina del server Web IIS personalizzato.

    Screenshot del Web browser che mostra la pagina Web predefinita per la macchina virtuale con bilanciamento del carico

Per verificare la distribuzione del traffico dell'istanza del bilanciamento del carico fra tutte e tre le macchine virtuali, è possibile forzare l'aggiornamento del Web browser dal computer di test.

Pulire le risorse

Quando non servono più, è possibile 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

In questo avvio rapido:

  • È stato creato un servizio di bilanciamento del carico interno

  • Macchine virtuali collegate

  • Sono stati configurati la regola del traffico di bilanciamento del carico e il probe di integrità

  • È stato testato il bilanciamento del carico

Per altre informazioni su Azure Load Balancer, passare a: