Azure 虛擬機器擴展集的網路

透過入口網站部署 Azure 虛擬機器擴展集時,特定的網路屬性為預設,例如具有輸入 NAT 規則的 Azure Load Balancer。 本文說明如何使用某些您可以使用擴展集設定的更進階網路功能。

本文所討論的所有概念都可以使用 Azure Resource Manager 範本來設定。 選取的功能也會包含 Azure CLI 和 PowerShell 範例。

加速網路

Azure 加速網路可以對虛擬機器啟用 Single Root I/O Virtualization (SR-IOV),大幅提升網路效能。 若要深入了解如何使用加速網路,請參閱 WindowsLinux 虛擬機器的加速網路。 若要搭配擴展集使用加速的網路,請在擴展集的 networkInterfaceConfigurations 設定中,將 enableAcceleratedNetworking 設為 true。 例如:

"networkProfile": {
    "networkInterfaceConfigurations": [
    {
      "name": "niconfig1",
      "properties": {
        "primary": true,
        "enableAcceleratedNetworking" : true,
        "ipConfigurations": [
          ...
        ]
      }
    }
   ]
}

具有 Azure Load Balancer 的 Azure 虛擬機器擴展集

請參閱 Azure Load Balancer 和虛擬機器擴展集,以深入瞭解如何根據您的情況,使用虛擬機器擴展集來設定 Standard Load Balancer。

將虛擬機器擴展集新增至應用程式閘道

若要將擴展集新增至應用程式閘道的後端集區,請在擴展集的網路設定檔中參考應用程式閘道後端集區。 建立擴展集時可以完成此作業 (請參閱下方的 ARM 範本),也可以在現有的擴展集上完成。

將統一協調流程虛擬機器擴展集新增至應用程式閘道

將統一虛擬機器擴展集新增至應用程式閘道的後端集區時,新擴展集或現有擴展集的流程會有所不同:

  • 針對新的擴展集,請在一或多個網路介面 IP 設定下,在擴展集模型的網路設定檔中參考應用程式閘道的後端集區識別碼。 部署時,新增至擴展集的執行個體會放在應用程式閘道的後端集區裡。
  • 針對現有的擴展集,請先在擴展集模型的網路設定檔中新增應用程式閘道的後端集區識別碼,然後藉由升級來套用模型到現有執行個體。 如果擴展集的升級原則是 AutomaticRolling,便會為您更新執行個體。 如果是 Manual,則必須手動升級執行個體。
  1. 請在與擴展集相同的區域中建立應用程式閘道和後端集區 (如果您還沒有的話)
  2. 在入口網站中瀏覽到虛擬機器擴展集
  3. 在 [設定] 下,開啟 [網路] 窗格
  4. 在 [網路] 窗格中,選取 [負載平衡] 索引標籤,然後按一下 [ 新增負載平衡]
  5. 從 [負載平衡選項] 下拉式清單選取 [應用程式閘道],然後選擇現有的應用程式閘道
  6. 選取目標後端集區,然後按一下 [儲存]
  7. 如果您的擴展集升級原則為 [手動],請瀏覽至 [設定]>[執行個體] 窗格,以選取並升級每個執行個體

將彈性協調流程虛擬機器擴展集新增至應用程式閘道

將彈性擴展集新增至應用程式閘道時,流程與將獨立 VM 新增至應用程式閘道的後端集區相同,您會將虛擬機器的網路介面 IP 設定更新為後端集區的一部分。 可以透過應用程式閘道的設定或設定虛擬機器的網路介面設定來完成此作業。

注意

請注意,應用程式閘道必須和擴展集位於相同的虛擬網路中,但必須與擴展集位於不同的子網路。

可設定的 DNS 設定

根據預設,擴展集會採取 VNET 和它們建立於該子網路的特定 DNS 設定。 不過,您可以直接設定擴展集的 DNS 設定。

使用可設定的 DNS 伺服器建立擴展集

若要使用 Azure CLI 搭配自訂的 DNS 設定建立擴展集,將 --dns-servers 引數新增至 vmss create 命令,後面接以空格分隔的伺服器 IP 位址。 例如:

--dns-servers 10.0.0.6 10.0.0.5

若要在 Azure 範本中設定自訂的 DNS 伺服器,請將 dnsSettings 屬性新增至擴展集 networkInterfaceConfigurations 區段。 例如:

"dnsSettings":{
    "dnsServers":["10.0.0.6", "10.0.0.5"]
}

使用可設定的虛擬機器網域名稱建立擴展集

若要使用 CLI 搭配虛擬機器自訂 DNS 名稱來建立擴展集,請將 --vm-domain-name 引數新增至 Virtual Machine Scale Set create 命令,後面接著代表網域名稱的字串。

