向实例添加 Dynamic NIC

本页面介绍了如何向现有虚拟机实例添加 Dynamic Network Interface (NIC)。

如需了解如何创建新实例,请参阅创建具有多个网络接口的虚拟机

准备工作

在向实例添加 Dynamic NIC 之前,请执行以下操作:

添加 Dynamic NIC

本部分介绍了如何向实例添加 Dynamic NIC。

添加 Dynamic NIC 时,您可能会观察到传播延迟。此延迟通常为几秒钟,但在极少数情况下,可能会达到一分钟。

gcloud

如需向现有实例添加 Dynamic NIC,请使用 gcloud beta compute instances network-interfaces add 命令

gcloud beta compute instances network-interfaces add INSTANCE_NAME \
   --zone=ZONE \
   --vlan=VLAN_ID \
   --parent-nic-name=PARENT_VNIC_NAME \
   --network=NETWORK \
   --subnetwork=SUBNET

替换以下内容:

  • INSTANCE_NAME:要向其中添加 Dynamic NIC 的实例的名称
  • ZONE:实例的可用区
  • VLAN_ID:Dynamic NIC 的 VLAN ID
  • PARENT_VNIC_NAME:父级 vNIC 的名称,例如 nic0
  • NETWORK:Dynamic NIC 所连接的网络
  • SUBNET:Dynamic NIC 所连接的子网

或者,您也可以在更新实例属性时向实例添加 Dynamic NIC。如需了解详情,请参阅更新实例属性

如需向托管式实例组 (MIG) 添加 Dynamic NIC,请参阅 gcloud beta compute instance-groups managed set-instance-template 命令

API

如需向现有实例添加 Dynamic NIC,请使用 instances.addNetworkInterface 方法

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/addNetworkInterface
{
  "subnetwork": "regions/REGION/subnetworks/SUBNET",
  "parentNicName": "PARENT_VNIC_NAME",
  "vlan": "VLAN_ID"
}

替换以下内容:

  • PROJECT_ID:包含实例的项目的 ID。
  • ZONE:包含实例的可用区
  • INSTANCE_NAME:要向其中添加 Dynamic NIC 的实例的名称
  • REGION:包含实例的区域
  • SUBNET:Dynamic NIC 所连接的子网
  • PARENT_VNIC_NAME:父级 vNIC 的名称,例如 nic0
  • VLAN_ID:Dynamic NIC 的 VLAN ID

或者,您也可以在更新实例属性时向实例添加 Dynamic NIC。如需了解详情,请参阅更新实例属性

如需向托管式实例组 (MIG) 添加 Dynamic NIC,请参阅 instanceGroupManagers.setInstanceTemplate 方法

为 Dynamic NIC 配置客机操作系统

本部分介绍了如何完成在向新实例或现有实例添加 Dynamic NIC 时所需的其他客机操作系统配置。

请从以下配置选项中选择一项:

配置选项 说明
配置 Dynamic NIC 的自动管理(推荐)

将 Google 客机代理用于 Dynamic NIC 的自动管理。

客机环境包含 Google 客机代理,该代理可在 Google Cloud 操作系统映像的 Linux 发行版上的根命名空间中自动安装和管理 VLAN 接口。Google 客机代理版本 20250204.02 及更高版本支持此功能。

手动配置客机操作系统

在客机操作系统中运行命令以安装 Dynamic NIC。

如果您使用此选项,则配置在实例重启后不会自动保留。如需使配置在重启后保留,请使用为您的 Linux 发行版配置永久性网络接口的推荐方法。例如,请参阅 NetworkConfiguration(适用于 Debian)和接口(适用于 Ubuntu)。

配置 Dynamic NIC 的自动管理

本部分介绍了如何使用 Google 客机代理配置 Dynamic NIC 的自动管理。

您只需为每个实例完成这些步骤一次。如果您向已完成这些步骤的某个实例添加了 Dynamic NIC,则无需重复执行这些步骤。

