Creare una macchina virtuale con più schede di interfaccia di rete usando un modelloCreate a VM with multiple NICs using a template

È possibile creare macchine virtuali (VM) in Azure e collegare più interfacce di rete (NIC) a ciascuna delle macchine virtuali.You can create virtual machines (VMs) in Azure and attach multiple network interfaces (NICs) to each of your VMs. L'uso di più schede di interfaccia di rete è un requisito per molti dispositivi virtuali di rete, ad esempio le soluzioni di ottimizzazione WAN e la distribuzione di applicazioni.Multiple NICs are a requirement for many network virtual appliances, such as application delivery and WAN optimization solutions. Più schede di interfaccia di rete forniscono anche una migliore funzionalità di gestione del traffico di rete, che include l'isolamento del traffico tra una scheda di interfaccia di rete front-end e le schede di interfaccia di rete back-end o la separazione del traffico del piano dati dal traffico del piano di gestione.Multiple NICs also provide more network traffic management functionality, including isolation of traffic between a front-end NIC and back-end NIC(s), or separation of data plane traffic from management plane traffic.

Nota

Azure offre due modelli di distribuzione per creare e usare le risorse: Gestione risorse e la distribuzione classica.Azure has two different deployment models for creating and working with resources: Resource Manager and classic. 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.This article covers using the Resource Manager deployment model, which Microsoft recommends for most new deployments instead of the classic deployment model.

ScenarioScenario

In questo documento verrà illustrata una distribuzione che usa più schede di rete nelle macchine virtuali in uno scenario specifico.This document will walk through a deployment that uses multiple NICs in VMs in a specific scenario. In questo scenario, si ha a disposizione un carico di lavoro IaaS a due livelli ospitato in Azure.In this scenario, you have a two-tiered IaaS workload hosted in Azure. Ogni livello viene distribuito nella propria subnet in una rete virtuale (VNet).Each tier is deployed in its own subnet in a virtual network (VNet). Il livello di front-end è costituito da diversi server web, raggruppati in un bilanciamento del carico impostato per una disponibilità elevata.The front end tier is composed of several web servers, grouped together in a load balancer set for high availability. Il livello di back-end è costituito da più server di database.The back end tier is composed of several database servers. Questi server di database verranno distribuiti con due schede di rete, una per l'accesso al database, l'altra per la gestione.These database servers will be deployed with two NICs each, one for database access, the other for management. 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.The scenario also includes Network Security Groups (NSGs) to control what traffic is allowed to each subnet, and NIC in the deployment. Nella figura seguente viene illustrata l'architettura di base di questo scenario.The figure below shows the basic architecture of this 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.The following steps use a resource group named IaaSStory for the WEB servers and a resource group named IaaSStory-BackEnd for the DB servers.

PrerequisitiPrerequisites

Prima di creare i server di database, è necessario creare il gruppo di risorse IaaSStory con tutte le risorse richieste per questo scenario.Before you can create the DB servers, you need to create the IaaSStory resource group with all the necessary resources for this scenario. Per creare le risorse, seguire questa procedura:To create these resources, complete the following steps:

  1. Passare alla pagina del modello.Navigate to the template page.
  2. Nella pagina del modello, a destra del gruppo di risorse padre, fare clic su Distribuisci in Azure.In the template page, to the right of Parent resource group, click Deploy to 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.If needed, change the parameter values, then follow the steps in the Azure preview portal to deploy the resource group.

Importante

Assicurarsi che i nomi degli account di archiviazione siano univoci.Make sure your storage account names are unique. In Azure non sono infatti ammessi nomi di account di archiviazione duplicati.You cannot have duplicate storage account names in Azure.

Informazioni sul modello di distribuzioneUnderstand the deployment template

