多个网络接口
本页面简要介绍了 Compute Engine 虚拟机实例的多个网络接口。具有多个网络接口的实例称为多 NIC 实例。
实例始终至少具有一个虚拟网络接口 (vNIC)。根据机器类型,您可以配置其他网络接口。
使用场景
多 NIC 实例适用于以下场景:
连接到单独 VPC 网络中的资源:多 NIC 实例可以连接到位于不同 VPC 网络(未通过 VPC 网络对等互连或 Network Connectivity Center 相互连接)中的资源。
由于多 NIC 实例的每个接口都在单独的 VPC 网络中,因此您可以将每个接口用于唯一的用途。例如,您可以使用某些接口在承载生产流量的 VPC 网络之间路由数据包,并将另一个接口用于管理或配置用途。
在每个多 NIC 实例的客机操作系统中,您必须配置路由政策和本地路由表。
在 VPC 网络之间路由数据包:多 NIC 实例可用作路由的下一个跃点,以连接两个或更多 VPC 网络。
在多 NIC 实例的客机操作系统中运行的软件可以执行数据包检查、网络地址转换 (NAT) 或其他网络安全功能。
使用多 NIC 实例连接 VPC 网络时,最佳实践是配置两个或更多个多 NIC 实例,并将它们用作每个 VPC 网络中内部直通式网络负载均衡器的后端。如需了解详情,请参阅“内部直通式网络负载均衡器作为下一个跃点”文档中的应用场景。
您还可以使用具有 Private Service Connect 接口的多 NIC 实例来连接不同项目中的服务提供方和使用方网络。
网络接口类型
Google Cloud 支持以下类型的网络接口:
vNIC:Compute Engine 实例的虚拟网络接口。每个实例必须至少有一个 vNIC。常规 VPC 网络中的 vNIC 可以是
GVNIC
、VIRTIO_NET
或IDPF
。您只能在创建实例时配置 vNIC。Dynamic NIC(预览版):父级 vNIC 的子级接口。您可以在创建实例时配置 Dynamic NIC,也可以在以后添加。如需了解详情,请参阅 Dynamic NIC。
您还可以使用包含 RDMA 网络接口 (MRDMA
) 的机器类型配置多 NIC 实例,这类接口必须连接到采用 RDMA 网络配置文件的 VPC 网络。采用 RDMA 网络配置文件的 VPC 网络不支持其他网络接口类型(包括 Dynamic NIC)。
规格
以下规范适用于具有多个网络接口的实例:
实例和网络接口:每个实例都有一个
nic0
接口。网络接口数上限因实例的机器类型而异。- 每个接口都有关联的栈类型,该类型决定了支持的子网栈类型和 IP 地址版本。如需了解详情,请参阅栈类型和 IP 地址。
用于每个网络接口的唯一网络:除了使用 RDMA 网络配置文件创建的 VPC 网络之外,每个网络接口都必须使用唯一 VPC 网络中的子网。
对于使用 RDMA 网络配置文件创建的 VPC 网络,多个 RDMA NIC 可以使用相同的 VPC 网络,只要每个 RDMA NIC 使用唯一的子网即可。
必须先存在 VPC 网络和子网,然后您才能创建其网络接口使用相应网络和子网的实例。如需详细了解如何创建网络和子网,请参阅创建和管理 VPC 网络。
实例和子网的项目:对于独立项目中的多 NIC 实例,每个网络接口都必须使用与实例位于同一项目中的子网。
如需了解共享 VPC 宿主项目或服务项目中的实例,请参阅共享 VPC。
Private Service Connect 接口可让多 NIC 实例在不同项目的子网中拥有网络接口。如需了解详情,请参阅网络连接简介。
IP 转发、MTU 和路由注意事项:多 NIC 实例需要针对以下实例和接口专属配置选项进行仔细规划:
IP 转发选项可按实例进行配置,并应用于所有网络接口。如需了解详情,请参阅为实例启用 IP 转发。
每个网络接口都可以使用唯一的最大传输单元 (MTU),与关联 VPC 网络的 MTU 相匹配。如需了解详情,请参阅最大传输单元。
每个实例都使用 RFC 3442 中定义的 DHCP 选项 121 接收默认路由。默认路由与
nic0
相关联。除非手动配置,否则从某个实例流向任何目的地(直接关联的子网除外)的所有流量都将使用nic0
上的默认路由离开该实例。在 Linux 系统上,您可以使用
/etc/iproute2/rt_tables
文件以及ip rule
和ip route
命令在客户机操作系统中配置自定义规则和路由。如需了解详情,请参阅客户机操作系统文档。如需查看示例,请参阅以下教程:为其他接口配置路由。
Dynamic NIC
Dynamic NIC 适用于以下场景:
您需要对现有实例添加或移除网络接口。添加或移除 Dynamic NIC 不需要重启或重新创建实例。
您需要更多网络接口。 Google Cloud 中大多数机器类型的 vNIC 数量上限为 10 个;不过,您可以使用 Dynamic NIC 配置总共多达 16 个接口。如需了解详情,请参阅网络接口数量上限。
您需要配置只有一个 vNIC 的多 NIC Compute Engine 裸金属实例。
Dynamic NIC 的属性
请参阅以下有关 Dynamic NIC 属性的信息:
Dynamic NIC 是使用 IEEE 802.1Q 标准数据包格式的 VLAN 接口。请参阅以下注意事项:
- Dynamic NIC 的 VLAN ID 必须是介于 2 到 255 之间的整数。
- Dynamic NIC 的 VLAN ID 在父级 vNIC 中必须是唯一的。 不过,属于不同父级 vNIC 的 Dynamic NIC 可以使用相同的 VLAN ID。
Google Cloud 将以下格式用于 Dynamic NIC 的名称:
nicNUMBER.VLAN_ID
,其中nicNUMBER
是父级 vNIC 的名称,例如nic0
。VLAN_ID
是您设置的 VLAN ID,例如4
。
一个 Dynamic NIC 名称示例为
nic0.4
。使用 Dynamic NIC 创建实例或向现有实例添加 Dynamic NIC 需要执行额外的步骤,以在客机操作系统中安装和管理相应的 VLAN 接口。您可以使用以下方法之一:
- 使用 Google 客机代理配置 Dynamic NIC 的自动管理。
- 手动配置客机操作系统。
如需了解详情,请参阅为 Dynamic NIC 配置客机操作系统。
Dynamic NIC 共享其父级 vNIC 的带宽,并且父级 vNIC 内没有流量隔离。为防止任何网络接口占用所有带宽,您必须在客机操作系统中创建特定于应用的流量政策,以便对流量进行优先级排序或分发,例如使用 Linux 流量控制 (TC)。
Dynamic NIC 与其父级 vNIC 共享相同的接收和传输队列。
Dynamic NIC 的限制
请参阅 Dynamic NIC 的以下限制:
Dynamic NIC 创建后,您无法修改其以下属性:
- Dynamic NIC 所属的父级 vNIC。
- Dynamic NIC 的 VLAN ID。
Dynamic NIC 不支持以下各项:
- 适用于 Google Cloud Armor 的高级网络 DDoS 攻击防护和网络边缘安全政策
- MIG 的每个实例配置
- 仅限 IPv6 的接口(预览版)
- 依赖于数据包拦截的功能,例如防火墙端点
- Windows 操作系统 (OS)
如果 Dynamic NIC 的父级 vNIC 类型为
GVNIC
,则可能会在使用某些自定义 MTU 大小时出现丟包问题。为避免丟包,请勿使用以下 MTU 大小:1986 字节、3986 字节、5986 字节和 7986 字节。对于第三代虚拟机,VLAN ID 为
255
的 Dynamic NIC 无法访问元数据服务器 IP 地址。如果您需要访问元数据服务器,请确保使用其他 VLAN ID。对于第三代虚拟机,删除和添加具有相同 VLAN ID 的 Dynamic NIC 可能会允许跨不同 VPC 网络进行未经授权的访问。如需了解详情,请参阅已知问题。
栈类型和 IP 地址
创建 vNIC 时,您需要指定以下接口栈类型之一:
- 仅限 IPv4
- 双栈
仅限 IPv6(预览版)
下表介绍了每种接口栈类型支持的子网栈类型和 IP 地址详细信息:
接口 | 仅限 IPv4 的子网 | 双栈子网 | 仅限 IPv6 的子网(预览版) | IP 地址详细信息 |
---|---|---|---|---|
仅 IPv4(单栈) | 仅限 IPv4 地址。 请参阅 IPv4 地址详细信息。 | |||
IPv4 和 IPv6(双栈) | IPv4 和 IPv6 地址。请参阅 IPv4 地址详细信息和 IPv6 地址详细信息 | |||
仅限 IPv6(单栈)(预览版) | 仅限 IPv6 地址。请参阅 IPv6 地址详细信息。 |
更改网络接口栈类型
您可以按如下所示更改网络接口的栈类型:
如果接口的子网是双栈子网,或者您停止实例并将接口分配给双栈子网,则可以将仅限 IPv4 的接口转换为双栈接口。
您可以将双栈接口转换为仅限 IPv4 的接口。
您无法更改仅限 IPv6 的接口的栈类型。仅当创建实例时,才支持仅限 IPv6 的接口(预览版)。
IPv4 地址详细信息
每个仅限 IPv4 的网络接口或双栈网络接口都会收到一个主要内部 IPv4 地址。每个接口可选择支持别名 IP 范围和外部 IPv4 地址。以下是 IPv4 规范和要求:
主要内部 IPv4 地址:Compute Engine 会从接口子网的主要 IPv4 地址范围为网络接口分配主要内部 IPv4 地址。主要内部 IPv4 地址通过 DHCP 进行分配。
您可以通过配置静态内部 IPv4 地址或指定自定义临时内部 IPv4 地址来控制所分配的主要内部 IPv4 地址。
在 VPC 网络中,每个虚拟机网络接口的主要内部 IPv4 地址都是唯一的。
别名 IP 范围:您可以选择为接口分配一个或多个别名 IP 范围。每个别名 IP 范围可以来自接口子网的主要 IPv4 地址范围或次要 IPv4 地址范围。
- 在 VPC 网络中,每个接口的别名 IP 范围都必须是唯一的。
外部 IPv4 地址:您可以选择为接口分配临时或预留外部 IPv4 地址。 Google Cloud 会确保每个外部 IPv4 地址的唯一性。
IPv6 地址详细信息
Compute Engine 会为每个双栈网络接口或仅限 IPv6 的网络接口(预览版)分配一个来自接口子网的 /64
IPv6 地址范围的 /96
IPv6 地址范围:
/96
IPv6 地址范围是内部还是外部取决于接口子网的 IPv6 访问权限类型。 Google Cloud 会确保每个内部和外部 IPv6 地址范围的唯一性。如需了解详情,请参阅 IPv6 规范。- 如果实例同时需要内部 IPv6 地址范围和外部 IPv6 地址范围:您必须配置两个双栈接口、两个仅限 IPv6 的接口,或者一个双栈接口和一个仅限 IPv6 的接口。一个接口使用的子网必须具有外部 IPv6 地址范围,另一个接口使用的子网必须具有内部 IPv6 地址范围。
第一个 IPv6 地址 (
/128
) 通过 DHCP 在接口上进行配置。如需了解详情,请参阅 IPv6 地址分配。您可以通过配置静态内部或外部 IPv6 地址范围来控制所分配的
/96
IPv6 地址范围。对于内部 IPv6 地址,您可以指定自定义临时内部 IPv6 地址。
如果您使用 IPv6 地址将实例连接到多个网络,请安装 google-guest-agent
版本 20220603.00 或更高版本。如需了解详情,请参阅我无法连接到次要接口的 IPv6 地址。
网络接口数上限
对于大多数机器类型,您可以附加到实例的网络接口数量上限会随着 vCPU 数量而扩缩,如下表所述。
以下是特定于机器的例外情况:
Compute Engine 裸金属实例支持单个 vNIC。
某些加速器优化机器类型(例如 A3、A4 和 A4X)的 vNIC 数量上限有所不同。如需了解详情,请参阅加速器优化机器家族。
接口数量上限
您可以参照下表,确定可以将多少个网络接口附加到一个实例。
vCPU 的数量 | vNIC 数量上限 | Dynamic NIC 数量上限 | 网络接口数量上限 (vNIC + Dynamic NIC) |
---|---|---|---|
2 个或更少 | 2 个 | 1 个 | 2 个 |
4 | 4 | 3 | 4 |
6 | 6 | 5 | 6 |
8 | 8 | 7 | 8 |
10 | 10 | 9 | 10 |
12 | 10 | 10 | 11 |
14 | 10 | 11 | 12 |
16 | 10 | 12 | 13 |
18 | 10 | 13 | 14 |
20 | 10 | 14 | 15 |
22 个或更多 | 10 | 15 | 16 |
参考公式
下表提供了用于为实例计算网络接口数量上限的公式。公式取决于 vCPU 的数量。
vCPU 数量 (X) | vNIC 数量上限 | Dynamic NIC 数量上限 | 网络接口数量上限 (vNIC + Dynamic NIC) |
---|---|---|---|
X=1 |
2 |
1 |
2 |
2 ≤ X ≤ 10 |
X |
(X-1) |
X |
X ≥ 12 |
10 |
min(15, (X-10)/2 + 9) |
min(16, (X-10)/2 + 10) |
Dynamic NIC 分布示例
您无需在 vNIC 之间均匀分布 Dynamic NIC。不过,您可能希望实现均匀分布,因为 Dynamic NIC 共享其父级 vNIC 的带宽。
一个实例必须至少具有一个 vNIC。例如,具有 2 个 vCPU 的实例可以具有以下配置之一:
- 1 个 vNIC
- 2 个 vNIC
- 1 个 vNIC 和 1 个 Dynamic NIC
下表提供了一些配置示例,这些配置在 vNIC 之间均匀分布 Dynamic NIC,同时对给定数量的 vCPU 使用最大数量的网络接口。
2 个 vCPU、2 个 NIC
下表针对具有 2 个 vCPU 的实例提供了一些示例,显示了对于给定数量的 vNIC 可以具有多少个 Dynamic NIC。
vCPU 的数量 | vNIC 的数量 | 每个 vNIC 的 Dynamic NIC 数量 | 网络接口总数(vNIC + Dynamic NIC) |
---|---|---|---|
2 个 | 1 个 | 1 个 | 2 个 |
2 个 | 0 |
4 个 vCPU、4 个 NIC
下表针对具有 4 个 vCPU 的实例提供了一些示例,显示了对于给定数量的 vNIC 可以具有多少个 Dynamic NIC。
vCPU 的数量 | vNIC 的数量 | 每个 vNIC 的 Dynamic NIC 数量 | 网络接口总数(vNIC + Dynamic NIC) |
---|---|---|---|
4 | 1 个 | 3 | 4 |
2 个 | 1 个 | ||
4 | 0 |
8 个 vCPU、8 个 NIC
下表针对具有 8 个 vCPU 的实例提供了一些示例,显示了对于给定数量的 vNIC 可以具有多少个 Dynamic NIC。
vCPU 的数量 | vNIC 的数量 | 每个 vNIC 的 Dynamic NIC 数量 | 网络接口总数(vNIC + Dynamic NIC) |
---|---|---|---|
8 | 1 个 | 7 | 8 |
2 个 | 3 | ||
4 | 1 个 | ||
8 | 0 |
14 个 vCPU、12 个 NIC
下表针对具有 12 个 vCPU 的实例提供了一些示例,显示了对于给定数量的 vNIC 可以具有多少个 Dynamic NIC。
vCPU 的数量 | vNIC 的数量 | 每个 vNIC 的 Dynamic NIC 数量 | 网络接口总数(vNIC + Dynamic NIC) |
---|---|---|---|
14 | 1 个 | 11 | 12 |
2 个 | 5 | ||
4 | 2 个 | ||
6 | 1 个 |
22 个 vCPU、16 个 NIC
下表针对具有 22 个 vCPU 的实例提供了一些示例,显示了对于给定数量的 vNIC 可以具有多少个 Dynamic NIC。
vCPU 的数量 | vNIC 的数量 | 每个 vNIC 的 Dynamic NIC 数量 | 网络接口总数(vNIC + Dynamic NIC) |
---|---|---|---|
22 | 1 个 | 15 | 16 |
2 个 | 7 | ||
4 | 3 | ||
8 | 1 个 |
产品交互
本部分介绍了多 NIC 实例与 Google Cloud中的其他产品和功能之间的交互。
共享 VPC
除了 Private Service Connect 接口之外,共享 VPC 宿主项目或服务项目中的多 NIC 实例的子网和项目关系如下所示:
位于共享 VPC 宿主项目中的多 NIC 实例的每个网络接口都必须使用宿主项目中共享 VPC 网络的子网。
位于共享 VPC 服务项目中的多 NIC 实例的每个网络接口都可以使用以下任一项:
- 服务项目中 VPC 网络的子网。
- 宿主项目中共享 VPC 网络的子网。
如需详细了解共享 VPC,请参阅:
Compute Engine 内部 DNS
Compute Engine 仅会为实例的 nic0
网络接口的主要内部 IPv4 地址创建内部 DNS 名称 A 和 PTR 记录。Compute Engine 不会为与 nic0
以外的网络接口关联的任何 IPv4 或 IPv6 地址创建内部 DNS 记录。
如需了解详情,请参阅 Compute Engine 内部 DNS。
静态路由
可以使用网络标记将静态路由的范围限定为特定实例。当网络标记与实例相关联时,标记会应用于实例的所有网络接口。因此,对实例添加或移除网络标记可能会更改应用于任何实例网络接口的静态路由。
负载均衡器
实例组后端和可用区级 NEG 后端各有一个关联的 VPC 网络,如下所示:
对于托管式实例组 (MIG),实例组的 VPC 网络是分配给实例模板中的
nic0
接口的 VPC 网络。对于非托管式实例组,实例组的 VPC 网络是您添加到非托管式实例组的第一个实例的
nic0
网络接口所使用的 VPC 网络。
下表列出了哪些后端支持将连接或请求分发到任何网络接口。
负载均衡器 | 实例组 | GCE_VM_IP NEG |
GCE_VM_IP_PORT NEG |
---|---|---|---|
基于后端服务的外部直通式网络负载均衡器 后端服务未与 VPC 网络相关联。如需了解详情,请参阅后端服务和 VPC 网络。 |
仅限 nic0 |
任何 NIC | 不适用 |
内部直通式网络负载均衡器 后端服务与 VPC 网络相关联。如需了解详情,请参阅后端服务网络规范和后端服务网络规则。 |
任何 NIC | 任何 NIC | 不适用 |
外部代理网络负载均衡器 如需详细了解后端服务和网络要求,请参阅后端和 VPC 网络。 |
仅限 nic0 |
不适用 | 任何 NIC |
内部代理网络负载均衡器 如需详细了解后端服务和网络要求,请参阅后端和 VPC 网络。 |
仅限 nic0 |
不适用 | 任何 NIC |
外部应用负载均衡器 如需详细了解后端服务和网络要求,请参阅后端和 VPC 网络。 |
仅限 nic0 |
不适用 | 任何 NIC |
内部应用负载均衡器 如需详细了解后端服务和网络要求,请参阅后端和 VPC 网络。 |
仅限 nic0 |
不适用 | 任何 NIC |
基于目标池的外部直通式网络负载均衡器不使用实例组或 NEG,并且仅支持将负载均衡到 nic0
网络接口。
防火墙规则
防火墙规则集(来自分层防火墙政策、全球网络防火墙政策、区域级网络防火墙政策和 VPC 防火墙规则)是每个网络接口所特有的。确保每个网络都具有适当的防火墙规则,以允许所需流量进出多 NIC 实例。如需确定哪些防火墙规则适用于网络接口以及每个规则的来源,请参阅获取虚拟机接口的有效防火墙规则。
您可以使用网络标记或安全标记将防火墙规则的范围限定为特定虚拟机实例,这两种标记都适用于实例的所有网络接口。如需了解详情,请参阅安全标记与网络标记的比较。
已知问题
本部分介绍了与在 Google Cloud中使用多个网络接口相关的已知问题。
将 VLAN ID 重复用于 Dynamic NIC 时的防火墙互动
对于第三代虚拟机,删除和添加具有相同 VLAN ID 的 Dynamic NIC 可能会允许跨不同 VPC 网络进行未经授权的访问。
请考虑以下场景,其中包含两个网络(network-1
和 network-2
)以及一个 VLAN ID A
:
- 您从
network-1
中删除 VLAN ID 为A
的 Dynamic NIC。 - 在 10 分钟的 Cloud NGFW 连接跟踪期间,您在
network-2
中创建一个具有相同 VLAN IDA
的新 Dynamic NIC。 - 源自
network-2
中新 Dynamic NIC 的流量可能会与之前由network-1
中已删除的 Dynamic NIC 创建的现有连接跟踪条目匹配。
发生这种情况时,如果 network-2
中的新 Dynamic NIC 发送或接收的流量与 Cloud NGFW 连接跟踪表中的条目匹配(其中的条目是针对 network-1
中已删除的 Dynamic NIC 所使用的连接而创建的),则系统可能会允许这类流量。如需避免此问题,请参阅以下解决方法。
临时解决方法:
为避免此问题,请执行以下某项操作:
- 删除 Dynamic NIC 后,在创建新 Dynamic NIC 时请勿重复使用其 VLAN ID。
- 删除 Dynamic NIC 后,请等待至少 10 分钟,然后再创建使用相同 VLAN ID 的新 Dynamic NIC。
如需详细了解连接跟踪和防火墙规则,请参阅《Cloud 新一代防火墙》文档中的规范。