通过后端访问全球级 Google API

本页面介绍了如何使用基于跨区域内部应用负载均衡器Private Service Connect 后端来访问全球级 Google API。

此配置使您能够以一个或多个单独的全球级 Google API 为目标,同时应用 Private Service Connect 后端提供的可见性和控制措施

  • 您可以配置在虚拟私有云 (VPC) 本地并连接到本地网络的自定义主机名,以将流量路由到您选择的全球级 Google API。
  • 您可以从任何区域访问后端,后端可以将流量负载均衡到位于任何区域的 Private Service Connect 网络端点组 (NEG)。
  • 您可以从对等互连 VPC 网络将流量发送到后端。

如需查看可用全球级 Google API 的列表,请参阅全球级 Google API 目标

准备工作

创建 Private Service Connect NEG

对于您要访问的每个全球级 Google API,请创建一个 Private Service Connect NEG。Private Service Connect NEG 是区域级的,即使它们用于连接到全球级 Google API 也是如此。

Private Service Connect NEG 在创建后无法更新。

控制台

  1. 在 Google Cloud 控制台中,前往创建网络端点组页面。

    前往“创建网络端点组”

  2. 创建网络端点组页面上,输入网络端点组的名称

  3. 网络端点组类型字段中,选择 Private Service Connect NEG(区域级)

  4. 对于目标,选择全球 Google API

  5. 为网络端点组选择区域

  6. 为网络端点组选择目标服务

  7. 点击创建

gcloud

使用 network-endpoint-groups create 命令

gcloud compute network-endpoint-groups create NEG_NAME \
    --network-endpoint-type=private-service-connect \
    --psc-target-service=TARGET_SERVICE \
    --region=REGION

替换以下内容:

  • NEG_NAME:网络端点组的名称。

  • TARGET_SERVICE:您要连接到的全球级 Google API 目标,例如 pubsub.googleapis.com。请参阅支持的全球级 Google API 目标的列表

  • REGION:要在其中创建网络端点组的区域。

API

regionNetworkEndpointGroups.insert 方法发出 POST 请求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/networkEndpointGroups
{
  "name": "NEG_NAME",
  "networkEndpointType": "PRIVATE_SERVICE_CONNECT",
  "pscTargetService": "TARGET_SERVICE"
}

替换以下内容:

  • PROJECT_ID:网络端点组的项目 ID。
  • REGION:要在其中创建网络端点组的区域。
  • NEG_NAME:网络端点组的名称。
  • TARGET_SERVICE:您要连接到的全球级 Google API 目标,例如 pubsub.googleapis.com。请参阅支持的全球级 Google API 目标的列表

配置负载均衡器

如需访问全球级 Google API,请配置跨区域内部应用负载均衡器。

控制台

开始配置

  1. 在 Google Cloud 控制台中,转到负载均衡页面。

    转到“负载均衡”

  2. 点击创建负载均衡器
  3. 负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步
  4. 公共或内部字段中,选择内部,然后点击下一步
  5. 跨区域或单区域部署字段中,选择最适合跨区域工作负载,然后点击下一步
  6. 点击配置

基本配置

  1. 输入负载均衡器的名称
  2. 为负载均衡器选择一个网络

    该网络必须包含处于要在其中创建负载均衡器的区域中的代理专用子网。

前端配置

  1. 点击前端配置
  2. 输入负载均衡器的转发规则的名称
  3. 协议字段中,选择 HTTPS(包括 HTTP/2 和 HTTP/3)
  4. 为负载均衡器的子网选择子网区域
  5. 为负载均衡器选择子网
  6. 点击 IP 地址,然后执行以下操作之一:
    • 如需自动分配临时 IP 地址,请选择临时(自动)
    • 如需选择临时 IP 地址,请选择临时(自定义),然后输入来自负载均衡器子网 IP 地址范围的自定义临时 IP 地址
    • 如需预留和使用静态内部 IP 地址,请点击创建 IP 地址,然后执行以下操作:
      1. 输入 IP 地址的名称
      2. 点击静态 IP 地址,然后执行以下操作之一:
        • 如需自动分配静态 IP 地址,请选择自动分配
        • 如需配置特定 IP 地址,请选择让我选择,然后输入来自负载均衡器子网 IP 地址范围的自定义 IP 地址
      3. 点击预留
  7. 确保将端口字段设置为 443,以允许 HTTPS 流量。
  8. 点击证书列表,然后选择自行管理的证书。
  9. 点击完成