Prima di distribuire il modello fornito con questa documentazione, assicurarsi di comprenderne le caratteristiche.Before you deploy the template provided with this documentation, make sure you understand what it does. La procedura seguente fornisce un'utile panoramica del modello:The following steps provide a good overview of the template:

  1. Passare alla pagina del modello.Navigate to the template page.
  2. Fare clic su azuredeploy.json per aprire il file del modello.Click azuredeploy.json to open the template file.
  3. Si noti il parametro osType elencato di seguito.Notice the osType parameter listed below. Questo parametro viene usato per selezionare l'immagine di macchina virtuale da usare per il server di database e le impostazioni correlate del sistema operativo.This parameter is used to select what VM image to use for the database server, along with multiple operating system related settings.

    "osType": {
      "type": "string",
      "defaultValue": "Windows",
      "allowedValues": [
        "Windows",
        "Ubuntu"
      ],
      "metadata": {
      "description": "Type of OS to use for VMs: Windows or Ubuntu."
      }
    },
    
  4. Scorrere fino all'elenco delle variabili e controllare la definizione per le variabili dbVMSetting elencate di seguito.Scroll down to the list of variables, and check the definition for the dbVMSetting variables, listed below. Viene ricevuto uno degli elementi della matrice contenuti nella variabile dbVMSettings .It receives one of the array elements contained in the dbVMSettings variable. Se si ha familiarità con la terminologia di sviluppo software, è possibile considerare la variabile dbVMSettings come una tabella hash o un dizionario.If you are familiar with software development terminology, you can view the dbVMSettings variable as a hash table, or a dictionary.

    "dbVMSetting": "[variables('dbVMSettings')[parameters('osType')]]"
    
  5. Si supponga di voler distribuire macchine virtuali di Windows che eseguono SQL nel back-end.Suppose you decide to deploy Windows VMs running SQL in the back-end. In questo caso, il valore di osType è Windows e la variabile dbVMSetting contiene l'elemento elencato di seguito, che rappresenta il primo valore nella variabile dbVMSettings.Then the value for osType would be Windows, and the dbVMSetting variable would contain the element listed below, which represents the first value in the dbVMSettings variable.

    "Windows": {
      "vmSize": "Standard_DS3",
      "publisher": "MicrosoftSQLServer",
      "offer": "SQL2014SP1-WS2012R2",
      "sku": "Standard",
      "version": "latest",
      "vmName": "DB",
      "osdisk": "osdiskdb",
      "datadisk": "datadiskdb",
      "nicName": "NICDB",
      "ipAddress": "192.168.2.",
      "extensionDeployment": "",
      "avsetName": "ASDB",
      "remotePort": 3389,
      "dbPort": 1433
    },
    
  6. Si noti che vmSize contiene il valore Standard_DS3.Notice the vmSize contains the value Standard_DS3. Solo alcune dimensioni di macchine virtuali consentono l'uso di più schede di interfaccia di rete.Only certain VM sizes allow for the use of multiple NICs. È possibile verificare quali dimensioni di macchina virtuale supportano più schede di interfaccia di rete leggendo gli articoli Dimensioni delle VM Windows e Dimensioni delle VM Linux.You can verify which VM sizes support multiple NICs by reading the Windows VM sizes and Linux VM sizes articles.

  7. Scorrere le risorse e notare il primo elemento.Scroll down to resources and notice the first element. Questo descrive un account di archiviazioneIt describes a storage account. che verrà usato per gestire i dischi dati usati da ogni macchina virtuale del database.This storage account will be used to maintain the data disks used by each database VM. In questo scenario, ogni macchina virtuale del database dispone di un disco del sistema operativo archiviato nell'archiviazione consueta e due dischi dati archiviati nell'archiviazione dell'unità SSD (premium).In this scenario, each database VM has an OS disk stored in regular storage, and two data disks stored in SSD (premium) storage.

    {
      "apiVersion": "2015-05-01-preview",
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[parameters('prmStorageName')]",
      "location": "[variables('location')]",
      "tags": {
        "displayName": "Storage Account - Premium"
      },
      "properties": {
      "accountType": "[parameters('prmStorageType')]"
      }
    },
    
  8. Scorrere fino alla risorsa successiva, come illustrato di seguito.Scroll down to the next resource, as listed below. Questa risorsa rappresenta la scheda di interfaccia di rete usata per l'accesso al database in ogni macchina virtuale del database.This resource represents the NIC used for database access in each database VM. Si noti l'uso della funzione di copia in questa risorsa.Notice the use of the copy function in this resource. Il modello consente di distribuire il numero di macchine virtuali che si desidera, in base al parametro dbCount .The template allows you to deploy as many VMs as you want, based on the dbCount parameter. È pertanto necessario creare la stessa quantità di schede di interfaccia di rete per l'accesso al database, una per ogni macchina virtuale.Therefore you need to create the same amount of NICs for database access, one for each VM.

    {
    "apiVersion": "2015-06-15",
    "type": "Microsoft.Network/networkInterfaces",
    "name": "[concat(variables('dbVMSetting').nicName,'-DA-', copyindex(1))]",
    "location": "[variables('location')]",
    "tags": {
      "displayName": "NetworkInterfaces - DB DA"
    },
    "copy": {
      "name": "dbniccount",
      "count": "[parameters('dbCount')]"
    },
    "properties": {
      "ipConfigurations": [
        {
          "name": "ipconfig1",
          "properties": {
            "privateIPAllocationMethod": "Static",
            "privateIPAddress": "[concat(variables('dbVMSetting').ipAddress,copyindex(4))]",
            "subnet": {
              "id": "[variables('backEndSubnetRef')]"
            }
          }
         }
       ] 
     }
    },
    
  9. Scorrere fino alla risorsa successiva, come illustrato di seguito.Scroll down to the next resource, as listed below. Questa risorsa rappresenta la scheda di interfaccia di rete usata per la gestione in ogni macchina virtuale del database.This resource represents the NIC used for management in each database VM. Ancora una volta, è necessaria una di queste schede di interfaccia di rete per ogni macchina virtuale del database.Once again, you need one of these NICs for each database VM. Si noti l'elemento networkSecurityGroup , che collega un gruppo di sicurezza di rete che consente l'accesso a RDP o SSH solo a tale scheda di interfaccia di rete.Notice the networkSecurityGroup element, linking an NSG that allows access to RDP/SSH to this NIC only.

    {
      "apiVersion": "2015-06-15",
      "type": "Microsoft.Network/networkInterfaces",
      "name": "[concat(variables('dbVMSetting').nicName, '-RA-',copyindex(1))]",
      "location": "[variables('location')]",
      "tags": {
        "displayName": "NetworkInterfaces - DB RA"
    },
    "copy": {
      "name": "dbniccount",
      "count": "[parameters('dbCount')]"
    },
    "properties": {
      "ipConfigurations": [
        {
          "name": "ipconfig1",
          "properties": {
            "networkSecurityGroup": {
             "id": "[resourceId('Microsoft.Network/networkSecurityGroups', parameters('remoteAccessNSGName'))]"
             },
             "privateIPAllocationMethod": "Static",
             "privateIPAddress": "[concat(variables('dbVMSetting').ipAddress,copyindex(54))]",
             "subnet": {
              "id": "[variables('backEndSubnetRef')]"
             }
           }
          }
        ]
      }
    },
    
  10. Scorrere fino alla risorsa successiva, come illustrato di seguito.Scroll down to the next resource, as listed below. Questa risorsa rappresenta un set di disponibilità condiviso tra tutte le macchine virtuali del database.This resource represents an availability set to be shared by all database VMs. In questo modo si garantisce che nel set sarà sempre presente una macchina virtuale in esecuzione durante la manutenzione.That way, you guarantee that there will always be one VM in the set running during maintenance.

    {
      "apiVersion": "2015-06-15",
      "type": "Microsoft.Compute/availabilitySets",
      "name": "[variables('dbVMSetting').avsetName]",
      "location": "[variables('location')]",
      "tags": {
        "displayName": "AvailabilitySet - DB"
      }
    },
    
  11. Scorrere fino alla risorsa successiva.Scroll down to the next resource. Questa risorsa rappresenta le macchine virtuali del database, come illustrato nelle prime righe elencate di seguito.This resource represents the database VMs, as seen in the first few lines listed below. Si noti nuovamente l'uso della funzione di copia, verificando che più macchine virtuali vengano create in base al parametro dbCount.Notice the use of the copy function again, ensuring that multiple VMs are created based on the dbCount parameter. Si noti inoltre la raccolta dependsOn .Also notice the dependsOn collection. Vengono elencate due schede di interfaccia di rete che devono essere create prima che venga distribuita la macchina virtuale, insieme al set di disponibilità e all'account di archiviazione.It lists two NICs being necessary to be created before the VM is deployed, along with the availability set, and the storage account.

    "apiVersion": "2015-06-15",
    "type": "Microsoft.Compute/virtualMachines",
    "name": "[concat(variables('dbVMSetting').vmName,copyindex(1))]",
    "location": "[variables('location')]",
    "dependsOn": [
      "[concat('Microsoft.Network/networkInterfaces/', variables('dbVMSetting').nicName,'-DA-', copyindex(1))]",
      "[concat('Microsoft.Network/networkInterfaces/', variables('dbVMSetting').nicName,'-RA-', copyindex(1))]",
      "[concat('Microsoft.Compute/availabilitySets/', variables('dbVMSetting').avsetName)]",
      "[concat('Microsoft.Storage/storageAccounts/', parameters('prmStorageName'))]"
    ],
    "tags": {
      "displayName": "VMs - DB"
    },
    "copy": {
      "name": "dbvmcount",
      "count": "[parameters('dbCount')]"
    },
    
  12. Scorrere verso il basso nella risorsa della macchina virtuale fino all'elemento networkProfile , come illustrato di seguito.Scroll down in the VM resource to the networkProfile element, as listed below. Si noti che sono presenti due schede di interfaccia di rete a cui ogni macchina virtuale fa riferimento.Notice that there are two NICs being reference for each VM. Quando si creano più schede di interfaccia di rete per una macchina virtuale, è necessario impostare la proprietà primary di una delle schede di interfaccia di rete su true e le restanti su false.When you create multiple NICs for a VM, you must set the primary property of one of the NICs to true, and the rest to false.

    "networkProfile": {
      "networkInterfaces": [
        {
          "id": "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('dbVMSetting').nicName,'-DA-',copyindex(1)))]",
          "properties": { "primary": true }
        },
        {
          "id": "[resourceId('Microsoft.Network/networkInterfaces', concat(variables('dbVMSetting').nicName,'-RA-',copyindex(1)))]",
          "properties": { "primary": false }
        }
      ]
    }
    

