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.
Prerequisiti
Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente
Installazione di Azure PowerShell in locale 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 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
Creare una rete virtuale con New-AzVirtualNetwork
Creare una regola del gruppo di sicurezza di rete con New-AzNetworkSecurityRuleConfig
Creare un host Azure Bastion con New-AzBastion
Creare la risorsa gateway NAT con New-AzNatGateway
Usare New-AzVirtualNetworkSubnetConfig per associare il gateway NAT alla subnet della rete virtuale
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:
Creare un IP front-end con New-AzLoadBalancerFrontendIpConfig per il pool di indirizzi IP front-end. Questo 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 bilanciamento del carico
Usare Add-AzLoadBalancerProbeConfig per creare un probe di integrità che determina l'integrità delle istanze di VM back-end
Usare Add-AzLoadBalancerRuleConfig per creare una regola di bilanciamento del carico che definisce come viene distribuito il traffico alle VM
Creare un servizio di bilanciamento del carico pubblico con New-AzLoadBalancer
## 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.
Creare tre interfacce di rete con New-AzNetworkInterface
Impostare nome utente e password dell'amministratore delle macchine virtuali con il comando Get-Credential
Creare le macchine virtuali con:
# 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
Accedere al portale di Azure.
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.
Annotare o copiare l'indirizzo accanto a Indirizzo IP privato nella pagina Panoramica di myLoadBalancer.
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.
Nella pagina Panoramica selezionare Connetti, quindi Bastion.
Immettere il nome utente e la password specificati durante la creazione della VM.
Aprire Internet Explorer in myTestVM.
Immettere l'indirizzo IP del passaggio precedente nella barra degli indirizzi del browser. Viene visualizzata la pagina del server Web IIS personalizzato.
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: