Creare route definite dall'utente (UDR) mediante un modello

Importante

Prima di iniziare a usare le risorse di Azure, è importante comprendere che Azure al momento offre due modelli di distribuzione, la distribuzione classica e Azure Resource Manager. È importante comprendere i modelli e strumenti di distribuzione prima di lavorare con le risorse di Azure. È possibile visualizzare la documentazione relativa a diversi strumenti facendo clic sulle schede nella parte superiore di questo articolo. Questo articolo illustra il modello di distribuzione Gestione risorse.

Scenario

Per illustrare meglio come creare un UDR, in questo documento verrà utilizzato lo scenario seguente.

DESCRIZIONE DELL’IMMAGINE

In questo scenario si creerà un UDR per la subnet front-end e un altro UDR per la subnet back-end, come descritto di seguito:

  • UDR-FrontEnd. Il front-end UDR verrà applicato per il subnet front-end , e contiene una route:
    • RouteToBackend. Questa route invia tutto il traffico nella subnet di back-end per la macchina virtuale FW1 .
  • Back-end di UDR. Il back-end UDR verrà applicato per il subnet back-end , e contiene una route:
    • RouteToFrontend. Questa route invia tutto il traffico nella subnet di front-end per la macchina virtuale FW1 .

La combinazione di queste route garantisce che tutto il traffico destinato da una subnet a un’altra venga indirizzato alla macchina virtuale FW1 , che viene utilizzato come un dispositivo virtuale. È inoltre necessario attivare l'inoltro IP per tale macchina virtuale, per garantire che possa ricevere il traffico destinato ad altre macchine virtuali.

Risorse UDR in un file di modello

È possibile visualizzare e scaricare il modello di esempio.

La sezione seguente illustra la definizione di UDR front-end nel file azuredeploy-vnet-nsg-udr.json per lo scenario:

"apiVersion": "2015-06-15",
"type": "Microsoft.Network/routeTables",
"name": "[parameters('frontEndRouteTableName')]",
"location": "[resourceGroup().location]",
"tags": {
  "displayName": "UDR - FrontEnd"    
},
"properties": {
  "routes": [
    {
      "name": "RouteToBackEnd",
      "properties": {
        "addressPrefix": "[parameters('backEndSubnetPrefix')]",
        "nextHopType": "VirtualAppliance",
        "nextHopIpAddress": "[parameters('vmaIpAddress')]"
      }
    }
  ]

Per associare la route definita dall'utente alla subnet front-end, è necessario modificare la definizione della subnet nel modello e usare l'ID di riferimento per la route.

"subnets": [
    "name": "[parameters('frontEndSubnetName')]",
    "properties": {
      "addressPrefix": "[parameters('frontEndSubnetPrefix')]",
      "networkSecurityGroup": {
        "id": "[resourceId('Microsoft.Network/networkSecurityGroups', parameters('frontEndNSGName'))]"
      },
      "routeTable": {
          "id": "[resourceId('Microsoft.Network/routeTables', parameters('frontEndRouteTableName'))]"
      }
    },

Si noti che va effettuata la stessa operazione per l'NSG back-end della subnet back-end nel modello.

È anche necessario assicurarsi che nella macchina virtuale FW1 la proprietà di inoltro dell'indirizzo IP sia attivata nella scheda di interfaccia di rete che verrà usata per ricevere e inoltrare i pacchetti. La sezione seguente illustra la definizione della scheda di interfaccia di rete per FW1 nel file azuredeploy-nsg-udr.json, in base allo scenario precedente.

"apiVersion": "2015-06-15",
"type": "Microsoft.Network/networkInterfaces",
"location": "[variables('location')]",
"tags": {
  "displayName": "NetworkInterfaces - DMZ"
},
"name": "[concat(variables('fwVMSettings').nicName, copyindex(1))]",
"dependsOn": [
  "[concat('Microsoft.Network/publicIPAddresses/', variables('fwVMSettings').pipName, copyindex(1))]",
  "[concat('Microsoft.Resources/deployments/', 'vnetTemplate')]"
],
"properties": {
  "ipConfigurations": [
    {
      "name": "ipconfig1",
      "properties": {
        "enableIPForwarding": true,
        "privateIPAllocationMethod": "Static",
        "privateIPAddress": "[concat('192.168.0.',copyindex(4))]",
        "publicIPAddress": {
          "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(variables('fwVMSettings').pipName, copyindex(1)))]"
        },
        "subnet": {
          "id": "[variables('dmzSubnetRef')]"
        }
      }
    }
  ]
},
"copy": {
  "name": "fwniccount",
  "count": "[parameters('fwCount')]"
}

Distribuire il modello tramite clic per la distribuzione

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. Distribuire questo modellotramite clic per la distribuzione, fare clic su Distribuisci in Azure, sostituire i valori del parametro predefinito se necessario e seguire le istruzioni nel portale.

  1. Se è la prima volta che si utilizza Azure PowerShell, vedere Come installare e configurare Azure PowerShell e seguire le istruzioni fino al termine della procedura per accedere ad Azure e selezionare la sottoscrizione desiderata.
  2. Usare il comando seguente per creare un gruppo di risorse:

    New-AzureRmResourceGroup -Name TestRG -Location westus
    
  3. Eseguire il comando seguente per generare il modello:

    New-AzureRmResourceGroupDeployment -Name DeployUDR -ResourceGroupName TestRG `
        -TemplateUri https://raw.githubusercontent.com/telmosampaio/azure-templates/master/IaaS-NSG-UDR/azuredeploy.json `
        -TemplateParameterUri https://raw.githubusercontent.com/telmosampaio/azure-templates/master/IaaS-NSG-UDR/azuredeploy.parameters.json
    

    Output previsto:

     ResourceGroupName : TestRG
     Location          : westus
     ProvisioningState : Succeeded
     Tags              : 
     Permissions       : 
                         Actions  NotActions
                         =======  ==========
                         *                  
    
     Resources         : 
                         Name                Type                                     Location
                         ==================  =======================================  ========
                         ASFW                Microsoft.Compute/availabilitySets       westus  
                         ASSQL               Microsoft.Compute/availabilitySets       westus  
                         ASWEB               Microsoft.Compute/availabilitySets       westus  
                         FW1                 Microsoft.Compute/virtualMachines        westus  
                         SQL1                Microsoft.Compute/virtualMachines        westus  
                         SQL2                Microsoft.Compute/virtualMachines        westus  
                         WEB1                Microsoft.Compute/virtualMachines        westus  
                         WEB2                Microsoft.Compute/virtualMachines        westus  
                         NICFW1              Microsoft.Network/networkInterfaces      westus  
                         NICSQL1             Microsoft.Network/networkInterfaces      westus  
                         NICSQL2             Microsoft.Network/networkInterfaces      westus  
                         NICWEB1             Microsoft.Network/networkInterfaces      westus  
                         NICWEB2             Microsoft.Network/networkInterfaces      westus  
                         NSG-BackEnd         Microsoft.Network/networkSecurityGroups  westus  
                         NSG-FrontEnd        Microsoft.Network/networkSecurityGroups  westus  
                         PIPFW1              Microsoft.Network/publicIPAddresses      westus  
                         PIPSQL1             Microsoft.Network/publicIPAddresses      westus  
                         PIPSQL2             Microsoft.Network/publicIPAddresses      westus  
                         PIPWEB1             Microsoft.Network/publicIPAddresses      westus  
                         PIPWEB2             Microsoft.Network/publicIPAddresses      westus  
                         UDR-BackEnd         Microsoft.Network/routeTables            westus  
                         UDR-FrontEnd        Microsoft.Network/routeTables            westus  
                         TestVNet            Microsoft.Network/virtualNetworks        westus  
                         testvnetstorageprm  Microsoft.Storage/storageAccounts        westus  
                         testvnetstoragestd  Microsoft.Storage/storageAccounts        westus
    
     ResourceId        : /subscriptions/[Subscription Id]/resourceGroups/TestRG
    

Distribuire il modello tramite l'interfaccia della riga di comando di Azure

Per distribuire il modello ARM tramite l'interfaccia della riga di comando di Azure, completare la procedura seguente:

  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.
  2. Eseguire il comando seguente per passare alla modalità Resource Manager:

    azure config mode arm
    

    Di seguito è riportato l'output previsto per il comando precedente:

     info:    New mode is arm
    
  3. Nel browser passare a https://raw.githubusercontent.com/telmosampaio/azure-templates/master/IaaS-NSG-UDR/azuredeploy.parameters.json, copiare il contenuto del file json e incollare in un nuovo file nel computer. Per questo scenario copiare i valori seguenti in un file denominato c:\udr\azuredeploy.parameters.json.

        {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "fwCount": {
              "value": 1
            },
            "webCount": {
              "value": 2
            },
            "sqlCount": {
              "value": 2
            }
          }
        }
    
  4. Eseguire il comando seguente per distribuire la nuova rete virtuale usando il modello e i file dei parametri scaricati e modificati in precedenza:

    azure group create -n TestRG -l westus --template-uri 'https://raw.githubusercontent.com/telmosampaio/azure-templates/master/IaaS-NSG-UDR/azuredeploy.json' -e 'c:\udr\azuredeploy.parameters.json'
    

    Output previsto:

     info:    Executing command group create
     info:    Getting resource group TestRG
     info:    Updating resource group TestRG
     info:    Updated resource group TestRG
     info:    Initializing template configurations and parameters
     info:    Creating a deployment
     info:    Created template deployment "azuredeploy"
     data:    Id:                  /subscriptions/[Subscription Id]/resourceGroups/TestRG
     data:    Name:                TestRG
     data:    Location:            westus
     data:    Provisioning State:  Succeeded
     data:    Tags: null
     data:    
     info:    group create command OK
    
  5. Eseguire il comando seguente per visualizzare le risorse create nel nuovo gruppo di risorse:

    azure group show TestRG
    

    Risultato previsto:

         info:    Executing command group show
         info:    Listing resource groups
         info:    Listing resources for the group
         data:    Id:                  /subscriptions/[Subscription Id]/resourceGroups/TestRG
         data:    Name:                TestRG
         data:    Location:            westus
         data:    Provisioning State:  Succeeded
         data:    Tags: null
         data:    Resources:
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Compute/availabilitySets/ASFW
         data:      Name    : ASFW
         data:      Type    : availabilitySets
         data:      Location: westus
         data:      Tags    : displayName=AvailabilitySet - DMZ
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Compute/availabilitySets/ASSQL
         data:      Name    : ASSQL
         data:      Type    : availabilitySets
         data:      Location: westus
         data:      Tags    : displayName=AvailabilitySet - SQL
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Compute/availabilitySets/ASWEB
         data:      Name    : ASWEB
         data:      Type    : availabilitySets
         data:      Location: westus
         data:      Tags    : displayName=AvailabilitySet - Web
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Compute/virtualMachines/FW1
         data:      Name    : FW1
         data:      Type    : virtualMachines
         data:      Location: westus
         data:      Tags    : displayName=VMs - DMZ
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Compute/virtualMachines/SQL1
         data:      Name    : SQL1
         data:      Type    : virtualMachines
         data:      Location: westus
         data:      Tags    : displayName=VMs - SQL
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Compute/virtualMachines/SQL2
         data:      Name    : SQL2
         data:      Type    : virtualMachines
         data:      Location: westus
         data:      Tags    : displayName=VMs - SQL
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Compute/virtualMachines/WEB1
         data:      Name    : WEB1
         data:      Type    : virtualMachines
         data:      Location: westus
         data:      Tags    : displayName=VMs - Web
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Compute/virtualMachines/WEB2
         data:      Name    : WEB2
         data:      Type    : virtualMachines
         data:      Location: westus
         data:      Tags    : displayName=VMs - Web
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/NICFW1
             data:      Name    : NICFW1
     data:      Type    : networkInterfaces
         data:      Location: westus
         data:      Tags    : displayName=NetworkInterfaces - DMZ
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/NICSQL1
         data:      Name    : NICSQL1
         data:      Type    : networkInterfaces
         data:      Location: westus
         data:      Tags    : displayName=NetworkInterfaces - SQL
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/NICSQL2
         data:      Name    : NICSQL2
         data:      Type    : networkInterfaces
         data:      Location: westus
         data:      Tags    : displayName=NetworkInterfaces - SQL
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/NICWEB1
         data:      Name    : NICWEB1
         data:      Type    : networkInterfaces
         data:      Location: westus
         data:      Tags    : displayName=NetworkInterfaces - Web
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/NICWEB2
         data:      Name    : NICWEB2
         data:      Type    : networkInterfaces
         data:      Location: westus
         data:      Tags    : displayName=NetworkInterfaces - Web
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkSecurityGroups/NSG-BackEnd
         data:      Name    : NSG-BackEnd
         data:      Type    : networkSecurityGroups
         data:      Location: westus
         data:      Tags    : displayName=NSG - Front End
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkSecurityGroups/NSG-FrontEnd
         data:      Name    : NSG-FrontEnd
         data:      Type    : networkSecurityGroups
         data:      Location: westus
         data:      Tags    : displayName=NSG - Remote Access
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/publicIPAddresses/PIPFW1
         data:      Name    : PIPFW1
         data:      Type    : publicIPAddresses
         data:      Location: westus
         data:      Tags    : displayName=PublicIPAddresses - DMZ
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/publicIPAddresses/PIPSQL1
         data:      Name    : PIPSQL1
             data:      Type    : publicIPAddresses
         data:      Location: westus
         data:      Tags    : displayName=PublicIPAddresses - SQL
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/publicIPAddresses/PIPSQL2
         data:      Name    : PIPSQL2
         data:      Type    : publicIPAddresses
         data:      Location: westus
         data:      Tags    : displayName=PublicIPAddresses - SQL
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/publicIPAddresses/PIPWEB1
         data:      Name    : PIPWEB1
         data:      Type    : publicIPAddresses
         data:      Location: westus
         data:      Tags    : displayName=PublicIPAddresses - Web
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/publicIPAddresses/PIPWEB2
         data:      Name    : PIPWEB2
         data:      Type    : publicIPAddresses
         data:      Location: westus
         data:      Tags    : displayName=PublicIPAddresses - Web
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/routeTables/UDR-BackEnd
         data:      Name    : UDR-BackEnd
         data:      Type    : routeTables
         data:      Location: westus
         data:      Tags    : displayName=Route Table - Back End
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/routeTables/UDR-FrontEnd
         data:      Name    : UDR-FrontEnd
         data:      Type    : routeTables
         data:      Location: westus
         data:      Tags    : displayName=UDR - FrontEnd
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Network/virtualNetworks/TestVNet
         data:      Name    : TestVNet
         data:      Type    : virtualNetworks
         data:      Location: westus
         data:      Tags    : displayName=VNet
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/testvnetstorageprm
         data:      Name    : testvnetstorageprm
         data:      Type    : storageAccounts
         data:      Location: westus
         data:      Tags    : displayName=Storage Account - Premium
         data:    
         data:      Id      : /subscriptions/[Subscription Id]/resourceGroups/TestRG/providers/Microsoft.Storage/storageAccounts/testvnetstoragestd
         data:      Name    : testvnetstoragestd
         data:      Type    : storageAccounts
         data:      Location: westus
         data:      Tags    : displayName=Storage Account - Simple
         data:    
         data:    Permissions:
         data:      Actions: *
         data:      NotActions: 
         data:
         info:    group show command OK
    
Suggerimento

Se non è possibile visualizzare tutte le risorse, eseguire il comando azure group deployment show per assicurarsi che lo stato di provisioning della distribuzione sia Riuscito.