Distribuire il modello ARM tramite clic per la distribuzioneDeploy the ARM template by using click to deploy

Importante

Assicurarsi di seguire la procedura illustrata in Prerequisiti prima delle istruzioni seguenti.Make sure you follow the pre-requisites steps before following the instructions below.

Il modello di esempio disponibile nel repository pubblico usa un file di parametro che contiene i valori predefiniti usati per generare lo scenario descritto in precedenza.The sample template available in the public repository uses a parameter file containing the default values used to generate the scenario described above. Per distribuire questo modello mediante clic per la distribuzione, seguire questo collegamento, a destra di Gruppo di risorse di back-end (vedere la documentazione) fare clic su Distribuisci in Azure, se necessario sostituire i valori del parametro predefinito e seguire le istruzioni nel portale.To deploy this template using click to deploy, follow this link, to the right of Backend resource group (see documentation) click Deploy to Azure, replace the default parameter values if necessary, and follow the instructions in the portal.

La figura seguente illustra i contenuti del nuovo gruppo di risorse, dopo la distribuzione.The figure below shows the contents of the new resource group, after deployment.

Gruppo di risorse di back-end

Distribuire il modello tramite PowerShellDeploy the template by using PowerShell

Per distribuire il modello scaricato mediante PowerShell, installare e configurare PowerShell seguendo la procedura riportata nell'articolo Installare e configurare PowerShell. Seguire quindi questa procedura:To deploy the template you downloaded by using PowerShell, install and configure PowerShell by completing the steps in the Install and configure PowerShell article and then complete the following steps:

