如何在 Azure 中创建具有多个网络接口卡的 Linux 虚拟机

适用于:✔️ Linux VM ✔️ 灵活规模集

本文详述了如何使用 Azure CLI 创建具有多个 NIC 的 VM。

创建支持资源

安装最新的 Azure CLI 并使用 az login 登录到 Azure 帐户。

注意

在可以在由世纪互联运营的 Microsoft Azure 中使用 Azure CLI 之前,请先运行 az cloud set -n AzureChinaCloud 来更改云环境。 若要切换回 Azure 公有云,请再次运行 az cloud set -n AzureCloud

在以下示例中,请将示例参数名称替换成自己的值。 示例参数名称包括 myResourceGroup、mystorageaccount 和 myVM

首先,使用 az group create 创建资源组。 以下示例在“chinaeast” 位置创建名为“myResourceGroup” 的资源组:

az group create --name myResourceGroup --location chinaeast

使用 az network vnet create 创建虚拟网络。 以下示例创建一个名为 myVnet 的虚拟网络和一个名为 mySubnetFrontEnd 的子网:

az network vnet create \
    --resource-group myResourceGroup \
    --name myVnet \
    --address-prefix 10.0.0.0/16 \
    --subnet-name mySubnetFrontEnd \
    --subnet-prefix 10.0.1.0/24

使用 az network vnet subnet create 为后端通信流创建子网。 以下示例创建名为 mySubnetBackEnd 的子网:

az network vnet subnet create \
    --resource-group myResourceGroup \
    --vnet-name myVnet \
    --name mySubnetBackEnd \
    --address-prefix 10.0.2.0/24

使用 az network nsg create 创建网络安全组。 以下示例创建名为“myNetworkSecurityGroup”的网络安全组:

az network nsg create \
    --resource-group myResourceGroup \
    --name myNetworkSecurityGroup

创建和配置多个 NIC

使用 az network nic create 创建两个 NIC。 以下示例创建两个连接到网络安全组的 NIC(名为 myNic1 和 myNic2),其中一个 NIC 连接到每个子网:

az network nic create \
    --resource-group myResourceGroup \
    --name myNic1 \
    --vnet-name myVnet \
    --subnet mySubnetFrontEnd \
    --network-security-group myNetworkSecurityGroup
az network nic create \
    --resource-group myResourceGroup \
    --name myNic2 \
    --vnet-name myVnet \
    --subnet mySubnetBackEnd \
    --network-security-group myNetworkSecurityGroup

创建 VM 并附加 NIC

创建 VM 时,指定使用 --nics 创建的 NIC。 还需要谨慎选择 VM 的大小。 可添加到 VM 的 NIC 数目有限制。 详细了解 Linux VM 大小

使用 az vm create 创建 VM。 以下示例创建一个名为 myVM 的 VM:

az vm create \
    --resource-group myResourceGroup \
    --name myVM \
    --image Ubuntu2204 \
    --size Standard_DS3_v2 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --nics myNic1 myNic2

通过完成为多个 NIC 配置来宾 OS 中的步骤,将路由表添加到来宾 OS。

将 NIC 添加到 VM

之前的步骤创建了具有多个 NIC 的 VM。 还可使用 Azure CLI 将 NIC 添加到现有 VM。 不同的 VM 大小支持不同数目的 NIC,因此请相应地调整 VM 的大小。 如果需要,可调整 VM 的大小

使用 az network nic create 创建另一 NIC。 以下示例创建一个名为 myNic3 的 NIC,该 NIC 连接到后端子网和之前步骤中创建的网络安全组:

az network nic create \
    --resource-group myResourceGroup \
    --name myNic3 \
    --vnet-name myVnet \
    --subnet mySubnetBackEnd \
    --network-security-group myNetworkSecurityGroup

要将 NIC 添加到现有 VM,请先使用 az vm deallocate 解除分配 VM。 以下示例解除分配名为 myVM 的 VM :

az vm deallocate --resource-group myResourceGroup --name myVM

使用 az vm nic add 添加 NIC。 以下示例将 myNic3 添加到 myVM

az vm nic add \
    --resource-group myResourceGroup \
    --vm-name myVM \
    --nics myNic3

使用 az vm start 启动 VM:

az vm start --resource-group myResourceGroup --name myVM

通过完成为多个 NIC 配置来宾 OS 中的步骤,将路由表添加到来宾 OS。

从 VM 中删除 NIC

若要从现有 VM 删除 NIC,请先使用 az vm deallocate 解除分配 VM。 以下示例解除分配名为 myVM 的 VM :