若要在 Azure 範本中設定網域名稱,請將 dnsSettings 屬性新增至擴展集 networkInterfaceConfigurations 區段。 例如:

"networkProfile": {
  "networkInterfaceConfigurations": [
    {
    "name": "nic1",
    "properties": {
      "primary": true,
      "ipConfigurations": [
      {
        "name": "ip1",
        "properties": {
          "subnet": {
            "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', variables('vnetName'), '/subnets/subnet1')]"
          },
          "publicIPAddressconfiguration": {
            "name": "publicip",
            "properties": {
            "idleTimeoutInMinutes": 10,
              "dnsSettings": {
                "domainNameLabel": "[parameters('vmssDnsName')]"
              }
            }
          }
        }
      }
    ]
    }
}

個別虛擬機器 DNS 名稱的輸出格式如下:

<vm><vmindex>.<specifiedVmssDomainNameLabel>

每個虛擬機器的公用 IPv4

一般情況下,Azure 擴展集虛擬機器不需要自己的公用 IP 位址。 大部分情況下,將公用 IP 位址與負載平衡器或個別虛擬機器 (也稱為 jumpbox) 相關聯,然後視需要將輸入連線路由至擴展集虛擬機器 (例如,透過輸入 NAT 規則),是較為經濟且安全的方式。

但是,某些情況會要求擴展集虛擬機器具備自己的公用 IP 位址。 例如遊戲,其中主控台需要直接連線至雲端虛擬機器,進而執行遊戲實體流程。 另一個範例是虛擬機器需要對另一個分散式資料庫中跨區域的虛擬機器進行外部連線。

使用公用 IP 每虛擬機器建立擴展集

若要使用 CLI 建立將公用 IP 位址指派給每個虛擬機器的擴展集,請將 --public-ip-per-vm 參數新增至 vmss create 命令。

若要使用 Azure 範本建立擴展集,請確定 Microsoft.Compute/virtualMachineScaleSets 資源的 API 版本至少為 2017-03-30,並將 publicIpAddressConfiguration JSON 屬性新增至擴展集 ipConfigurations 區段。 例如:

"publicIpAddressConfiguration": {
    "name": "pub1",
    "sku": {
      "name": "Standard"
    },
    "properties": {
      "idleTimeoutInMinutes": 15
    }
}

請注意,每個執行個體具有公用 IP 的虛擬機器擴展集建立時,如果前面有負載平衡器,會由 Load Balancer 的 SKU (例如,Basic 或 Standard) 來決定執行個體 IP。 如果建立的虛擬機器擴展集沒有負載平衡器,可以直接使用範本的 SKU 區段來設定執行個體 IP 的 SKU,如上所示。

使用 Basic Load Balancer 的範例範本:vmss-public-ip-linux

或者,也可以使用公用 IP 前置詞 (標準 SKU 公用 IP 的連續區塊) 在虛擬機器擴展集裡產生執行個體層級的 IP。 前置詞的區域屬性將會傳遞至執行個體 IP,但不會顯示在輸出中。

使用公用 IP 前置詞的範例範本:vmms-with-public-ip-prefix

查詢擴展集中虛擬機器的公用 IP 位址

若要列出使用 CLI 指派給擴展集虛擬機器的公用 IP 位址,請使用 az vmss list-instance-public-ips 命令。

若要使用 PowerShell 列出擴展集公用 IP 位址,請使用 Get-AzPublicIpAddress 命令。 例如:

Get-AzPublicIpAddress -ResourceGroupName myrg -VirtualMachineScaleSetName myvmss

您也可以直接參考公用 IP 位址組態的資源識別碼,以查詢公用 IP 位址。 例如:

Get-AzPublicIpAddress -ResourceGroupName myrg -Name myvmsspip

您也可以查詢 Azure 資源總管,或 Azure REST API 版本 2017-03-30 或更高版本,來顯示指派給擴展集虛擬機器的公用 IP 位址。

若要查詢 Azure 資源總管

  1. 在 Web 瀏覽器中開啟 Azure 資源總管
  2. 從左側按一下 [訂用帳戶] 旁的 [+],即可展開訂用帳戶。 如果 [訂用帳戶] 底下只有一個項目,則可能已經展開。
  3. 展開您的訂用帳戶。
  4. 展開您的資源群組。
  5. 展開 [提供者]
  6. 展開 [Microsoft.Compute]
  7. 展開 [virtualMachineScaleSets]
  8. 展開您的擴展集。
  9. 按一下 [publicipaddresses]

若要查詢 Azure REST API:

GET https://management.azure.com/subscriptions/{your sub ID}/resourceGroups/{RG name}/providers/Microsoft.Compute/virtualMachineScaleSets/{scale set name}/publicipaddresses?api-version=2017-03-30

Azure 資源總管和 Azure REST API 的輸出範例:

{
  "value": [
    {
      "name": "pub1",
      "id": "/subscriptions/your-subscription-id/resourceGroups/your-rg/providers/Microsoft.Compute/virtualMachineScaleSets/pipvmss/virtualMachines/0/networkInterfaces/pipvmssnic/ipConfigurations/yourvmssipconfig/publicIPAddresses/pub1",
      "etag": "W/\"a64060d5-4dea-4379-a11d-b23cd49a3c8d\"",
      "properties": {
        "provisioningState": "Succeeded",
        "resourceGuid": "ee8cb20f-af8e-4cd6-892f-441ae2bf701f",
        "ipAddress": "13.84.190.11",
        "publicIPAddressVersion": "IPv4",
        "publicIPAllocationMethod": "Dynamic",
        "idleTimeoutInMinutes": 15,
        "ipConfiguration": {
          "id": "/subscriptions/your-subscription-id/resourceGroups/your-rg/providers/Microsoft.Compute/virtualMachineScaleSets/yourvmss/virtualMachines/0/networkInterfaces/yourvmssnic/ipConfigurations/yourvmssipconfig"
        }
      }
    },
    {
      "name": "pub1",
      "id": "/subscriptions/your-subscription-id/resourceGroups/your-rg/providers/Microsoft.Compute/virtualMachineScaleSets/yourvmss/virtualMachines/3/networkInterfaces/yourvmssnic/ipConfigurations/yourvmssipconfig/publicIPAddresses/pub1",
      "etag": "W/\"5f6ff30c-a24c-4818-883c-61ebd5f9eee8\"",
      "properties": {
        "provisioningState": "Succeeded",
        "resourceGuid": "036ce266-403f-41bd-8578-d446d7397c2f",
        "ipAddress": "13.84.159.176",
        "publicIPAddressVersion": "IPv4",
        "publicIPAllocationMethod": "Dynamic",
        "idleTimeoutInMinutes": 15,
        "ipConfiguration": {
          "id": "/subscriptions/your-subscription-id/resourceGroups/your-rg/providers/Microsoft.Compute/virtualMachineScaleSets/yourvmss/virtualMachines/3/networkInterfaces/yourvmssnic/ipConfigurations/yourvmssipconfig"
        }
      }
    }

每個 NIC 的多個 IP 位址

擴展集中連接到 VM 的每個 NIC 皆有一或多個 IP 組態與其相關聯。 每個組態會獲派一個私人 IP 位址。 每個組態可能也會有一個關聯的公用 IP 位址資源。 若要了解多少個 IP 位址可以指派到 NIC,和您可以在 Azure 訂用帳戶中使用多少個公用 IP 位址,請參閱 Azure 限制

每個虛擬機器的多個 NIC

每個虛擬機器可擁有最多 8 個 NIC,根據機器大小而定。 每部電腦的 NIC 最大數目可在VM 大小文章中找到。 連線至 VM 執行個體的 NIC 全都必須連線至相同的虛擬網路。 NIC 可以連線至不同子網路,但子網路必須全都屬於相同的虛擬網路。

下列範例是顯示多個 NIC 項目的擴展集網路設定檔,以及每個虛擬機器的多個公用 IP:

"networkProfile": {
    "networkInterfaceConfigurations": [
        {
        "name": "nic1",
        "properties": {
            "primary": true,
            "ipConfigurations": [
            {
                "name": "ip1",
                "properties": {
                "subnet": {
                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', variables('vnetName'), '/subnets/subnet1')]"
                },
                "publicipaddressconfiguration": {
                    "name": "pub1",
                    "properties": {
                    "idleTimeoutInMinutes": 15
                    }
                },
                "loadBalancerInboundNatPools": [
                    {
                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('lbName'), '/inboundNatPools/natPool1')]"
                    }
                ],
                "loadBalancerBackendAddressPools": [
                    {
                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('lbName'), '/backendAddressPools/addressPool1')]"
                    }
                ]
                }
            }
            ]
        }
        },
        {
        "name": "nic2",
        "properties": {
            "primary": false,
            "ipConfigurations": [
            {
                "name": "ip1",
                "properties": {
                "subnet": {
                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', variables('vnetName'), '/subnets/subnet1')]"
                },
                "publicipaddressconfiguration": {
                    "name": "pub1",
                    "properties": {
                    "idleTimeoutInMinutes": 15
                    }
                },
                "loadBalancerInboundNatPools": [
                    {
                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('lbName'), '/inboundNatPools/natPool1')]"
                    }
                ],
                "loadBalancerBackendAddressPools": [
                    {
                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('lbName'), '/backendAddressPools/addressPool1')]"
                    }
                ]
                }
            }
            ]
        }
        }
    ]
}