Eseguire il cmdlet New-AzureRmResourceGroup per creare un gruppo di risorse usando il modello.Run the New-AzureRmResourceGroup cmdlet to create a resource group using the template.

New-AzureRmResourceGroup -Name IaaSStory-Backend -Location uswest `
TemplateFile 'https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/IaaS-Story/11-MultiNIC/azuredeploy.json' `
-TemplateParameterFile 'https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/IaaS-Story/11-MultiNIC/azuredeploy.parameters.json'

Output previsto:Expected output:

ResourceGroupName : IaaSStory-Backend
Location          : westus
ProvisioningState : Succeeded
Tags              :
Permissions       :
                    Actions  NotActions
                    =======  ==========
                    *
    Resources         :
                    Name                 Type                                 Location
                    ===================  ===================================  ========
                    ASDB                 Microsoft.Compute/availabilitySets   westus  
                    DB1                  Microsoft.Compute/virtualMachines    westus  
                    DB2                  Microsoft.Compute/virtualMachines    westus  
                    NICDB-DA-1           Microsoft.Network/networkInterfaces  westus  
                    NICDB-DA-2           Microsoft.Network/networkInterfaces  westus  
                    NICDB-RA-1           Microsoft.Network/networkInterfaces  westus  
                    NICDB-RA-2           Microsoft.Network/networkInterfaces  westus  
                    wtestvnetstorageprm  Microsoft.Storage/storageAccounts    westus  
