通过后端访问区域性 Google API

本指南介绍了如何配置具有 Private Service Connect 后端的内部应用负载均衡器以访问区域性 Google API

如需详细了解后端,请参阅后端简介

用于 Private Service Connect 的内部应用负载均衡器可以从共享 VPC 网络连接的网络访问。

角色

Compute Load Balancer Admin 角色 (roles/compute.loadBalancerAdmin) 包含执行本指南中描述的任务所需的权限。

支持的服务

请参阅支持的区域服务端点列表。

准备工作

  • 在项目中启用 Compute Engine API

  • 如果要向 Service Directory 注册负载均衡转发规则,请在项目中启用 Service Directory API。如需配置 Service Directory,您必须使用 Google Cloud CLI 或 API 创建转发规则。

  • 创建代理专用子网(如果您还没有的话)。您打算在其中创建内部应用负载均衡器的 VPC 网络和区域中必须有一个代理专用子网。该子网可供该网络和区域内的所有内部应用负载均衡器使用。

  • 如果您还没有私钥和自行管理的网域证书,请创建。请参阅使用自行管理的 SSL 证书的第 1 步配置负载均衡器时,您需要私钥和证书来创建目标 HTTPS 代理。

创建网络端点组

对于要使用负载均衡器提供的每项服务,请创建一个 Private Service Connect 网络端点组 (NEG)。

控制台

  1. 在 Google Cloud 控制台中,进入网络端点组页面。

    进入“网络端点组”

  2. 点击创建网络端点组

  3. 输入网络端点组的名称

  4. 对于网络端点组类型,请选择网络端点组 (Private Service Connect)

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

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

  7. 点击创建

gcloud

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:您要连接的目标服务。请参阅支持的区域服务端点列表

  • REGION:要在其中创建网络端点组的区域。该区域必须与您要连接的服务位于同一区域。

配置负载均衡器

所有负载均衡器组件必须在 Private Service Connect 网络端点组所在的区域中创建。

控制台

开始配置

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

    转到“负载均衡”

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

基本配置

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

    该网络必须包含要在其中创建 NEG 和负载均衡器的区域中的代理专用子网。如果没有,您可以点击预留子网创建一个。

  4. 不关闭窗口继续操作。

后端配置

Private Service Connect 网络端点组是一种负载均衡器后端。您可以为要配置的每个后端创建一个后端服务。

  1. 点击后端配置
  2. 对于您要配置的每个 Private Service Connect 网络端点组,请创建后端服务。

    1. 创建或选择后端服务菜单中,选择创建后端服务
    2. 输入后端服务的名称
    3. 后端类型设置为 Private Service Connect 网络端点组
    4. Private Service Connect 目标类型设置为区域性 Google API
    5. 选择 HTTPS 作为协议。

    6. 后端部分,点击新建后端菜单,然后选择 Private Service Connect 网络端点组。

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

路由规则

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

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

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

前端配置

  1. 点击前端配置
  2. 点击添加前端 IP 和端口
  3. 输入负载均衡器的名称
  4. 协议字段中,选择 HTTPS(包括 HTTP/2)
  5. 为负载均衡器选择子网
  6. 确保将端口设置为 443,以允许 HTTPS 流量。
  7. 对于 IP 地址,从菜单中选择一个 IP 地址。

    如果要预留新 IP 地址,请点击创建 IP 地址

  8. 点击证书下拉列表。

    1. 如果您已经拥有要使用的自行管理的 SSL 证书资源,请从菜单中选择它。
    2. 否则,请选择创建新证书
    3. 输入证书资源的名称
    4. 在相应字段中上传您的 PEM 格式的文件:
      • 证书
      • 私钥
    5. 点击创建
  9. 点击完成

检查并最终确定

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