每個擴展集的 NSG 和 ASG

網路安全性群組可讓您使用安全性規則篩選在 Azure 虛擬網路中進出於 Azure 資源的流量。 應用程式安全性群組可讓您處理 Azure 資源的網路安全性,並將其群組為應用程式結構的擴充功能。

您可以將「網路安全性群組」直接套用至擴展集,方法是將參考新增至擴展集虛擬機器屬性的網路介面設定區段。

「應用程式安全性群組」也可以直接指定至擴展集,方法是將參考新增至擴展集虛擬機器屬性的網路介面 IP 組態區段。

例如:

"networkProfile": {
    "networkInterfaceConfigurations": [
        {
            "name": "nic1",
            "properties": {
                "primary": true,
                "ipConfigurations": [
                    {
                        "name": "ip1",
                        "properties": {
                            "subnet": {
                                "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/virtualNetworks/', variables('vnetName'), '/subnets/subnet1')]"
                            },
                            "applicationSecurityGroups": [
                                {
                                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/applicationSecurityGroups/', variables('asgName'))]"
                                }
                            ],
                "loadBalancerInboundNatPools": [
                                {
                                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('lbName'), '/inboundNatPools/natPool1')]"
                                }
                            ],
                            "loadBalancerBackendAddressPools": [
                                {
                                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/loadBalancers/', variables('lbName'), '/backendAddressPools/addressPool1')]"
                                }
                            ]
                        }
                    }
                ],
                "networkSecurityGroup": {
                    "id": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/networkSecurityGroups/', variables('nsgName'))]"
                }
            }
        }
    ]
}