后端配置

  1. 点击后端配置
  2. 对于您要访问的每个全球级 Google API,请创建一个全球后端服务。如需创建全球后端服务,请执行以下操作:

    1. 创建或选择后端服务菜单中,选择创建后端服务
    2. 输入后端服务的名称
    3. 后端类型设置为 Private Service Connect 网络端点组
    4. Private Service Connect 目标类型设置为全球级 Google API
    5. 选择 HTTPS 作为协议。
    6. 后端部分,点击新建后端菜单,然后选择 Private Service Connect 网络端点组。

      如果您需要创建新的 Private Service Connect 网络端点组,请点击创建 PSC NEG

    7. 点击完成

    8. 点击创建

  3. 确保在创建或选择后端服务菜单中选择要添加的每个后端服务,然后点击确定

路由规则

用于将传入 HTTPS 请求路由到特定后端服务的一组规则称为网址映射。如需详细了解网址映射,请参阅网址映射概览

如果您只为负载均衡器配置一个后端服务,则默认路由规则就足够了,可以跳到检查并最终确定

如果要配置多个后端服务,则必须为每个后端服务都创建一个路径匹配器。每条主机规则只能引用一个路径匹配器,但两条或更多主机规则可以引用同一路径匹配器。

  1. 如果您有多个后端服务,请点击路由规则
  2. 选择简单主机和路径规则
  3. 对于每个后端,请执行以下操作:
    1. 点击添加主机和路径规则
    2. 主机部分,输入将用于向此服务发送请求的主机名,例如 pubsub.example.com
    3. 路径部分,输入路径,例如 /*
    4. 对于后端,请选择后端服务。

检查并最终确定

  1. 点击检查并最终确定以检查配置。
  2. 点击创建

gcloud

  1. 对于您要访问的每个全球级 Google API,请执行以下操作:

    1. 如需创建全球后端服务,请使用 gcloud compute backend-services create 命令

      gcloud compute backend-services create BACKEND_SERVICE_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --protocol=HTTPS \
          --global
      

      BACKEND_SERVICE_NAME 替换为后端服务的名称。

    2. 如需将 NEG 添加到相应的后端服务,请使用 gcloud compute backend-services add-backend 命令

      gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
          --network-endpoint-group=NEG_NAME \
          --network-endpoint-group-region=REGION \
          --global
      

      替换以下内容:

      • NEG_NAME:Private Service Connect NEG 的名称。
      • REGION:Private Service Connect NEG 的区域。
  2. 如需为负载均衡器创建全球网址映射,请使用 gcloud compute url-maps create 命令

    网址映射必须引用默认后端服务。如果要使用一个后端服务配置负载均衡器,请将该后端服务设置为默认值。如果要将负载均衡器配置为使用多个后端服务,请选择其中一个后端服务作为网址映射默认服务。

    gcloud compute url-maps create URL_MAP_NAME \
        --default-service=DEFAULT_BACKEND_SERVICE_NAME
    

    替换以下内容:

    • URL_MAP_NAME:网址映射的名称。
    • DEFAULT_BACKEND_SERVICE_NAME:负载均衡器的默认后端服务的名称。当没有主机规则与请求的主机名匹配时,系统将使用默认的后端服务。
  3. 可选:如果要将负载均衡器配置为使用多个后端服务,请完成此步骤。如果您的网址映射仅引用一个后端服务,请跳过此步骤。

    如需向网址映射添加其他后端服务,请使用 gcloud compute url-maps add-path-matcher 命令

    对于每个后端服务,请添加路径匹配器和一条或多条主机规则。您必须为每个后端服务创建一个路径匹配器。每条主机规则只能引用一个路径匹配器,但两条或更多主机规则可以引用同一路径匹配器。

    gcloud compute url-maps add-path-matcher URL_MAP_NAME \
        --path-matcher-name=PATH_MATCHER \
        --default-service=BACKEND_SERVICE_NAME \
        --new-hosts=HOSTNAMES
    

    替换以下内容:

    • PATH_MATCHER:路径匹配器的名称。
    • BACKEND_SERVICE_NAME:后端服务的名称。
    • HOSTNAMES:要向后端服务发送请求的一个或多个主机名,例如 pubsub.example.com。您可以在英文逗号分隔列表中输入多个主机名。
  4. 如需创建目标 HTTPS 代理,请使用 gcloud compute target-https-proxies create 命令

    gcloud compute target-https-proxies create PROXY_NAME \
        --url-map=URL_MAP_NAME \
        --certificate-manager-certificates=CERTIFICATE_NAME
    

    替换以下内容:

    • PROXY_NAME:目标 HTTPS 代理的名称。
    • URL_MAP_NAME:网址映射的名称。
    • CERTIFICATE_NAME:证书资源的名称。
  5. 如需为负载均衡器创建全局转发规则,请使用 gcloud compute forwarding-rules create 命令

    gcloud compute forwarding-rules create RULE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=NETWORK \
        --address=IP_ADDRESS \
        --ports=443 \
        --target-https-proxy=PROXY_NAME \
        --subnet=SUBNET \
        --subnet-region=SUBNET_REGION \
        --global
    

    替换以下内容:

    • RULE_NAME:转发规则的名称。
    • NETWORK:转发规则的 VPC 网络。此网络必须包含处于要在其中创建负载均衡器的区域中的代理专用子网。
    • IP_ADDRESS:转发规则的内部 IP 地址,该地址必须位于转发规则子网的 IP 地址范围内。如需使用特定的临时 IP 地址,请输入相应 IP 地址,例如 10.0.0.5。如需使用静态内部 IP 地址,请输入相应 IP 地址的名称。如需让 Google Cloud 选择临时 IP 地址,请省略此标志。
    • SUBNET:转发规则的子网。
    • SUBNET_REGION:转发规则子网的区域。

API

  1. 对于您要访问的每个全球级 Google API,请执行以下操作:

    1. 如需创建全球后端服务,请向 backendServices.insert 方法发出 POST 请求。

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
      {
        "loadBalancingScheme": "INTERNAL_MANAGED",
        "name": "BACKEND_SERVICE_NAME",
        "protocol": "HTTPS"
      }
      

      替换以下内容:

      • PROJECT_ID:您的项目的项目 ID。
      • BACKEND_SERVICE_NAME:后端服务的名称。
    2. 如需将 NEG 添加到相应的后端服务,请向 backendServices.patch 方法发出 PATCH 请求。

      PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME
      {
        "backends": [
          {
            "group": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/networkEndpointGroups/NEG_NAME"
          }
        ]
      }
      

      替换以下内容:

      • REGION:NEG 的区域。
      • NEG_NAME:要添加的网络端点组的名称。
  2. 如需为负载均衡器创建全球网址映射,请向 urlMaps.insert 方法发出 POST 请求。

    网址映射必须引用默认后端服务。如果要使用一个后端服务配置负载均衡器,请将该后端服务设置为默认值。如果要将负载均衡器配置为使用多个后端服务,请选择其中一个后端服务作为网址映射默认服务。

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps
     {
       "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/DEFAULT_BACKEND_SERVICE_NAME",
       "name": "URL_MAP_NAME"
     }
     

    替换以下内容:

    • DEFAULT_BACKEND_SERVICE_NAME:负载均衡器的默认后端服务的名称。 当没有主机规则与请求的主机名匹配时,系统将使用默认的后端服务。
    • URL_MAP_NAME:网址映射的名称。
  3. 如果要将负载均衡器配置为使用多个后端服务,请完成此步骤。如果您的网址映射仅引用一个后端服务,请跳过此步骤。

    如需向网址映射添加其他后端服务,请向 urlMaps.patch 方法发出 PATCH 请求。

    对于每个后端服务,请添加路径匹配器和一条或多条主机规则。您必须为每个后端服务创建一个路径匹配器。每条主机规则只能引用一个路径匹配器,但两条或更多主机规则可以引用同一路径匹配器。

    您可以通过发出单个 API 请求来添加多个路径匹配器和主机规则。

     PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/URL_MAP_NAME
     {
       "pathMatchers": [
         {
           "name": "PATH_MATCHER_NAME_1",
           "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME_1"
         },
         {
           "name": "PATH_MATCHER_NAME_2",
           "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME_2"
         }
       ],
       "hostRules": [
         {
           "hosts": ["HOSTNAME_1"],
           "pathMatcher": "PATH_MATCHER_NAME_1"
         },
         {
           "hosts": ["HOSTNAME_2"],
           "pathMatcher": "PATH_MATCHER_NAME_2"
         }
       ]
     }
     

    替换以下内容:

    • PATH_MATCHER_NAME_1:第一个路径匹配器的名称。
    • BACKEND_SERVICE_NAME_1:第一个后端服务的名称。
    • PATH_MATCHER_NAME_2:第二个路径匹配器的名称。
    • BACKEND_SERVICE_NAME_2:第二个后端服务的名称。
    • HOSTNAME_1:要针对第一个服务向其发送请求的主机名,例如 pubsub.example.com
    • HOSTNAME_2:要针对第二个服务向其发送请求的主机名。
  4. 如需创建目标 HTTPS 代理,请向 targetHttpsProxies.insert 方法发出 POST 请求。

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxies
     {
       "name": "PROXY_NAME",
       "sslCertificates": [
         "https://certificatemanager.googleapis.com/v1/projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME"
       ],
       "urlMap": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/URL_MAP_NAME"
     }
     

    替换以下内容:

    • PROJECT_ID:项目的 ID。
    • PROXY_NAME:目标 HTTPS 代理的名称。
    • CERTIFICATE_NAME:证书资源的名称。
    • URL_MAP_NAME:网址映射的名称。
  5. 如需为负载均衡器创建全局转发规则,请向 globalForwardingRules.insert 方法发出 POST 请求。转发规则的网络必须包含处于转发规则区域的子网中的代理专用子网。

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules
     {
       "IPAddress": "IP_ADDRESS",
       "loadBalancingScheme": "INTERNAL_MANAGED",
       "name": "FORWARDING_RULE_NAME",
       "network": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME",
       "portRange": "443",
       "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME",
       "target": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxies/PROXY_NAME"
     }
     

    替换以下内容:

    • IP_ADDRESS:转发规则的内部 IP 地址,该地址必须位于转发规则子网的 IP 地址范围内。如需使用特定的临时 IP 地址,请提供相应 IP 地址,例如 10.0.0.5。如需使用静态内部 IP 地址,请提供相应 IP 地址的名称。如需让 Google Cloud 选择临时 IP 地址,请省略此字段。
    • FORWARDING_RULE_NAME:转发规则的名称。
    • NETWORK_NAME:转发规则的 VPC 网络的名称。此网络必须包含处于要在其中创建负载均衡器的区域中的代理专用子网。
    • SUBNET_REGION:转发规则子网的区域。
    • SUBNET_NAME:转发规则子网的名称。

验证配置

如需测试后端与全球级 Google API 的连接,请执行以下操作:

  1. 在配置了后端的 VPC 网络中创建虚拟机 (VM) 实例(如果没有相应实例)。
  2. 确保您未创建替换隐式 IPv4 允许出站流量规则的防火墙规则或防火墙政策。
  3. 连接到虚拟机。
  4. 在虚拟机中,使用 curl 验证您是否可以查询每个 API。此命令会设置 Host 标头,并通过指定用户定义的 IP 地址来绕过 DNS 解析。

    您可以使用 -k 标志跳过证书验证。如果您使用自签名证书来配置目标 HTTPS 代理,或者如果虚拟机没有为您的证书签名的证书授权机构的证书,则可能需要跳过验证。

    curl -iv --resolve HOSTNAME:443:IP_ADDRESS \
       'https://HOSTNAME/RESOURCE_URI'
    

    替换以下内容:

    • HOSTNAME:您在网址映射中配置的主机名,例如 pubsub.example.com
    • IP_ADDRESS:负载均衡器转发规则的 IP 地址。
    • RESOURCE_URI:您要用于验证的资源的其余 URI。例如,如果负载均衡器将请求转发到 Pub/Sub 的区域端点,则您可以使用 $discovery/rest?version=v1

配置 DNS 记录

为添加到网址映射的每个主机配置 DNS 记录,并指向转发规则的 IP 地址。 如果您使用 Cloud DNS 管理 DNS,请参阅添加、修改和删除记录。否则,请在 DNS 服务器上配置 DNS 记录。

例如,假设您创建了以下配置:

  • 使用目标服务 pubsub.googleapis.com 的 Private Service Connect NEG。

  • 使用该 Private Service Connect NEG 作为后端的跨区域内部应用负载均衡器。

  • 定义 pubsub.example.com 的主机规则的网址映射。

为使此配置正常运行,您必须创建一条 DNS 记录,用于将 pubsub.example.com 指向转发规则的 IP 地址。

使用此配置时,发送到 pubsub.example.com 的所有请求都将发送到负载均衡器,该负载均衡器会将请求转发到 pubsub.googleapis.com

配置客户端以向后端发送请求

如需通过后端(而非公共服务端点)发送请求,您必须将客户端配置为将请求发送到您在负载均衡器网址映射中定义的主机名(例如 pubsub.example.com)。如需了解如何将客户端配置为使用自定义端点,请参阅客户端或客户端库的文档。以下页面包含适用于一些常见客户端的配置步骤:

  • Python:您可以在客户端选项中配置 api_endpoint

  • Go:您可以在 ClientOptions 中配置 WithEndpoint

  • .NET:您可以在客户端的构建器类中配置 Endpoint

  • gcloud:您可以在 gcloud CLI 中配置 api_endpoint_overrides