为 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。

控制台

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面:

    进入“虚拟机实例”

  2. 点击具有 Private Service Connect 接口的虚拟机的名称。

  3. 网络接口部分中,找到并记下虚拟 Private Service Connect 接口的名称,例如 nic1

gcloud

  1. 使用 gcloud compute instances describe 命令

    gcloud compute instances describe VM_NAME \
        --zone=ZONE
    

    替换以下内容:

    • VM_NAME:具有 Private Service Connect 接口的虚拟机的名称
    • ZONE:虚拟机的可用区
  2. 在该命令的输出中,找到并记下 Private Service Connect 接口的 Google Cloud 名称。

    • 对于虚拟 Private Service Connect 接口,名称采用 nic[interface_number] 形式,例如 nic0nic1
    • 对于动态 Private Service Connect 接口,名称采用 nic[parent_interface_number.VLAN_ID] 形式,例如 nic0.10nic1.42

配置动态 Private Service Connect 接口的自动管理

如果您要为动态 Private Service Connect 接口配置路由,请启用动态网络接口的自动管理。您只需为每个虚拟机执行一次此操作。

查找 Private Service Connect 接口的客机操作系统名称

如需配置路由,您需要知道 Private Service Connect 接口的客机操作系统名称,该名称与 Google Cloud中的接口名称不同。

如需在 Debian 虚拟机上查找接口的名称,请执行以下操作。对于具有其他操作系统的虚拟机,请参阅操作系统的公共文档。

  1. 连接到 Private Service Connect 接口的虚拟机。
  2. 运行以下命令:

    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 接口的网关 IP 地址

如需配置路由,您需要知道 Private Service Connect 接口的默认网关的 IP 地址。

  1. 连接到 Private Service Connect 接口的虚拟机。
  2. 从接口的虚拟机向关联的元数据服务器发送 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 操作系统的虚拟机的路由表。如需永久更新该表,或在其他操作系统上更新路由,请参阅操作系统的公开文档。

  1. 连接到 Private Service Connect 接口的虚拟机。

  2. 对连接到 Private Service Connect 接口的每个使用方子网运行以下命令:

    sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME
    

    替换以下内容:

  3. 运行以下命令可从缓存路由表中移除所有条目。 如果您使用的是具有之前配置的路由表的现有实例,则可能需要执行此操作。

    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 操作系统的虚拟机的路由表。如需永久更新该表,或在其他操作系统上更新路由,请参阅操作系统的公开文档。

如需配置路由,请执行以下操作:

  1. 允许 SSH 连接到 Private Service Connect 接口的虚拟机。
  2. 连接到虚拟机。
  3. 如需为 Private Service Connect 接口创建自定义路由表,请运行以下命令:

    echo "1 ROUTE_TABLE_NAME" | sudo tee -a /etc/iproute2/rt_tables
    

    ROUTE_TABLE_NAME 替换为路由表的名称。

  4. 在路由表中添加一条路由,以将流量路由到 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 接口的客机操作系统名称,例如 ens5gcp.ens5.10

  5. 如需添加路由规则,以针对源自 Private Service Connect 接口的数据包使用自定义路由表,请使用以下命令:

    sudo ip rule add from INTERFACE_IP table ROUTE_TABLE_NAME
    

    INTERFACE_IP 替换为您的 Private Service Connect 接口的 IP 地址。 您可以通过描述接口的虚拟机找到接口的 IP 地址。

  6. 运行以下命令可从缓存路由表中移除所有条目。 如果您使用的是具有之前配置的路由表的现有实例,则可能需要执行此操作。

    sudo ip route flush cache
    

使用命名空间或 VRF 隔离 Private Service Connect 接口

或者,您也可以将虚拟机配置为使用网络命名空间或虚拟路由和转发 (VRF) 来隔离 Private Service Connect 接口。此方法对于容器化的工作负载(例如在 Google Kubernetes Engine pod 中运行的工作负载)非常有用。

使用用于隔离接口的同一上下文配置路由,并确保使用 Private Service Connect 接口的工作负载位于同一上下文中。