az vm deallocate --resource-group myResourceGroup --name myVM

使用 az vm nic remove 删除 NIC。 以下示例从 myVM 删除 myNic3

az vm nic remove \
    --resource-group myResourceGroup \
    --vm-name myVM \
    --nics myNic3

使用 az vm start 启动 VM:

az vm start --resource-group myResourceGroup --name myVM

使用 Resource Manager 模板创建多个 NIC

Azure 资源管理器模板使用声明性 JSON 文件来定义环境。 可以阅读 Azure 资源管理器概述。 资源管理器模板可让你在部署期间创建资源的多个实例,例如,创建多个 NIC。 使用 copy 指定要创建的实例数:

"copy": {
    "name": "multiplenics"
    "count": "[parameters('count')]"
}

阅读有关使用 copy 创建多个实例的详细信息。

也可以使用 copyIndex() 并在资源名称中追加一个数字,来创建 myNic1myNic2,等等。下面显示了追加索引值的示例:

"name": "[concat('myNic', copyIndex())]",

可以阅读使用 Resource Manager 模板创建多个 NIC 的完整示例。

通过完成为多个 NIC 配置来宾 OS 中的步骤,将路由表添加到来宾 OS。

为多个 NIC 配置来宾 OS

前面的步骤创建了虚拟网络和子网,附加了 NIC,然后创建了 VM。 尚未创建公共 IP 地址,以及允许 SSH 流量的网络安全组规则。 若要为多个 NIC 配置来宾 OS,需要允许远程连接并在 VM 本地运行命令。

若要允许 SSH 流量,请使用 az network nsg rule create 创建网络安全组规则,如下所示:

az network nsg rule create \
    --resource-group myResourceGroup \
    --nsg-name myNetworkSecurityGroup \
    --name allow_ssh \
    --priority 101 \
    --destination-port-ranges 22

使用 az network public-ip create 创建公共 IP 地址,并使用 az network nic ip-config update 将其分配到第一个 NIC:

az network public-ip create --resource-group myResourceGroup --name myPublicIP

az network nic ip-config update \
    --resource-group myResourceGroup \
    --nic-name myNic1 \
    --name ipconfig1 \
    --public-ip-address myPublicIP

若要查看 VM 的公共 IP 地址,请使用 az vm show,如下所示:

az vm show --resource-group myResourceGroup --name myVM -d --query publicIps -o tsv

现在,通过 SSH 连接到 VM 的公共 IP 地址。 上一步骤中提供的默认用户名为 azureuser。 请提供自己的用户名和公共 IP 地址:

ssh azureuser@137.117.58.232

若要向/从辅助网络接口发送数据,必须手动将永久性路由添加到每个辅助网络接口的操作系统。 在本文中,eth1 是辅助接口。 有关将永久性路由添加到操作系统的说明根据分发版的不同而异。 请参阅分发版的文档来获取说明。

将路由添加到操作系统时,网络接口所在的每个子网的网关地址为网络接口所在的子网的第一个地址。 例如,如果为子网分配了范围 10.0.2.0/24 ,则你为路由指定的网关为 10.0.2.1。如果为子网分配了范围 10.0.2.128/25 ,则你为路由指定的网关是 10.0.2.129。 如果希望接口的所有流量通过指定的网关,可为路由目标定义特定的网络,或指定目标 0.0.0.0。 每个子网的网关由虚拟网络管理。

添加辅助接口的路由后,使用 route -n 验证该路由是否包含在路由表中。 以下示例输出适用于其中的两个网络接口已添加到本文所述 VM 的路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.1.1        0.0.0.0         UG    0      0        0 eth0
0.0.0.0         10.0.2.1        0.0.0.0         UG    0      0        0 eth1
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
168.63.129.16   10.0.1.1        255.255.255.255 UGH   0      0        0 eth0
169.254.169.254 10.0.1.1        255.255.255.255 UGH   0      0        0 eth0

重新启动后请再次检查路由表,以确认每次重新启动后,添加的路由是否能够保留。 若要测试连接,可输入以下示例所示的命令,其中,eth1 是辅助网络接口的名称:

ping bing.com -c 4 -I eth1

后续步骤

尝试创建具有多个 NIC 的 VM 时,请查看 Lnux VM 大小。 注意每个 VM 大小支持的 NIC 数目上限。

若要进一步保护 VM,请使用适时 VM 访问。 此功能会视需要打开针对 SSH 流量的网络安全组规则,并根据定义的时间段保持打开。 有关详细信息,请参阅使用恰时功能管理虚拟机访问