如需配置 Dynamic NIC 的自动管理,请执行以下操作:

  1. 使用 SSH 连接到实例

  2. 确保实例运行的 Google 客机代理为版本 20250204.02 或更高版本:

    1. 如需确定实例是否在运行 Google 客机代理,请运行为客机环境安装的软件包中列出的相应命令。

      1. 如果您的实例未运行 Google 客机代理,请安装客机环境

      2. 如果您的实例在运行 Google 客机代理,请更新客机环境

      安装或更新客机环境可确保您拥有最新版本的 Google 客机代理。您可以按照验证客机环境中的步骤确认版本。

  3. 配置 Google 客机代理以管理 Dynamic NIC:

    1. 打开或创建客机环境配置文件。

      edit /etc/default/instance_configs.cfg
      
    2. 将以下内容添加到配置文件中,然后保存更改并退出编辑器。

      [NetworkInterfaces]
      vlan_setup_enabled = true
      manage_primary_nic = true
      

      如需了解这些设置,请参阅以下内容:

      • vlan_setup_enabled = true:将 Google 客机代理配置为安装和管理 Dynamic NIC
      • manage_primary_nic = true:Google 客机代理管理在 nic0 下创建的 Dynamic NIC 所需的额外设置

      如需详细了解如何修改客机代理配置文件,请参阅 Google 客机代理文档中的配置部分。

    3. 通过运行以下命令重启客机代理。或者,您可以重启实例。

      sudo systemctl restart google-guest-agent.service
      
  4. 列出实例上的网络接口,以查看 Google 客机代理是否安装了 Dynamic NIC。

    例如,以下命令会显示 Dynamic NIC 的名称(例如 a-gcp.ens4.11),其 VLAN ID 为 11,是作为 ens4 接口的子级创建的。

    sudo ip -d addr
    

手动配置客机操作系统

如需在实例的客机操作系统中手动配置 Dynamic NIC,请执行以下操作:

  1. 使用 SSH 连接到实例

  2. 如果实例在运行 Google 客机代理,请停用 Dynamic NIC 的自动管理。您可以使用为客机环境安装的软件包中列出的相应命令来确定实例是否在运行 Google 客机代理。

    如需停用 Dynamic NIC 的自动管理,请执行以下操作:

    1. 打开或创建客机环境配置文件。

        edit /etc/default/instance_configs.cfg
        

    2. 将以下内容添加到配置文件中,然后保存更改并退出编辑器。

      [NetworkInterfaces]
      vlan_setup_enabled = false
      manage_primary_nic = false
      

      如需详细了解如何修改客机代理配置文件,请参阅 Google 客机代理文档中的配置部分。

    3. 通过运行以下命令重启客机代理。或者,您可以重启实例。

      sudo systemctl restart google-guest-agent.service
      
  3. 对于您创建的每个 Dynamic NIC,请执行以下操作:

    1. 获取父级 vNIC 的 MAC 地址。如需查找 MAC 地址,请通过运行以下命令来查询元数据服务器:

      curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/VNIC_NUMBER/mac -H "Metadata-Flavor: Google"
      

      VNIC_NUMBER 替换为父级 vNIC 的编号。例如,0 表示 nic01 表示 nic1

    2. 在实例的客机操作系统中配置子接口。例如,在 Debian 虚拟机上运行以下命令:

      sudo modprobe 8021q
      sudo ip link add link VNIC_NAME name VNIC_NAME.VLAN_ID type vlan id VLAN_ID
      sudo ip addr add IP_ADDRESS dev VNIC_NAME.VLAN_ID
      sudo ip link set dev VNIC_NAME.VLAN_ID address MAC_ADDRESS
      sudo ip link set up VNIC_NAME.VLAN_ID
      

      替换以下内容:

      • VNIC_NAME:操作系统分配的父级 vNIC 名称,例如 eth1ens4
      • IP_ADDRESS:您创建的 Dynamic NIC 的 IP 地址
      • VLAN_ID:您为 Dynamic NIC 分配的 VLAN ID
      • MAC_ADDRESS:您在上一步中获得的 MAC 地址