gcloud

  1. 对于您创建的每个网络端点组,请创建后端服务。

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

    替换以下内容:

    • BACKEND_SERVICE_NAME:后端服务的名称。
    • REGION:要在其中创建后端服务的区域。
  2. 对于您创建的每项后端服务,请将相应的 NEG 添加到后端服务。

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

    替换以下内容:

    • BACKEND_SERVICE_NAME:后端服务的名称。
    • NEG_NAME:网络端点组的名称。
    • REGION:后端所在的区域。
  3. 为负载均衡器创建网址映射。

    网址映射必须引用默认后端服务。如果要使用一个后端服务配置负载均衡器,请将该后端服务设置为默认值。如果要将负载均衡器配置为使用多个后端服务(由您在下一步中创建的主机规则和路径匹配器引用),请选择其中一个后端服务作为网址映射默认值。

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

    替换以下内容:

    • URL_MAP_NAME:网址映射的名称。

    • DEFAULT_BACKEND_SERVICE_NAME:负载均衡器的默认后端服务的名称。 当没有主机规则与请求的主机名匹配时,系统将使用默认的后端服务。

    • REGION:要在其中创建网址映射的区域。

  4. 向网址映射添加其他后端服务。

    如果您的网址映射需要引用两个或更多后端服务,请完成以下步骤。如果您的网址映射仅引用一项后端服务,请跳过此步骤。

    1. 对于每项后端服务,请添加路径匹配器。您必须为每项后端服务创建一个路径匹配器。

      gcloud compute url-maps add-path-matcher URL_MAP_NAME \
          --path-matcher-name=PATH_MATCHER \
          --default-service=BACKEND_SERVICE_NAME \
          --region=REGION
      

      替换以下内容:

      • URL_MAP_NAME:网址映射的名称。
      • PATH_MATCHER:路径匹配器的名称。
      • BACKEND_SERVICE_NAME:后端服务的名称。
      • REGION:网址映射的区域。
    2. 对于每个主机名,添加主机规则。

      每条主机规则只能引用一个路径匹配器,但两条或更多主机规则可以引用同一路径匹配器。

      gcloud compute url-maps add-host-rule URL_MAP_NAME \
          --hosts=HOST \
          --path-matcher-name=PATH_MATCHER \
          --region=REGION
      

      替换以下内容:

      • URL_MAP_NAME:网址映射的名称。
      • HOST:要向此服务发送请求的主机名。例如 pubsub.example.com
      • PATH_MATCHER:路径匹配器的名称。
      • REGION:网址映射的区域。
  5. 创建目标 HTTPS 代理。

    1. 使用 gcloud compute ssl-certificates create 命令创建区域 SSL 证书资源。内部应用负载均衡器不支持 Google 管理的证书。

      gcloud compute ssl-certificates create CERTIFICATE \
          --certificate=LB_CERT \
          --private-key=LB_PRIVATE_KEY \
          --region=REGION
      

      替换以下内容:

      • CERTIFICATE:证书的名称。

      • LB_CERT:自行管理的证书的 PEM 格式的证书文件的路径。

      • LB_PRIVATE_KEY:自行管理证书的 PEM 格式的私钥文件的路径。

      • REGION:证书的区域。

    2. 使用区域 SSL 证书资源,通过 gcloud compute target-https-proxies create 命令创建目标 HTTPS 代理。

      gcloud compute target-https-proxies create PROXY_NAME \
          --url-map=URL_MAP_NAME \
          --region=REGION \
          --ssl-certificates=CERTIFICATE
      

      替换以下内容:

      • PROXY_NAME:目标 HTTPS 代理的名称。
      • URL_MAP_NAME:网址映射的名称。
      • REGION:证书资源所在的区域。
      • CERTIFICATE:证书资源的名称。
  6. 为转发规则预留区域内部 IPv4 地址。

    gcloud compute addresses create ADDRESS_NAME \
        --ip-version=IPV4 \
        --region=REGION \
        --subnet=SUBNETWORK
    

    替换以下内容:

    • ADDRESS_NAME:IP 地址资源的名称。
    • REGION:要在其中创建 IP 地址的区域。
    • SUBNET:要在其中创建 IP 地址的子网。

    运行以下命令以查看预留的 IP 地址。创建负载均衡器后,您可以使用 IP 地址验证配置

    gcloud compute addresses describe ADDRESS_NAME \
        --format="get(address)" --region=REGION
    
  7. 创建转发规则。

    使用 gcloud compute forwarding-rules create 命令创建转发规则。

    gcloud compute forwarding-rules create FWD_RULE \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=NETWORK \
        --address=ADDRESS_NAME \
        --ports=443 \
        --region=REGION \
        --target-https-proxy=PROXY_NAME \
        --target-https-proxy-region=PROXY_REGION \
       [--service-directory-registration=SD_SERVICE_NAME]
    

    替换以下内容:

    • FWD_RULE:转发规则的名称。

    • NETWORK:要在其中创建转发规则的网络。

    • ADDRESS_NAME:预留的 IP 地址。

    • REGION:转发规则的区域。

    • PROXY_NAME:目标 HTTPS 代理的名称。

    • PROXY_REGION:目标 HTTPS 代理的区域。

    • SD_SERVICE_NAME要向其注册负载均衡器的 Service Directory 服务的 URI,格式为:projects/PROJECT/locations/REGION/namespaces/NAMESPACE_NAME/services/SERVICE_NAME。指定 --service-directory-registration 是可选操作。

