创建并管理具有多个 NIC 的 Windows 虚拟机
适用于:✔️ Windows VM ✔️ 灵活规模集
Azure 中的虚拟机 (VM) 可附有多个虚拟网络接口卡 (NIC)。 一种常见方案是为前端和后端连接设置不同的子网。 可以将 VM 上的多个 NIC 关联到多个子网,但这些子网必须全都位于同一个虚拟网络 (vNet) 中。 本文详述了如何创建附有多个 NIC 的 VM。 还可以了解如何从现有 VM 中添加或删除 NIC。 不同的 VM 大小支持不同数目的 NIC,因此请相应地调整 VM 的大小。
注意
如果方案不需要多个子网,那么在单个 NIC 上使用多个 IP 配置可能会更简单。 可在此处找到有关此设置的说明。
先决条件
在以下示例中,请将示例参数名称替换成自己的值。 示例参数名称包括 myResourceGroup、myVnet 和 myVM。
创建具有多个 NIC 的 VM
首先创建一个资源组。 以下示例在“chinaeast”位置创建名为“myResourceGroup”的资源组:
New-AzResourceGroup -Name "myResourceGroup" -Location "ChinaEast"
创建虚拟网络和子网
虚拟网络的一种常见方案是具有两个或多个子网。 一个子网可能用于前端流量,另一个用于后端流量。 若要连接两个子网,可在 VM 上使用多个 NIC。
通过 New-AzVirtualNetworkSubnetConfig 定义两个虚拟网络子网。 以下示例分别定义 mySubnetFrontEnd 和 mySubnetBackEnd 的子网:
$mySubnetFrontEnd = New-AzVirtualNetworkSubnetConfig -Name "mySubnetFrontEnd" ` -AddressPrefix "192.168.1.0/24" $mySubnetBackEnd = New-AzVirtualNetworkSubnetConfig -Name "mySubnetBackEnd" ` -AddressPrefix "192.168.2.0/24"
通过 New-AzVirtualNetwork 创建虚拟网络和子网。 以下示例创建一个名为 myVnet 的虚拟网络:
$myVnet = New-AzVirtualNetwork -ResourceGroupName "myResourceGroup" ` -Location "chinaeast" ` -Name "myVnet" ` -AddressPrefix "192.168.0.0/16" ` -Subnet $mySubnetFrontEnd,$mySubnetBackEnd
创建多个 NIC
通过 New-AzNetworkInterface 创建两个 NIC。 将其中一个 NIC 附加到前端子网,将另一个 NIC 附加到后端子网。 以下示例创建名为 myNic1 和 myNic2 的 NIC:
$frontEnd = $myVnet.Subnets|?{$_.Name -eq 'mySubnetFrontEnd'}
$myNic1 = New-AzNetworkInterface -ResourceGroupName "myResourceGroup" `
-Name "myNic1" `
-Location "chinaeast" `
-SubnetId $frontEnd.Id
$backEnd = $myVnet.Subnets|?{$_.Name -eq 'mySubnetBackEnd'}
$myNic2 = New-AzNetworkInterface -ResourceGroupName "myResourceGroup" `
-Name "myNic2" `
-Location "chinaeast" `
-SubnetId $backEnd.Id
通常还会创建用于筛选流向 VM 的网络流量的网络安全组和用于在多个 VM 间分配流量的负载均衡器。
创建虚拟机
立即开始构建 VM 配置。 每种 VM 大小限制了可添加到 VM 的 NIC 数目。 有关详细信息,请参阅 Windows VM 大小。
将 VM 凭据设置为
$cred
变量,如下所示:$cred = Get-Credential
通过 New-AzVMConfig 定义你的 VM。 以下示例定义名为 myVM 的 VM,并使用支持两个以上 NIC 的 VM 大小(Standard_DS3_v2):
$vmConfig = New-AzVMConfig -VMName "myVM" -VMSize "Standard_DS3_v2"
通过 Set-AzVMOperatingSystem 和 Set-AzVMSourceImage 创建 VM 配置的其余部分。 以下示例创建一个 Windows Server 2016 VM:
$vmConfig = Set-AzVMOperatingSystem -VM $vmConfig ` -Windows ` -ComputerName "myVM" ` -Credential $cred ` -ProvisionVMAgent ` -EnableAutoUpdate $vmConfig = Set-AzVMSourceImage -VM $vmConfig ` -PublisherName "MicrosoftWindowsServer" ` -Offer "WindowsServer" ` -Skus "2016-Datacenter" ` -Version "latest"
通过 Add-AzVMNetworkInterface 附加之前创建的两个 NIC:
$vmConfig = Add-AzVMNetworkInterface -VM $vmConfig -Id $myNic1.Id -Primary $vmConfig = Add-AzVMNetworkInterface -VM $vmConfig -Id $myNic2.Id
使用 New-AzVM 创建 VM:
New-AzVM -VM $vmConfig -ResourceGroupName "myResourceGroup" -Location "chinaeast"
通过完成为多个 NIC 配置操作系统中的步骤,将辅助 NIC 的路由添加到 OS。
向现有 VM 添加 NIC
若要向现有 VM 添加虚拟 NIC,解除分配 VM,添加虚拟 NIC,并启动 VM。 不同的 VM 大小支持不同数目的 NIC,因此请相应地调整 VM 的大小。 如果需要,可调整 VM 的大小。
通过 Stop-AzVM 解除分配 VM。 以下示例解除分配 myResourceGroup 中名为 myVM 的 VM:
Stop-AzVM -Name "myVM" -ResourceGroupName "myResourceGroup"
通过 Get-AzVm 获取 VM 的现有配置。 以下示例从 myResourceGroup 中获取名为 myVM 的 VM 的信息:
$vm = Get-AzVm -Name "myVM" -ResourceGroupName "myResourceGroup"
以下示例通过 New-AzNetworkInterface 创建附加到 mySubnetBackEnd 的名为 myNic3 的虚拟 NIC。 然后,通过 Add-AzVMNetworkInterface 将该虚拟 NIC 附加到 myResourceGroup 中名为 myVM 的 VM:
# Get info for the back end subnet $myVnet = Get-AzVirtualNetwork -Name "myVnet" -ResourceGroupName "myResourceGroup" $backEnd = $myVnet.Subnets|?{$_.Name -eq 'mySubnetBackEnd'} # Create a virtual NIC $myNic3 = New-AzNetworkInterface -ResourceGroupName "myResourceGroup" ` -Name "myNic3" ` -Location "chinaeast" ` -SubnetId $backEnd.Id # Get the ID of the new virtual NIC and add to VM $nicId = (Get-AzNetworkInterface -ResourceGroupName "myResourceGroup" -Name "MyNic3").Id Add-AzVMNetworkInterface -VM $vm -Id $nicId | Update-AzVm -ResourceGroupName "myResourceGroup"
主虚拟 NIC
具有多个 NIC 的 VM 上其中一个需为主 NIC。 如果 VM 上现有虚拟 NIC 之一已设置为主 NIC,则可跳过此步骤。 以下示例假设 VM 上现在存在两个虚拟NIC,并且想要将第一个 NIC (
[0]
) 添加为主 NIC:# List existing NICs on the VM and find which one is primary $vm.NetworkProfile.NetworkInterfaces # Set NIC 0 to be primary $vm.NetworkProfile.NetworkInterfaces[0].Primary = $true $vm.NetworkProfile.NetworkInterfaces[1].Primary = $false # Update the VM state in Azure Update-AzVM -VM $vm -ResourceGroupName "myResourceGroup"
通过 Start-AzVm 启动 VM:
Start-AzVM -ResourceGroupName "myResourceGroup" -Name "myVM"
通过完成为多个 NIC 配置操作系统中的步骤,将辅助 NIC 的路由添加到 OS。
从现有 VM 中删除 NIC
若要从现有 VM 中删除虚拟 NIC,解除分配 VM,删除虚拟 NIC,并启动 VM。
通过 Stop-AzVM 解除分配 VM。 以下示例解除分配 myResourceGroup 中名为 myVM 的 VM:
Stop-AzVM -Name "myVM" -ResourceGroupName "myResourceGroup"
通过 Get-AzVm 获取 VM 的现有配置。 以下示例从 myResourceGroup 中获取名为 myVM 的 VM 的信息:
$vm = Get-AzVm -Name "myVM" -ResourceGroupName "myResourceGroup"
通过 Get-AzNetworkInterface 获取有关删除 NIC 的信息。 以下示例获取有关“myNic3”的信息:
# List existing NICs on the VM if you need to determine NIC name $vm.NetworkProfile.NetworkInterfaces $nicId = (Get-AzNetworkInterface -ResourceGroupName "myResourceGroup" -Name "myNic3").Id
通过 Remove-AzVMNetworkInterface 删除 NIC,然后通过 Update-AzVm 更新 VM。 以下示例删除上一步中由
$nicId
获得的“myNic3”:Remove-AzVMNetworkInterface -VM $vm -NetworkInterfaceIDs $nicId | ` Update-AzVm -ResourceGroupName "myResourceGroup"
通过 Start-AzVm 启动 VM:
Start-AzVM -Name "myVM" -ResourceGroupName "myResourceGroup"
使用模板创建多个 NIC
使用 Azure 资源管理器模板可在部署期间创建资源的多个实例,例如,创建多个 NIC。 资源管理器模板使用声明性 JSON 文件来定义环境。 有关详细信息,请参阅 Azure 资源管理器概述。 使用“copy”指定要创建的实例数:
"copy": {
"name": "multiplenics",
"count": "[parameters('count')]"
}
有关详细信息,请参阅使用“copy”创建多个实例。
还可以使用 copyIndex()
在资源名称后面追加一个数字。 然后可创建“myNic1”、“MyNic2”等 。 以下代码演示了追加索引值的示例:
"name": "[concat('myNic', copyIndex())]",
可以阅读有关使用 Resource Manager 模板创建多个 NIC 的完整示例。
通过完成为多个 NIC 配置操作系统中的步骤,将辅助 NIC 的路由添加到 OS。
为多个 NIC 配置来宾 OS
Azure 会将默认网关分配给附加到虚拟机的第一个(主)网络接口。 Azure 不会将默认网关分配给附加到虚拟机的其他(辅助)网络接口。 因此,默认情况下无法与辅助网络接口所在子网的外部资源进行通信。 但是,辅助网络接口可以与子网外部的资源进行通信,尽管对不同操作系统而言,启用通信的步骤有所不同。
从 Windows 命令提示符下,运行
route print
命令,这将返回类似于以下虚拟机输出的输出,该虚拟机包含两个附加的网络接口:=========================================================================== Interface List 3...00 0d 3a 10 92 ce ......Microsoft Hyper-V Network Adapter #3 7...00 0d 3a 10 9b 2a ......Microsoft Hyper-V Network Adapter #4 ===========================================================================
在本例中,Microsoft Hyper-V 网络适配器 #4(接口 7)是辅助网络接口,系统不会向其分配默认网关。
从命令提示符处,运行
ipconfig
命令查看分配给辅助网络接口的 IP 地址。 在本例中,192.168.2.4 被分配到接口 7。 辅助网络接口没有返回任何默认网关地址。若要将发往辅助网络接口子网外部地址的所有流量路由到子网网关,请运行以下命令:
route add -p 0.0.0.0 MASK 0.0.0.0 192.168.2.1 METRIC 5015 IF 7
子网的网关地址是为该子网定义的地址范围中的第一个 IP 地址(以 .1 结尾)。 如果不想路由子网外部的所有流量,可改为向特定目标添加单独的路由。 例如,如果只想将流量从辅助网络接口路由到 192.168.3.0 网络,请输入以下命令:
route add -p 192.168.3.0 MASK 255.255.255.0 192.168.2.1 METRIC 5015 IF 7
例如,若要确认与 192.168.3.0 网络中资源的通信是否成功,请输入以下命令使用接口 7 (192.168.2.4) 对 192.168.3.4 执行 ping 操作:
ping 192.168.3.4 -S 192.168.2.4
可能需要使用以下命令通过正在 ping 的设备的 Windows 防火墙打开 ICMP:
netsh advfirewall firewall add rule name=Allow-ping protocol=icmpv4 dir=in action=allow
若要确认已添加的路由是否在路由表中,请输入
route print
命令,它将返回一个类似于以下文本的输出:=========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.4 15 0.0.0.0 0.0.0.0 192.168.2.1 192.168.2.4 5015
“网关”下列出的路由 192.168.1.1 是主网络接口的默认路由。 “网关”下列出的路由 192.168.2.1 是你所添加的路由。
后续步骤
尝试创建具有多个 NIC 的 VM 时,请查看 Windows VM 大小。 注意每个 VM 大小支持的 NIC 数目上限。