创建具有多个网络接口的虚拟机

本页面介绍了如何创建具有多个网络接口的虚拟机实例。

准备工作

在开始之前,请确保您熟悉多个网络接口概览中所述的具有多个网络接口的实例的特性。

IAM 角色

要创建具有多个网络接口的实例,您必须具有以下角色之一:

在不使用共享 VPC 环境的项目中创建和删除具有多个接口的实例和实例模板:如果用户具有 Owner、Editor 或 Compute Instance Admin (v1) 角色,则可以创建具有多个接口的实例,这些接口与属于同一项目的 VPC 网络和子网关联。

在共享 VPC 环境中创建和删除具有多个接口的实例和实例模板:如果用户具有 Owner、Editor 或 Compute Instance Admin (v1) 角色,则可以创建具有多个接口的实例。如果其中任何接口连接到共享 VPC 宿主项目内的子网,则还必须针对整个宿主项目或需要使用的子网具有 Compute Network User 角色 (roles/compute.networkUser)。

如需详细了解权限,请参阅 Compute Engine IAM 文档。

创建具有多个网络接口的虚拟机实例

本部分介绍了如何创建具有多个网络接口(包括 vNIC 和 Dynamic NIC)的实例。如需了解有关创建实例的一般说明,请参阅创建和启动虚拟机实例。

第一个接口始终创建为 nic0,并且始终是默认接口。

控制台

  1. 在 Google Cloud 控制台中,前往创建实例页面。

    转到“创建实例”

  2. 在机器配置窗格中,执行以下操作:

    1. 在名称字段中,输入实例的名称。
    2. 在区域字段中,选择一个区域。
    3. 在可用区字段中,选择一个可用区。
  3. 在导航菜单中,点击网络以查看网络窗格。

  4. 在网络接口部分中,点击网络接口以进行修改。

    1. 对于网络和子网,选择要使用的网络和子网。

      如果您要在该接口上配置 IPv6 地址,请选择已配置 /64 IPv6 地址范围的子网。子网的 IPv6 访问类型决定实例是接收内部 /96 IPv6 地址范围还是外部 /96 IPv6 地址范围。

    2. 为接口的 IP 栈类型选择以下选项之一:

      • IPv4(单栈)
      • IPv4 和 IPv6(双栈)
      • IPv6(单栈)
    3. 对于具有 IPv4 地址的接口,请执行以下操作:

      1. 在主要内部 IPv4 地址字段中,选择以下选项之一:

        • 临时(自动),可自动分配新的临时 IPv4 地址
        • 临时(自定义),可手动指定新的临时 IPv4 地址
        • 列表中的预留静态内部 IPv4 地址
        • 预留静态内部 IPv4 地址,可预留并分配新的静态内部 IPv4 地址
      2. 对于外部 IPv4 地址,选择以下选项之一:

        • 临时,可分配新的临时 IPv4 地址
        • 无,不分配外部 IPv4 地址
        • 列表中的预留静态 IPv4 地址
        • 预留静态外部 IP 地址,可预留并分配新的静态外部 IPv4 地址
      3. 您可以选择为网络接口分配一个或多个别名 IP 范围。如需分配别名 IP 范围,请执行以下操作:

        1. 在别名 IP 范围中,点击 添加 IP 范围。
        2. 在子网范围中,选择要使用的子网主要 IPv4 地址范围或子网次要 IPv4 地址范围。
        3. 对于别名 IP 范围,请以 CIDR 表示法输入 IP 范围。 此范围必须是您所选子网 IP 范围中未使用的子范围。

        如需详细了解如何为虚拟机网络接口分配别名 IP 地址范围,请参阅配置别名 IP 地址范围。

    4. 对于具有 IPv6 地址的接口,请根据连接的子网的访问权限类型执行以下操作:

      1. 对于主要内部 IPv6 地址,选择以下选项之一:
        • 临时(自动),可自动分配新的临时内部 IPv6 地址范围
        • 临时(自定义),可手动指定新的临时内部 IPv6 地址范围
        • 列表中的预留静态内部 IPv6 地址范围
        • 预留静态内部 IPv6 地址,可预留并分配新的静态内部 IPv6 地址范围
      2. 对于外部 IPv6 地址,选择以下选项之一:
        • 临时(自动),可自动分配新的临时外部 IPv6 地址范围
        • 临时(自定义),可手动指定新的临时外部 IPv6 地址范围
        • 列表中的预留静态外部 IPv6 地址范围
        • 预留静态外部 IPv6 地址,可预留并分配新的静态外部 IPv6 地址范围
    5. 如需完成网络接口的修改,请点击完成。

  5. 如需添加其他网络接口,请执行以下操作:

    1. 如需添加 vNIC,请点击添加网络接口,然后输入 vNIC 的详细信息,完成表单。

    2. 如需添加 Dynamic NIC,请点击添加 Dynamic Network Interface,然后执行以下操作:

      1. 在父网络接口字段中,选择要为其创建 Dynamic NIC 的父 vNIC。
      2. 在 VLAN ID 字段中,输入 Dynamic NIC 的 VLAN ID。
      3. 输入Dynamic NIC的其余详细信息,完成表单。
  6. 继续进行实例创建过程。

  7. 点击创建。