若要確認您的網路安全性群組是否與擴展集相關聯,請使用 az vmss show 命令。 下列範例會使用 --query 來篩選結果,並且只會顯示與輸出相關的區段。

az vmss show \
    -g myResourceGroup \
    -n myScaleSet \
    --query virtualMachineProfile.networkProfile.networkInterfaceConfigurations[].networkSecurityGroup

[
  {
    "id": "/subscriptions/.../resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/nsgName",
    "resourceGroup": "myResourceGroup"
  }
]

若要確認您的應用程式安全性群組是否與擴展集相關聯,請使用 az vmss show 命令。 下列範例會使用 --query 來篩選結果,並且只會顯示與輸出相關的區段。

az vmss show \
    -g myResourceGroup \
    -n myScaleSet \
    --query virtualMachineProfile.networkProfile.networkInterfaceConfigurations[].ipConfigurations[].applicationSecurityGroups

[
  [
    {
      "id": "/subscriptions/.../resourceGroups/myResourceGroup/providers/Microsoft.Network/applicationSecurityGroups/asgName",
      "resourceGroup": "myResourceGroup"
    }
  ]
]

對特定執行個體進行網路更新

您可以對特定的虛擬機器擴展集執行個體進行網路更新。

您可以對執行個體執行 PUT 以更新網路設定。 這可以用來執行一些作業,例如新增或移除網路介面卡 (NIC),或從後端集區移除執行個體。

PUT https://management.azure.com/subscriptions/.../resourceGroups/vmssnic/providers/Microsoft.Compute/virtualMachineScaleSets/vmssnic/virtualMachines/1/?api-version=2019-07-01

