Creare una VM con più schede di interfaccia di rete usando l'interfaccia della riga di comando 1.0 di Azure

È possibile creare macchine virtuali (VM) in Azure e collegare più interfacce di rete (NIC) a ciascuna delle macchine virtuali. Multi-NIC è un requisito per molti dispositivi virtuali di rete, ad esempio distribuzione di applicazioni e soluzioni di ottimizzazione WAN. La funzionalità Multi-NIC fornisce inoltre una migliore funzionalità di gestione del traffico di rete, che include l'isolamento del traffico tra una NIC di front-end e le NIC di back-end o la separazione del traffico del piano dati dal traffico del piano di gestione.

Prima di implementare più schede di rete nelle macchine virtuali, è necessario comprendere quando è possibile usare più schede di rete e come usarle. Leggere la panoramica di più schede di rete per altre informazioni sulle macchine virtuali con più schede di rete.

Nota

Azure offre due modelli di distribuzione per creare e usare le risorse: Gestione risorse e la distribuzione classica. Questo articolo illustra il modello di distribuzione Resource Manager che Microsoft consiglia di usare per le distribuzioni più recenti in sostituzione del modello di distribuzione classica.

Scenario

In questo documento verrà illustrata una distribuzione che usa più schede di rete nelle macchine virtuali in uno scenario specifico. In questo scenario, si ha a disposizione un carico di lavoro IaaS a due livelli ospitato in Azure. Ogni livello viene distribuito nella propria subnet in una rete virtuale (VNet). Il livello di front-end è costituito da diversi server web, raggruppati in un bilanciamento del carico impostato per una disponibilità elevata. Il livello di back-end è costituito da più server di database. Questi server di database verranno distribuiti con due schede di rete, una per l'accesso al database, l'altra per la gestione. Lo scenario include anche i gruppi di sicurezza di rete (NSGs) per controllare quale traffico è consentito per ogni subnet, e la scheda di rete nella distribuzione. Nella figura seguente viene illustrata l'architettura di base di questo scenario.

Scenario MultiNIC

La procedura seguente usa un gruppo di risorse denominato IaaSStory per i server Web e un gruppo di risorse denominato IaaSStory-BackEnd per i server di database. È possibile completare questa attività usando l'interfaccia della riga di comando di Azure 1.0 (questo articolo) o l'interfaccia della riga di comando di Azure 2.0. I valori in "" per le variabili nei passaggi seguenti creano le risorse con le impostazioni usate nello scenario. Sostituire i valori in base alle esigenze specifiche dell'ambiente.

Prerequisiti

Prima di creare i server di database, è necessario creare il gruppo di risorse IaaSStory con tutte le risorse richieste per questo scenario. Per creare le risorse, seguire questa procedura:

  1. Passare alla pagina del modello.
  2. Nella pagina del modello, a destra del gruppo di risorse padre, fare clic su Distribuisci in Azure.
  3. Se necessario, modificare i valori dei parametri, quindi seguire i passaggi nel portale di anteprima di Azure per distribuire il gruppo di risorse.
Importante

Assicurarsi che i nomi degli account di archiviazione siano univoci. In Azure non sono infatti ammessi nomi di account di archiviazione duplicati.

Prerequisito: installare l'interfaccia della riga di comando di Azure

Per eseguire i passaggi in questo articolo, è necessario installare l'interfaccia della riga di comando di Azure per Mac, Linux e Windows (interfaccia della riga di comando di Azure) ed è necessario accedere ad Azure.

Nota

Se non si dispone di un account Azure, è necessario procurarsene uno. Usare la versione di valutazione gratuita. Inoltre, per completare l'operazione è necessario aver installato una libreria o uno strumento di analisi jq o JSON di altro tipo.

Creare le macchine virtuali di back-end

Le macchine virtuali di back-end dipendono dalla creazione delle risorse seguenti:

  • Account di archiviazione per i dischi dati. Per migliorare le prestazioni, i dischi dati sui server di database utilizzano la tecnologia SSD (Solid State Drive), che richiede un account di archiviazione premium. Verificare che la posizione di Azure distribuita supporti l'archiviazione premium.
  • Schede di rete. Ogni macchina virtuale ha due schede di rete, una per l'accesso al database e una per la gestione.
  • Set di disponibilità. Tutti i server di database vengono aggiunti a un singolo set di disponibilità, per garantire che almeno una delle macchine virtuali sia attiva e in esecuzione durante la manutenzione.