gcloud

如需在新实例上创建网络接口,请使用 gcloud compute instances create 命令。

为每个接口添加 --network-interface 标志,后接任意合适的网络键,例如 network、subnet、private-network-ip、address、external-ipv6-address 和 vlan。

添加 vlan 键会创建 Dynamic NIC。如果您创建 Dynamic NIC,还必须在创建实例后按照为 Dynamic NIC 配置客机操作系统中的步骤操作。

如需查看有关如何创建具有多个接口的实例的示例,请参阅示例配置。

此代码段仅展示了 --network-interface 标志,这是您在创建实例时可以指定的诸多可能参数之一。

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --network-interface \
        network=NETWORK_A,subnet=SUBNET_A, \
        stack-type=STACK_TYPE, \
        private-network-ip=INTERNAL_IPV4_ADDRESS, \
        address=EXTERNAL_IPV4_ADDRESS | no-address, \
        internal-ipv6-address=INTERNAL_IPV6_ADDRESS \
    ...
    --network-interface \
        network=NETWORK_B,subnet=SUBNET_B, \
        stack-type=STACK_TYPE, \
        external-ipv6-address=EXTERNAL_IPV6_ADDRESS, \
        external-ipv6-prefix-length=96, \
        ipv6-network-tier=PREMIUM, \
        vlan=VLAN_ID \
    ...

替换以下内容:

  • INSTANCE_NAME:要创建的实例的名称。
  • ZONE:实例创建所在的区域。
  • NETWORK_A、NETWORK_B:接口所连接的网络。
  • SUBNET_A、SUBNET_B:接口所连接的子网。
  • STACK_TYPE:接口的堆栈类型。

    默认值为 IPV4_ONLY。指定 IPV4_IPV6 可配置双栈接口,指定 IPV6_ONLY 可配置仅 IPv6 接口。

  • 适用于具有 IPv4 地址的接口的值:

    • INTERNAL_IPV4_ADDRESS:您希望接口在目标子网中具有的内部 IPv4 地址。如果只希望具有分配的有效地址,请忽略。
    • EXTERNAL_IPV4_ADDRESS:接口的外部 IPv4 地址。

      您之前必须已预留外部 IPv4 地址。如果您不希望接口具有外部 IP 地址,请指定“no-address”,而不是 address=EXTERNAL_IPV4_ADDRESS。如果您希望接口接收临时外部 IP 地址,请指定 address=''。

  • 适用于具有 IPv6 地址的接口的值:

    • INTERNAL_IPV6_ADDRESS:您希望接口在目标子网中具有的内部 IPv6 地址范围。如果未指定,Google Cloud 会自动从子网分配内部 IPv6 地址范围。
    • EXTERNAL_IPV6_ADDRESS:您希望接口在目标子网中具有的外部 IPv6 地址范围。如果未指定,Google Cloud 会自动从子网分配外部 IPv6 地址范围。
  • VLAN_ID:VLAN ID。指定 VLAN ID 会将网络接口配置为 Dynamic NIC。您必须在命令中将 Dynamic NIC 放在其父级 vNIC 后面。

API

使用 instances.insert 方法创建具有多个网络接口的实例。

添加 vlan 字段会创建 Dynamic NIC。如果您创建 Dynamic NIC,还必须在创建实例后按照为 Dynamic NIC 配置客机操作系统中的步骤操作。