下列範例顯示如何將第二個 IP 設定新增至 NIC。

  1. 執行 GET,以取得特定虛擬機器擴展集執行個體的詳細資料。

    GET https://management.azure.com/subscriptions/.../resourceGroups/vmssnic/providers/Microsoft.Compute/virtualMachineScaleSets/vmssnic/virtualMachines/1/?api-version=2019-07-01
    

    以下已簡化為只顯示這個範例的網路參數。

    {
      ...
      "properties": {
        ...
        "networkProfileConfiguration": {
          "networkInterfaceConfigurations": [
            {
              "name": "vmssnic-vnet-nic01",
              "properties": {
                "primary": true,
                "enableAcceleratedNetworking": false,
                "networkSecurityGroup": {
                  "id": "/subscriptions/123a1a12-a123-1ab1-12a1-12a1a1234ab1/resourceGroups/vmssnic/providers/Microsoft.Network/networkSecurityGroups/basicNsgvmssnic-vnet-nic01"
                },
                "dnsSettings": {
                  "dnsServers": []
                },
                "enableIPForwarding": false,
                "ipConfigurations": [
                  {
                    "name": "vmssnic-vnet-nic01-defaultIpConfiguration",
                    "properties": {
                      "publicIPAddressConfiguration": {
                        "name": "publicIp-vmssnic-vnet-nic01",
                        "properties": {
                          "idleTimeoutInMinutes": 15,
                          "ipTags": [],
                          "publicIPAddressVersion": "IPv4"
                        }
                      },
                      "primary": true,
                      "subnet": {
                        "id": "/subscriptions/123a1a12-a123-1ab1-12a1-12a1a1234ab1/resourceGroups/vmssnic/providers/Microsoft.Network/virtualNetworks/vmssnic-vnet/subnets/default"
                      },
                      "privateIPAddressVersion": "IPv4"
                    }
                  }
                ]
              }
            }
          ]
        },
        ...
      }
    }
    
  2. 對執行個體執行 PUT,更新其他 IP 設定。 這與新增其他 networkInterfaceConfiguration 作業類似。

    PUT https://management.azure.com/subscriptions/.../resourceGroups/vmssnic/providers/Microsoft.Compute/virtualMachineScaleSets/vmssnic/virtualMachines/1/?api-version=2019-07-01
    

    以下已簡化為只顯示這個範例的網路參數。

      {
      ...
      "properties": {
        ...
        "networkProfileConfiguration": {
          "networkInterfaceConfigurations": [
            {
              "name": "vmssnic-vnet-nic01",
              "properties": {
                "primary": true,
                "enableAcceleratedNetworking": false,
                "networkSecurityGroup": {
                  "id": "/subscriptions/123a1a12-a123-1ab1-12a1-12a1a1234ab1/resourceGroups/vmssnic/providers/Microsoft.Network/networkSecurityGroups/basicNsgvmssnic-vnet-nic01"
                },
                "dnsSettings": {
                  "dnsServers": []
                },
                "enableIPForwarding": false,
                "ipConfigurations": [
                  {
                    "name": "vmssnic-vnet-nic01-defaultIpConfiguration",
                    "properties": {
                      "publicIPAddressConfiguration": {
                        "name": "publicIp-vmssnic-vnet-nic01",
                        "properties": {
                          "idleTimeoutInMinutes": 15,
                          "ipTags": [],
                          "publicIPAddressVersion": "IPv4"
                        }
                      },
                      "primary": true,
                      "subnet": {
                        "id": "/subscriptions/123a1a12-a123-1ab1-12a1-12a1a1234ab1/resourceGroups/vmssnic/providers/Microsoft.Network/virtualNetworks/vmssnic-vnet/subnets/default"
                      },
                      "privateIPAddressVersion": "IPv4"
                    }
                  },
                  {
                    "name": "my-second-config",
                    "properties": {
                      "subnet": {
                        "id": "/subscriptions/123a1a12-a123-1ab1-12a1-12a1a1234ab1/resourceGroups/vmssnic/providers/Microsoft.Network/virtualNetworks/vmssnic-vnet/subnets/default"
                      },
                      "privateIPAddressVersion": "IPv4"
                    }
                  }
                ]
              }
            }
          ]
        },
        ...
      }
    }
    

建立彈性擴展集的明確網路輸出連線

為了加強預設網路安全性,具有彈性協調流程的虛擬機器擴展集會要求使用自動調整設定檔以隱含方式建立的執行個體,必須透過下列其中一種方法,明確地定義輸出連線:

  • 在大部分情況下,我們建議將 NAT 閘道附加至子網路
  • 針對具有高安全性需求的情況,或使用 Azure 防火牆或網路虛擬設備 (NVA) 時,您可以指定自訂的使用者定義路由作為穿過防火牆的下一個躍點。
  • 執行個體位於標準 SKU Azure Load Balancer 的後端集區中。
  • 將公用 IP 位址附加至執行個體網路介面。

使用單一執行個體 VM 與虛擬機器擴展集搭配統一協調流程,系統會自動提供輸出連線。

需要明確輸出連線能力的常見情況包括:

  • Windows VM 啟用需要您定義從 VM 執行個體到 Windows 啟用金鑰管理服務 (KMS) 的輸出連線。 如需詳細資訊,請參閱針對 Windows VM 啟用問題進行疑難排解
  • 儲存體帳戶或 Key Vault 的存取權。 您也可以透過私人連結建立 Azure 服務連線。

如需定義安全輸出連線的詳細資訊,請參閱 Azure 中的預設輸出存取

下一步

如需 Azure 虛擬網路的詳細資訊,請參閱 Azure 虛擬網路概觀