验证配置

  1. 创建虚拟机实例。

    gcloud compute instances create VM_NAME \
        --network=NETWORK \
        --image-project=debian-cloud --image-family=debian-12 \
        --zone=ZONE
    

    替换以下内容:

    • VM_NAME:虚拟机的名称。

    • NETWORK:虚拟机的网络。

    • ZONE:虚拟机的可用区。

  2. 连接到虚拟机。

    gcloud compute ssh VM_NAME --zone=ZONE
    
  3. 使用 curl 验证配置。此命令会设置 Host 标头,并通过指定用户定义的 IP 地址来绕过 DNS 解析。如果您针对协议使用默认端口(例如使用 HTTPS 端口 443),则可以省略该端口。

    如果需要的话,您可以使用 -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 的区域端点,则您可以使用 rest?version=v1

配置 DNS 记录

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

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

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

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

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

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

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

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

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

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

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

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

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

从本地主机访问后端

如果您的本地网络连接到 VPC 网络,您可以将流量发送到 Private Service Connect 后端。

  • 您的本地网络必须使用内部应用负载均衡器所在区域中的 Cloud VPN 隧道或 VLAN 连接来连接到包含内部应用负载均衡器的 VPC 网络。

  • 本地网络必须具有适当的内部应用负载均衡器的路由。确保对 Cloud VPN 隧道或 VLAN 连接的 BGP 会话进行管理的每个 Cloud Router 路由器均已配置为对内部应用负载均衡器转发规则使用的子网的主要 IP 地址范围进行通告。默认情况下,Cloud Router 路由器会通告子网路由。

  • 您必须配置本地系统,以便内部应用负载均衡器的网址映射中的主机名解析为内部应用负载均衡器转发规则 IP 地址。您可以在本地域名服务器中创建 DNS 记录,也可以使用 Cloud DNS。

    如果您使用 Cloud DNS 代管式专用可用区创建了 DNS 记录,请完成以下步骤:

    • 在本地网络连接到的 VPC 网络中,创建入站服务器政策

    • 在您的本地网络所连接的 VPC 网络中,于您的 Cloud VPN 隧道和 VLAN 连接所在的区域找到入站转发器入口点

    • 配置本地 DNS 域名服务器,以将网址映射中的主机名的 DNS 请求转发到 Cloud DNS 入站转发器入口点。

图 1。通过配置 Private Service Connect、Cloud Router 路由器和本地主机,您可以使用区域端点连接到 Google API 和服务(点击可放大)。