请参见以下示例:

  • 如需创建仅具有内部 IPv4 地址的实例,请执行以下操作:

    POST https://compute./compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "networkIP": "IPV4_ADDRESS_A",
        "subnetwork": "regions/REGION/subnetworks/SUBNET_A"
      },
      {
        "networkIP": "IPV4_ADDRESS_B",
        "subnetwork": "regions/REGION/subnetworks/SUBNET_B",
        "vlan": "VLAN_ID"
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

    替换以下内容:

    • PROJECT_ID:包含实例的项目的 ID。
    • ZONE:包含实例的可用区。
    • IPV4_ADDRESS_A、IPV4_ADDRESS_B:要分配给每个网络接口的内部 IPv4 地址。
    • REGION:包含实例的区域。
    • SUBNET_A, SUBNET_B:每个网络接口所在的子网。
    • VLAN_ID:VLAN ID。指定 VLAN ID 会将网络接口配置为 Dynamic NIC。您必须在请求中将 Dynamic NIC 放在其父级 vNIC 后面。
  • 如需创建同时具有内部 IPv4 地址和内部 IPv6 地址的实例,请执行以下操作:

    POST https://compute./compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET_A",
        "ipv6Address": "IPV6_ADDRESS_A",
        "internalIpv6PrefixLength": 96,
        "stackType": IPV4_IPV6,
        "ipv6AccessType": INTERNAL
      },
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET_B",
        "ipv6Address": "IPV6_ADDRESS_B",
        "internalIpv6PrefixLength": 96,
        "stackType": IPV4_IPV6,
        "ipv6AccessType": INTERNAL,
        "vlan": "VLAN_ID"
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

    替换以下内容:

    • PROJECT_ID:包含实例的项目的 ID。
    • ZONE:包含实例的可用区。
    • REGION:包含实例的区域。
    • SUBNET_A, SUBNET_B:每个网络接口所在的子网。
    • IPV6_ADDRESS_A, IPV6_ADDRESS_B:您希望接口在目标子网中具有的内部 IPv6 地址范围。如果未指定,Google Cloud 会自动从子网分配内部 IPv6 地址范围。
    • VLAN_ID:VLAN ID。指定 VLAN ID 会将网络接口配置为 Dynamic NIC。您必须将 Dynamic NIC 放在其父级 vNIC 后面。
  • 如需创建仅具有内部 IPv6 地址的实例,请执行以下操作:

    POST https://compute./compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET_A",
        "ipv6Address": "IPV6_ADDRESS_A",
        "internalIpv6PrefixLength": 96,
        "stackType": IPV6_ONLY,
        "ipv6AccessType": INTERNAL
      },
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET_B",
        "ipv6Address": "IPV6_ADDRESS_B",
        "internalIpv6PrefixLength": 96,
        "stackType": IPV6_ONLY,
        "ipv6AccessType": INTERNAL,
        "vlan": "VLAN_ID"
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

    替换以下内容:

    • PROJECT_ID:包含实例的项目的 ID。
    • ZONE:包含实例的可用区。
    • REGION:包含实例的区域。
    • SUBNET_A, SUBNET_B:每个网络接口所在的子网。
    • IPV6_ADDRESS_A, IPV6_ADDRESS_B:您希望接口在目标子网中具有的内部 IPv6 地址范围。如果未指定,Google Cloud 会自动从子网分配内部 IPv6 地址范围。
    • VLAN_ID:VLAN ID。指定 VLAN ID 会将网络接口配置为 Dynamic NIC。您必须将 Dynamic NIC 放在其父级 vNIC 后面。

配置示例

以下部分介绍了如何创建具有多个接口的实例。

配置多个 vNIC 和 Dynamic NIC

以下示例命令会创建一个具有以下网络接口的实例:

  • 一个名为 nic0 的 vNIC,它是以下内容的父级:
    • 一个名为 nic0.2 的 Dynamic NIC
  • 一个名为 nic1 的 vNIC,它是以下内容的父级:
    • 一个名为 nic1.4 的 Dynamic NIC
    • 一个名为 nic1.5 的 Dynamic NIC
gcloud compute instances create vm1 \
    --zone zone-a \
    --network-interface=network=network-a,subnet=subnet-a \
    --network-interface=network=network-b,subnet=subnet-b,vlan=2 \
    --network-interface=network=network-c,subnet=subnet-c \
    --network-interface=network=network-d,subnet=subnet-d,vlan=4 \
    --network-interface=network=network-e,subnet=subnet-e,vlan=5

创建具有 Dynamic NIC 的实例后,您还必须为 Dynamic NIC 配置客机操作系统。

配置多个仅具有 IPv4 地址的网络接口

以下示例命令会创建一个具有三个网络接口的实例。

gcloud compute instances create vm1 --machine-type=n1-standard-4 \
    --network-interface '' \
    --network-interface network=net1,subnet=subnet-a,private-network-ip=10.10.10.2,address=EXTERNAL_IPV4_ADDRESS \
    --network-interface network=net2,subnet=subnet-b,private-network-ip=10.10.20.2,no-address

