透過入口網站部署 Azure 虛擬機器擴展集時,預設為特定的網路屬性,例如具有輸入 NAT 規則的 Azure Load Balancer。 本文說明如何使用某些您可以使用擴展集設定的更進階的網路功能。
本文所討論的所有概念都可以使用 Azure Resource Manager 範本來設定。 選取的功能也會包含 Azure CLI 和 PowerShell 範例。
附註
無法將虛擬機器擴展集從一個 VNET 移至另一個 VNET。 您必須在目的地 VNET 中重新建立擴展集。
加速網路
Azure 加速網路可以對虛擬機器啟用單一根目錄 I/O 虛擬化 (SR-IOV),大幅提升網路效能。 若要深入了解如何使用加速網路,請參閱 Windows 或 Linux 虛擬機器的加速網路。 若要搭配擴展集使用加速網路,請在擴展集的 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 設定下,在擴展集模型的網路設定檔中參考應用程式閘道的後端集區識別碼。 部署時,新增至擴展集的執行個體會放在應用程式閘道的後端集區裡。
- 針對現有的擴展集,請先在擴展集模型的網路設定檔中新增應用程式閘道的後端集區識別碼,然後藉由升級將模型套用至現有執行個體。 如果擴展集的升級原則是
Automatic或Rolling,便會為您更新執行個體。 如果是Manual,則必須手動升級執行個體。
附註
應用程式閘道必須與擴展集處於同一虛擬網路,但必須與擴展集位於不同的子網路。
- 請在與擴展集相同的區域中建立應用程式閘道和後端集區 (如果還沒有建立)
- 在入口網站中瀏覽至虛擬機器擴展集
- 在 [設定] 下,開啟 [網路] 窗格
- 在 [網路] 窗格中,選取 [負載平衡] 索引標籤,然後按一下 [ 新增負載平衡]
- 從 [負載平衡選項] 下拉式清單選取 [應用程式閘道],然後選擇現有的應用程式閘道
- 選取目標後端集區,然後按一下 [儲存]
- 如果您的擴展集升級原則為 [手動],請瀏覽至 [設定]>[執行個體] 窗格,以選取並升級每個執行個體
將彈性協調流程虛擬機器擴展集新增至應用程式閘道
將彈性擴展集新增至應用程式閘道時,流程與將獨立 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前綴的範例範本: vmss-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 資源總管:
- 在 Web 瀏覽器中開啟 Azure 資源總管。
- 從左側按一下 [訂用帳戶] 旁的 [+],即可展開訂用帳戶。 如果 [訂用帳戶] 底下只有一個項目,則可能已經展開。
- 展開訂用帳戶。
- 展開資源群組。
- 展開 [提供者]。
- 展開 [Microsoft.Compute]。
- 展開 [virtualMachineScaleSets]。
- 展開擴展集。
- 按一下 [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 位址資源。 若要了解可以指派到 NIC 多少個 IP 位址,和您可以在 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。
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" } } ] } } ] }, ... } }對執行個體執行
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 虛擬網路概觀。