Passaggio 1 - avviare lo script

È possibile scaricare lo script di bash completo utilizzato qui. Attenersi alla procedura seguente per modificare lo script da usare nell'ambiente.

  1. Modificare i valori delle variabili indicate di seguito in base al gruppo di risorse esistente distribuito in precedenza in Prerequisiti.

    existingRGName="IaaSStory"
    location="westus"
    vnetName="WTestVNet"
    backendSubnetName="BackEnd"
    remoteAccessNSGName="NSG-RemoteAccess"
    
  2. Modificare i valori delle variabili indicate di seguito in base ai valori che si desidera usare per la distribuzione di back-end.

    backendRGName="IaaSStory-Backend"
    prmStorageAccountName="wtestvnetstorageprm"
    avSetName="ASDB"
    vmSize="Standard_DS3"
    diskSize=127
    publisher="Canonical"
    offer="UbuntuServer"
    sku="14.04.2-LTS"
    version="latest"
    vmNamePrefix="DB"
    osDiskName="osdiskdb"
    dataDiskName="datadisk"
    nicNamePrefix="NICDB"
    ipAddressPrefix="192.168.2."
    username='adminuser'
    password='adminP@ssw0rd'
    numberOfVMs=2
    
  3. Recuperare l'ID per la subnet BackEnd in cui verranno create le macchine virtuali. È necessario farlo poiché le schede di rete associate a questa subnet si trovano in un gruppo di risorse diverso.

    subnetId="$(azure network vnet subnet show --resource-group $existingRGName \
            --vnet-name $vnetName \
            --name $backendSubnetName|grep Id)"
    subnetId=${subnetId#*/}
    
    Suggerimento

    Il primo comando precedente usa grep e manipolazione delle stringhe (in particolare, la rimozione di sottostringhe).

  4. Recuperare l'ID per l’NSG NSG-RemoteAccess . È necessario farlo poiché le schede di rete associate a tale NSG sono in un gruppo di risorse diverso.

    nsgId="$(azure network nsg show --resource-group $existingRGName \
        --name $remoteAccessNSGName|grep Id)"
        nsgId=${nsgId#*/}
    

Passaggio 2 - creare le risorse necessarie per le macchine virtuali

  1. Creare un nuovo gruppo di risorse per tutte le risorse back-end. Si noti l'utilizzo della variabile $backendRGName per il nome del gruppo di risorse e $location per l'area di Azure.

    azure group create $backendRGName $location
    
  2. Creare un account di archiviazione premium per i dischi dati e il sistema operativo da usare per le macchine virtuali.

    azure storage account create $prmStorageAccountName \
        --resource-group $backendRGName \
        --location $location \
        --type PLRS
    
  3. Creare un set di disponibilità per le macchine virtuali.

    azure availset create --resource-group $backendRGName \
        --location $location \
        --name $avSetName
    

Passaggio 3 - Creare le schede di rete e le macchine virtuali di back-end

  1. Avviare un ciclo per creare più macchine virtuali, in base alle numberOfVMs variabili.

    for ((suffixNumber=1;suffixNumber<=numberOfVMs;suffixNumber++));
    do
    
  2. Per ogni macchina virtuale, creare una scheda di rete per l'accesso al database.

    nic1Name=$nicNamePrefix$suffixNumber-DA
    x=$((suffixNumber+3))
    ipAddress1=$ipAddressPrefix$x
    azure network nic create --name $nic1Name \
        --resource-group $backendRGName \
        --location $location \
        --private-ip-address $ipAddress1 \
        --subnet-id $subnetId
    
  3. Per ogni macchina virtuale, creare una scheda di rete per l'accesso remoto. Si noti il parametro --network-security-group utilizzato per associare la scheda di rete a un NSG.

    nic2Name=$nicNamePrefix$suffixNumber-RA
    x=$((suffixNumber+53))
    ipAddress2=$ipAddressPrefix$x
    azure network nic create --name $nic2Name \
        --resource-group $backendRGName \
        --location $location \
        --private-ip-address $ipAddress2 \
        --subnet-id $subnetId $vnetName \
        --network-security-group-id $nsgId
    
  4. Creare la macchina virtuale.

    azure vm create --resource-group $backendRGName \
        --name $vmNamePrefix$suffixNumber \
        --location $location \
        --vm-size $vmSize \
        --subnet-id $subnetId \
        --availset-name $avSetName \
        --nic-names $nic1Name,$nic2Name \
        --os-type linux \
        --image-urn $publisher:$offer:$sku:$version \
        --storage-account-name $prmStorageAccountName \
        --storage-account-container-name vhds \
        --os-disk-vhd $osDiskName$suffixNumber.vhd \
        --admin-username $username \
        --admin-password $password
    
  5. Per ogni macchina virtuale, creare due dischi dati e terminare il ciclo con il comando done .

    azure vm disk attach-new --resource-group $backendRGName \
        --vm-name $vmNamePrefix$suffixNumber \
        --storage-account-name $prmStorageAccountName \
        --storage-account-container-name vhds \
        --vhd-name $dataDiskName$suffixNumber-1.vhd \
        --size-in-gb $diskSize \
        --lun 0
    
    azure vm disk attach-new --resource-group $backendRGName \
        --vm-name $vmNamePrefix$suffixNumber \        
        --storage-account-name $prmStorageAccountName \
        --storage-account-container-name vhds \
        --vhd-name $dataDiskName$suffixNumber-2.vhd \
        --size-in-gb $diskSize \
        --lun 1
        done
    

Passaggio 4 - eseguire lo script.

Una volta scaricato e modificato lo script in base alle esigenze, eseguire lo script per creare macchine virtuali del database di back-end con più schede di rete.

  1. Salvare lo script ed eseguirlo dal terminale Bash . Verrà visualizzato l'output iniziale, come illustrato di seguito.

     info:    Executing command group create
     info:    Getting resource group IaaSStory-Backend
     info:    Creating resource group IaaSStory-Backend
     info:    Created resource group IaaSStory-Backend
     data:    Id:                  /subscriptions/[Subscription ID]/resourceGroups/IaaSStory-Backend
     data:    Name:                IaaSStory-Backend
     data:    Location:            westus
     data:    Provisioning State:  Succeeded
     data:    Tags: null
     data:
     info:    group create command OK
     info:    Executing command storage account create
     info:    Creating storage account
     info:    storage account create command OK
     info:    Executing command availset create
     info:    Looking up the availability set "ASDB"
     info:    Creating availability set "ASDB"
     info:    availset create command OK
     info:    Executing command network nic create
     info:    Looking up the network interface "NICDB1-DA"
     info:    Creating network interface "NICDB1-DA"
     info:    Looking up the network interface "NICDB1-DA"
     data:    Id                              : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory-Backend/providers/Microsoft.Network/networkInterfaces/NICDB1-DA
     data:    Name                            : NICDB1-DA
     data:    Type                            : Microsoft.Network/networkInterfaces
     data:    Location                        : westus
     data:    Provisioning state              : Succeeded
     data:    Enable IP forwarding            : false
     data:    IP configurations:
     data:      Name                          : NIC-config
     data:      Provisioning state            : Succeeded
     data:      Private IP address            : 192.168.2.4
     data:      Private IP Allocation Method  : Static
     data:      Subnet                        : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/virtualNetworks/WTestVNet/subnets/BackEnd
     data:
     info:    network nic create command OK
     info:    Executing command network nic create
     info:    Looking up the network interface "NICDB1-RA"
     info:    Creating network interface "NICDB1-RA"
     info:    Looking up the network interface "NICDB1-RA"
     data:    Id                              : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory-Backend/providers/Microsoft.Network/networkInterfaces/NICDB1-RA
     data:    Name                            : NICDB1-RA
     data:    Type                            : Microsoft.Network/networkInterfaces
     data:    Location                        : westus
     data:    Provisioning state              : Succeeded
     data:    Enable IP forwarding            : false
     data:    Network security group          : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/networkSecurityGroups/NSG-RemoteAccess
     data:    IP configurations:
     data:      Name                          : NIC-config
     data:      Provisioning state            : Succeeded
     data:      Private IP address            : 192.168.2.54
     data:      Private IP Allocation Method  : Static
     data:      Subnet                        : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/virtualNetworks/WTestVNet/subnets/BackEnd
     data:
     info:    network nic create command OK
     info:    Executing command vm create
     info:    Looking up the VM "DB1"
     info:    Using the VM Size "Standard_DS3"
     info:    The [OS, Data] Disk or image configuration requires storage account
     info:    Looking up the storage account wtestvnetstorageprm
     info:    Looking up the availability set "ASDB"
     info:    Found an Availability set "ASDB"
     info:    Looking up the NIC "NICDB1-DA"
     info:    Looking up the NIC "NICDB1-RA"
     info:    Creating VM "DB1"
    
  2. Dopo alcuni minuti, l'esecuzione verrà terminata e il resto dell'output verrà visualizzato come mostrato di seguito.

     info:    vm create command OK
     info:    Executing command vm disk attach-new
     info:    Looking up the VM "DB1"
     info:    Looking up the storage account wtestvnetstorageprm
     info:    New data disk location: https://wtestvnetstorageprm.blob.core.windows.net/vhds/datadisk1-1.vhd
     info:    Updating VM "DB1"
     info:    vm disk attach-new command OK
     info:    Executing command vm disk attach-new
     info:    Looking up the VM "DB1"
     info:    Looking up the storage account wtestvnetstorageprm
     info:    New data disk location: https://wtestvnetstorageprm.blob.core.windows.net/vhds/datadisk1-2.vhd
     info:    Updating VM "DB1"
     info:    vm disk attach-new command OK
     info:    Executing command network nic create
     info:    Looking up the network interface "NICDB2-DA"
     info:    Creating network interface "NICDB2-DA"
     info:    Looking up the network interface "NICDB2-DA"
     data:    Id                              : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory-Backend/providers/Microsoft.Network/networkInterfaces/NICDB2-DA
     data:    Name                            : NICDB2-DA
     data:    Type                            : Microsoft.Network/networkInterfaces
     data:    Location                        : westus
     data:    Provisioning state              : Succeeded
     data:    Enable IP forwarding            : false
     data:    IP configurations:
     data:      Name                          : NIC-config
     data:      Provisioning state            : Succeeded
     data:      Private IP address            : 192.168.2.5
     data:      Private IP Allocation Method  : Static
     data:      Subnet                        : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/virtualNetworks/WTestVNet/subnets/BackEnd
     data:
     info:    network nic create command OK
     info:    Executing command network nic create
     info:    Looking up the network interface "NICDB2-RA"
     info:    Creating network interface "NICDB2-RA"
     info:    Looking up the network interface "NICDB2-RA"
     data:    Id                              : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory-Backend/providers/Microsoft.Network/networkInterfaces/NICDB2-RA
     data:    Name                            : NICDB2-RA
     data:    Type                            : Microsoft.Network/networkInterfaces
     data:    Location                        : westus
     data:    Provisioning state              : Succeeded
     data:    Enable IP forwarding            : false
     data:    Network security group          : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/networkSecurityGroups/NSG-RemoteAccess
     data:    IP configurations:
     data:      Name                          : NIC-config
     data:      Provisioning state            : Succeeded
     data:      Private IP address            : 192.168.2.55
     data:      Private IP Allocation Method  : Static
     data:      Subnet                        : /subscriptions/[Subscription ID]/resourceGroups/IaaSStory/providers/Microsoft.Network/virtualNetworks/WTestVNet/subnets/BackEnd
     data:
     info:    network nic create command OK
     info:    Executing command vm create
     info:    Looking up the VM "DB2"
     info:    Using the VM Size "Standard_DS3"
     info:    The [OS, Data] Disk or image configuration requires storage account
     info:    Looking up the storage account wtestvnetstorageprm
     info:    Looking up the availability set "ASDB"
     info:    Found an Availability set "ASDB"
     info:    Looking up the NIC "NICDB2-DA"
     info:    Looking up the NIC "NICDB2-RA"
     info:    Creating VM "DB2"
     info:    vm create command OK
     info:    Executing command vm disk attach-new
     info:    Looking up the VM "DB2"
     info:    Looking up the storage account wtestvnetstorageprm
     info:    New data disk location: https://wtestvnetstorageprm.blob.core.windows.net/vhds/datadisk2-1.vhd
     info:    Updating VM "DB2"
     info:    vm disk attach-new command OK
     info:    Executing command vm disk attach-new
     info:    Looking up the VM "DB2"
     info:    Looking up the storage account wtestvnetstorageprm
     info:    New data disk location: https://wtestvnetstorageprm.blob.core.windows.net/vhds/datadisk2-2.vhd
     info:    Updating VM "DB2"
     info:    vm disk attach-new command OK