排查包含多个网络接口的虚拟机的问题
本页介绍了在创建和使用具有多个网络接口的虚拟机时可能会遇到的常见问题的排查步骤。
我无法创建具有多个接口的虚拟机
您可能会看到以下某条错误消息:
Invalid value for field 'resource': ''. Too many network interfaces. The maximum number of network interfaces allowed for this machine type is.
如果您收到这条错误消息,则表示您尝试创建的接口数量超出了实例机器类型支持的接口数量上限。查看接口数量上限表。
Networks must be distinct for NICs attached to a VM.
如果您收到这条消息,则表示您正尝试在同一网络中创建多个接口。每个网络接口都必须连接到不同的 VPC 网络。
Subnetwork CIDR ranges must be non-overlapping for NICs attached to a VM.
如果您收到这条消息,则表示与您的虚拟机接口关联的 CIDR 范围存在重叠。这些 CIDR 范围包括与虚拟机接口关联的所有主要子网范围,以及用于别名 IP 范围的次要范围。每个接口都会连接到一个子网,每个子网位于不同的 VPC 网络中,不得与其他接口的子网重叠。例如,如果您尝试在
REGION_A
区域中创建实例,则可以使用以下命令或 Google Cloud 控制台来检查子网的主要 CIDR 范围。gcloud compute networks subnets list --regions REGION_A NAME REGION NETWORK RANGE default REGION_A default 10.138.0.0/20 overlapping-subnet REGION_A test-network 10.138.8.0/24
如需检查次要子网 CIDR 范围,请使用以下命令或 Google Cloud 控制台。
gcloud compute networks subnets describe overlapping-subnet --region REGION_A
... ipCidrRange: 10.128.8.0/24 ... secondaryIpRanges: - ipCidrRange: 10.138.8.0/24 rangeName: conflicting-range
Multiple network interfaces are not supported on legacy networks.
如果您收到这条消息,则表示您正尝试在旧版网络中创建实例。旧版网络不支持具有多个接口的实例。您可以使用以下方法之一来检查网络是否属于旧版网络:
- 在 Google Cloud 控制台中,转到“VPC 网络”页面,然后查看模式列。
- 运行
gcloud compute networks list
命令并检查SUBNET_MODE
字段。
Required 'compute.instances.create' permission for 'projects/PROJECT_ID/zones/ZONE/instances/test-inst'
如果您收到这条消息,则表示您登录的账号没有创建实例所必需的 IAM 权限。如需详细了解创建实例所需的角色,请参阅权限、IAM 和具有多个网络接口的实例。您可以检查与项目相关的 IAM 政策,确定其是否授予您以下任何角色:
OWNER
、EDITOR
或compute.instanceAdmin.v1
。如需在共享 VPC 中创建实例,您还需要具备compute.networkUser
角色。在以下示例中,账号email2@gmail.com
没有创建实例所需的足够 IAM 权限。如需了解详细说明,请参阅授予、更改和撤消对资源的访问权限 IAM 指南。gcloud projects get-iam-policy PROJECT_ID bindings: - members: - user:email1@gmail.com role: roles/owner - members: - serviceAccount:our-project-123@appspot.gserviceaccount.com - serviceAccount:123456789012-compute@developer.gserviceaccount.com role: roles/editor - members: - user:email2@gmail.com role: roles/viewer etag: BwUjMhXbSPU= version: 1
您可以要求您的项目 Owner 或 Editor 授予您
OWNER
、EDITOR
或compute.instanceAdmin.v1
角色。如果您将任何接口与属于共享 VPC 的子网关联,那么您还需要具备compute.networkUser
角色。gcloud projects set-iam_policy --member user:email2@gmail.com --role roles/editor
我无法连接到次要接口的内部 IP 地址
检查防火墙规则,确定其是否允许连接到虚拟机次要接口。如需进行检查,您可以通过以下两种方式之一,查看连接到次要接口的网络的防火墙规则:您可以访问 Google Cloud 控制台并点击相应的 VPC 网络;也可以使用以下
gcloud
命令。gcloud compute firewall-rules list --filter='network:NETWORK_NAME'
检查您是否在尝试从互联网地址或次要接口网络外部连接到次要接口。您只能从一个接口所在的网络内连接到该接口的内部 IP。如果您需要从网络外部访问该接口,则可以为次要接口分配外部 IP 地址。
检查您是否在尝试从次要接口所连接的子网外部连接到次要接口的内部 IP,比如说从相同网络的另一个子网连接,或者从对等互连网络连接。每个实例多个网络接口解释了 VPC 对等互连和具有多个接口的虚拟机实例之间的相互作用。如需从接口的子网外部访问次要接口,您可能需要在虚拟机上配置路由。如需详细了解 DHCP 如何配置虚拟机中的默认路由,请参阅使用多个网络接口的 DHCP 行为。
如果您尝试访问 IPv6 地址,另请参阅我无法连接到次要接口的 IPv6 地址。
我无法使用外部 IP 地址连接到次要接口
DHCP 服务器仅在虚拟机的主要网络接口上配置默认路由。如果您要使用外部 IP 地址连接到次要接口,那么有两种可选方案。如果仅需要通过次要网络接口连接到网络外部,则可以在该网络接口上设置默认路由。此外,您也可以采用为其他接口配置路由教程中所述的方法,在虚拟机中使用基于来源的政策路由配置单独的路由表。
如果您尝试访问 IPv6 地址,另请参阅我无法连接到次要接口的 IPv6 地址。
我无法连接到次要接口的 IPv6 地址
如果您尝试访问 IPv6 地址,请检查该虚拟机是否安装了 google-guest-agent
版本 20220603.00 或更高版本。如需详细了解如何管理 google-guest-agent
版本,请参阅客机环境。
如果您使用的是早期版本的 google-guest-agent
,则次要接口不会收到 IPv6 子网路由。我们建议您更新客机代理,以便正确配置路由。
但是,作为一种解决方法,您也可以创建启动脚本以对每个次要接口进行以下配置更改。
sudo sysctl -w net.ipv6.conf.INTERFACE_NAME.accept_ra_rt_info_max_plen=128
将 INTERFACE_NAME
替换为接口的名称,例如 eth1
或 ens5
。
我在使用 /32 以外的网络掩码时遇到连接问题
默认情况下,实例元数据服务器仅响应默认网关的 ARP 请求。
如需使用 /32
以外的网络掩码配置接口,您应该使用 --guest-os-features MULTI_IP_SUBNET
标志创建映像,并使用该映像来创建实例。例如,如果您使用的是基于 debian-9
的映像,则可以使用如下命令创建映像:
gcloud compute images create debian-9-multi-ip-subnet \ --source-disk debian-9-disk \ --source-disk-zone ZONE_A \ --guest-os-features MULTI_IP_SUBNET
如需查看映像中配置的客机功能,请在客机映像上运行 gcloud compute
images describe
命令。
gcloud compute images describe debian-9-multi-ip-subnet
如需详细了解如何创建自定义映像,请参阅创建、删除和弃用自定义映像。
我无法解析具有多个网络接口的虚拟机的内部主机名
使用内部主机名执行 DNS 查询时,DNS 查询会解析为实例的主要网络接口 (nic0
)。
如果 nic0
连接到的 VPC 网络与发出 DNS 查询的实例的 VPC 网络不同,则 DNS 查询会失败。内部 DNS 只会在给定的 VPC 网络内进行解析。如需了解详情,请参阅具有多个网络接口的 DNS 解析。
使用串行控制台进行问题排查
在虚拟机上启用串行控制台来调试配置相关问题,这通常是一种不错的做法。按照使用串行控制台进行问题排查中的步骤,即可启用串行控制台,执行交互式调试。