这些接口的创建方式如下:

  • nic0 是使用默认设置创建的。该接口挂接到默认 VPC 网络中的子网,具有自动分配的内部 IP 地址和临时外部 IP 地址。

  • nic1 连接到网络 net1 中的子网 subnet-a,具有内部 IPv4 地址 10.10.10.2 和静态外部 IPv4 地址 EXTERNAL_IPV4_ADDRESS。

  • nic2 连接到网络 net2 中的子网 subnet-b,具有内部 IPv4 地址 10.10.20.2 且没有外部 IP 地址。

如需了解 gcloud compute instances create 命令和 --network-interface 标志的完整说明,请参阅该命令的相关文档。

您可以使用您添加的网络接口中的 IP 地址来设置 DNS 转发。如需详细了解如何配置 Cloud DNS 转发地区,请参阅转发地区。

配置多个同时具有 IPv4 和 IPv6 地址的网络接口

以下示例命令会创建一个具有两个网络接口的双栈实例。

gcloud compute instances create vm1 \
    --network-interface network=dual-int,subnet=int-subnet,stack-type=IPV4_IPV6 \
    --network-interface network=dual-ext,subnet=ext-subnet,stack-type=IPV4_IPV6,ipv6-network-tier=PREMIUM \
    --machine-type=n1-standard-4 --zone=ZONE_A

这些接口的创建方式如下:

  • nic0 连接到网络 dual-int 中的子网 int-subnet,具有临时内部 IPv4 地址和临时内部 IPv6 地址范围。

  • nic1 连接到网络 dual-ext 中的子网 ext-subnet,具有临时内部 IPv4 地址和临时外部 IPv6 地址范围。

配置多个仅具有 IPv6 地址的网络接口

以下示例命令会创建一个具有三个网络接口的仅限 IPv6 的实例。

gcloud compute instances create vm1 \
    --network-interface network=ipv6-only-int-a,subnet=int-subnet-a,stack-type=IPV6_ONLY \
    --network-interface network=ipv6-only-int-b,subnet=int-subnet-b,stack-type=IPV6_ONLY,internal-ipv6-address=fd20:db8:0:0:1:0:: \
    --network-interface network=ipv6-only-ext,subnet=ext-subnet,stack-type=IPV6_ONLY,ipv6-network-tier=PREMIUM,external-ipv6-address=EXTERNAL_IPV6_ADDRESS \
    --machine-type=n1-standard-4 --zone=us-west2-a

这些接口的创建方式如下:

  • nic0 连接到网络 ipv6-only-int-a 中的子网 int-subnet-a,具有自动分配的临时内部 IPv6 地址。

  • nic1 连接到网络 ipv6-only-int-b 中的子网 int-subnet-b,具有自定义临时内部 IPv6 地址范围 fd20:db8:0:0:1:0::/96。

  • nic2 连接到网络 ipv6-only-ext 中的子网 ext-subnet,具有静态外部 IPv6 地址范围 EXTERNAL_IPV6_ADDRESS。

为实例组配置多个网络接口

您可以在非代管式实例组和代管式实例组中使用具有多个网络接口的实例。

对于非托管式实例组,请分别创建每个实例,确保每个实例的 nic0 网络接口连接到同一子网。然后,将这些实例添加到非托管式实例组。

如需为代管式实例组配置多个网络接口,您必须为每个实例指定网络配置,即在实例模板中为每个实例设置一次 --network-interface 标志。以下示例将创建一个具有三个网络接口的实例模板:

gcloud compute instance-templates create template-1 \
    --network-interface subnet=net0-subnet-a \
    --network-interface subnet=net1-subnet-b,no-address \
    --network-interface subnet=net2-subnet-c,no-address \
    --region REGION_A

由于一个项目中每个区域的子网名称都必须唯一,因此按名称指定子网会将每个接口与 VPC 网络隐式关联。每个接口都必须使用唯一 VPC 网络中的子网:

  • nic0 使用 net0-subnet-a 子网
  • nic1 使用 net1-subnet-b 子网
  • nic2 使用 net2-subnet-c 子网

--network-interface 标志中的 no-address 选项表示接口在没有外部 IPv4 地址的情况下进行了配置。内部 IP 地址来自接口所使用的子网。如需了解标志和语法的完整信息,请参阅 instance-templates create 命令的 --network-interface 标志。

后续步骤