为 Private Service Connect 接口配置路由
本页面介绍了如何为虚拟 Private Service Connect 接口和动态 Private Service Connect 接口配置路由。
通过 Private Service Connect 接口路由流量
创建 Private Service Connect 接口后,您需要在该接口的虚拟机上配置客机操作系统 (guest OS),以通过该接口路由流量。
允许 SSH 连接
确保防火墙规则配置为允许入站流量 SSH 连接以连接到 Private Service Connect 接口的虚拟机。
查找 Private Service Connect 接口的 Google Cloud 名称
如需配置路由,您需要知道 Private Service Connect 接口的 Google Cloud 名称。
如需查找动态 Private Service Connect 接口的 Google Cloud 名称,请使用 Google Cloud CLI。
控制台
在 Google Cloud 控制台中,前往虚拟机实例页面:
点击具有 Private Service Connect 接口的虚拟机的名称。
在网络接口部分中,找到并记下虚拟 Private Service Connect 接口的名称,例如
nic1
。
gcloud
使用
gcloud compute instances describe
命令。gcloud compute instances describe VM_NAME \ --zone=ZONE
替换以下内容:
VM_NAME
:具有 Private Service Connect 接口的虚拟机的名称ZONE
:虚拟机的可用区
在该命令的输出中,找到并记下 Private Service Connect 接口的 Google Cloud 名称。
- 对于虚拟 Private Service Connect 接口,名称采用
nic[interface_number]
形式,例如nic0
或nic1
。 - 对于动态 Private Service Connect 接口,名称采用
nic[parent_interface_number.VLAN_ID]
形式,例如nic0.10
或nic1.42
。
- 对于虚拟 Private Service Connect 接口,名称采用
配置动态 Private Service Connect 接口的自动管理
如果您要为动态 Private Service Connect 接口配置路由,请启用动态网络接口的自动管理。您只需为每个虚拟机执行一次此操作。
查找 Private Service Connect 接口的客机操作系统名称
如需配置路由,您需要知道 Private Service Connect 接口的客机操作系统名称,该名称与 Google Cloud中的接口名称不同。
如需在 Debian 虚拟机上查找接口的名称,请执行以下操作。对于具有其他操作系统的虚拟机,请参阅操作系统的公共文档。
- 连接到 Private Service Connect 接口的虚拟机。
运行以下命令:
ip address
在网络接口列表中,找到并记下与您的 Private Service Connect 接口的 IP 地址关联的接口名称。例如,如果 Linux Guest Agent 管理虚拟机的网络接口,则名称采用以下格式:
- 虚拟 Private Service Connect 接口:
ens[number]
- 例如,ens5
。 - 动态 Private Service Connect 接口:
gcp.ens[parent_interface_number].[VLAN_ID]
- 例如,gcp.ens5.10
。
- 虚拟 Private Service Connect 接口:
查找 Private Service Connect 接口的网关 IP 地址
如需配置路由,您需要知道 Private Service Connect 接口的默认网关的 IP 地址。
- 连接到 Private Service Connect 接口的虚拟机。
从接口的虚拟机向关联的元数据服务器发送
GET
请求。对于虚拟 Private Service Connect 接口,请发送以下请求:
curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/INTERFACE_NUMBER/gateway -H "Metadata-Flavor: Google" && echo
将
INTERFACE_NUMBER
替换为您的接口的索引。例如,如果 Private Service Connect 接口的Google Cloud 名称为nic1
,请使用值1
。对于动态 Private Service Connect 接口,请发送以下请求:
curl http://metadata.google.internal/computeMetadata/v1/instance/vlan-network-interfaces/PARENT_INTERFACE_NUMBER/VLAN_ID/gateway -H "Metadata-Flavor: Google" && echo
替换以下内容:
PARENT_INTERFACE_NUMBER
:动态 Private Service Connect 接口的父 vNIC 的索引例如,如果 Private Service Connect 接口的Google Cloud 名称为
nic1.5
,请使用值1
。VLAN_ID
:动态 Private Service Connect 接口的 VLAN ID例如,如果 Private Service Connect 接口的 Google Cloud 名称为
nic1.5
,请使用值5
。
请求的输出会显示网关 IP 地址。
为使用方子网添加路由
对于连接到 Private Service Connect 接口的每个使用方子网,您必须向 Private Service Connect 接口的默认网关添加路由。这样一来,前往使用方网络的流量便会通过 Private Service Connect 接口。
以下步骤描述了如何临时更新使用 Debian 操作系统的虚拟机的路由表。如需永久更新该表,或在其他操作系统上更新路由,请参阅操作系统的公开文档。
连接到 Private Service Connect 接口的虚拟机。
对连接到 Private Service Connect 接口的每个使用方子网运行以下命令:
sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME
替换以下内容:
CONSUMER_SUBNET_RANGE
:使用方子网的 IP 地址范围GATEWAY_IP
:接口子网的默认网关的 IP 地址OS_INTERFACE_NAME
:Private Service Connect 接口的客机操作系统名称,例如ens5
或gcp.ens5.10
运行以下命令可从缓存路由表中移除所有条目。 如果您使用的是具有之前配置的路由表的现有实例,则可能需要执行此操作。
sudo ip route flush cache
将 Private Service Connect 接口与 VPC Service Controls 搭配使用
您可以将 Private Service Connect 接口与 VPC Service Controls 搭配使用。这样,提供方 VPC 网络就可以通过使用方 VPC 网络访问 Google API 和服务,而使用方组织则可以应用 VPC Service Controls 的安全优势。
您可以使用以下方法之一来实现此配置,这些方法将在以下部分中介绍:
- 配置客机操作系统路由
- 使用网络命名空间或 VRF 隔离 Private Service Connect 接口,然后配置路由
配置客机操作系统路由
如需将 Private Service Connect 接口与 VPC Service Controls 搭配使用,请在接口的虚拟机的客机操作系统中配置路由。通过 Private Service Connect 接口将流量直接发送到 Google API 和服务。
以下步骤描述了如何临时更新使用 Debian 操作系统的虚拟机的路由表。如需永久更新该表,或在其他操作系统上更新路由,请参阅操作系统的公开文档。
如需配置路由,请执行以下操作:
- 允许 SSH 连接到 Private Service Connect 接口的虚拟机。
- 连接到虚拟机。
如需为 Private Service Connect 接口创建自定义路由表,请运行以下命令:
echo "1 ROUTE_TABLE_NAME" | sudo tee -a /etc/iproute2/rt_tables
将
ROUTE_TABLE_NAME
替换为路由表的名称。在路由表中添加一条路由,以将流量路由到 Google API 和服务。例如,如需为发往
restricted.googleapis.com
虚拟 IP (VIP) 的流量添加路由,请使用以下命令,该命令指定了 restricted.googleapis.com 的 IPv4 地址范围:sudo ip route add 199.36.
153.4/30 dev OS_INTERFACE_NAME table ROUTE_TABLE_NAME 将
OS_INTERFACE_NAME
替换为 Private Service Connect 接口的客机操作系统名称,例如ens5
或gcp.ens5.10
如需添加路由规则,以针对源自 Private Service Connect 接口的数据包使用自定义路由表,请使用以下命令:
sudo ip rule add from INTERFACE_IP table ROUTE_TABLE_NAME
将
INTERFACE_IP
替换为您的 Private Service Connect 接口的 IP 地址。 您可以通过描述接口的虚拟机找到接口的 IP 地址。运行以下命令可从缓存路由表中移除所有条目。 如果您使用的是具有之前配置的路由表的现有实例,则可能需要执行此操作。
sudo ip route flush cache
使用命名空间或 VRF 隔离 Private Service Connect 接口
或者,您也可以将虚拟机配置为使用网络命名空间或虚拟路由和转发 (VRF) 来隔离 Private Service Connect 接口。此方法对于容器化的工作负载(例如在 Google Kubernetes Engine pod 中运行的工作负载)非常有用。
使用用于隔离接口的同一上下文配置路由,并确保使用 Private Service Connect 接口的工作负载位于同一上下文中。