ResourceId        : /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/IaaSStory-Backend

Distribuire il modello tramite l'interfaccia della riga di comando di AzureDeploy the template by using the Azure CLI

Per distribuire il modello tramite l'interfaccia della riga di comando di Azure, seguire questa procedura.To deploy the template by using the Azure CLI, follow the steps below.

  1. Se l'interfaccia della riga di comando di Azure non è mai stata usata, vedere Installare e configurare l'interfaccia della riga di comando di Azure e seguire le istruzioni fino al punto in cui si selezionano l'account e la sottoscrizione di Azure.If you have never used Azure CLI, see Install and Configure the Azure CLI and follow the instructions up to the point where you select your Azure account and subscription.
  2. Eseguire il comando azure config mode per passare alla modalità Gestione risorse, come illustrato di seguito.Run the azure config mode command to switch to Resource Manager mode, as shown below.

    azure config mode arm
    

    L'output previsto è il seguente:The expected output follows:

     info:    New mode is arm
    
  3. Aprire il file del parametro, selezionare i relativi contenuti e salvarlo in un file nel computer.Open the parameter file, select its contents, and save it to a file in your computer. In questo esempio il file dei parametri è stato salvato in parameters.json.For this example, we saved the parameters file to parameters.json.

  4. Eseguire il cmdlet azure group deployment create per distribuire la nuova rete virtuale usando il modello e i file dei parametri scaricati e modificati in precedenza.Run the azure group deployment create cmdlet to deploy the new VNet by using the template and parameter files you downloaded and modified above. Nell'elenco riportato dopo l'output sono indicati i parametri usati.The list shown after the output explains the parameters used.

    azure group create -n IaaSStory-Backend -l westus --template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/IaaS-Story/11-MultiNIC/azuredeploy.json -e parameters.json
    

    Output previsto:Expected output:

     info:    Executing command group create
     + Getting resource group IaaSStory-Backend
     + Creating resource group IaaSStory-Backend
     info:    Created resource group IaaSStory-Backend
     + Initializing template configurations and parameters
     + Creating a deployment
     info:    Created template deployment "azuredeploy"
     data:    Id:                  /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/IaaSStory-Backend
     data:    Name:                IaaSStory-Backend
     data:    Location:            westus
     data:    Provisioning State:  Succeeded
     data:    Tags: null
     data:
     info:    group create command OK