使用 Private Service Connect 和使用方 HTTP(S) 服务控制来访问 Google API

借助 Private Service Connect,您可以使用自己定义的内部 IP 地址连接到虚拟私有云 (VPC) 网络之外的服务。

您可以使用内部 HTTP(S) 负载均衡器创建带有使用方 HTTP(S) 服务控制的 Private Service Connect 端点,以便跨多个服务提供方保持一致的政策。

如需了解详情,请参阅使用 Private Service Connect 通过使用方 HTTP(S) 服务控制访问 Google API

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

角色

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

支持的服务

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

准备工作

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

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

创建网络端点组

对于您要使用负载均衡器提供的每项服务,请创建 Private Service Connect NEG。

gcloud beta 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 NEG 所在的区域中创建。

  1. 对于您创建的每个 NEG,请创建后端服务。

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

    替换以下内容:

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

    gcloud beta 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:要向此服务发送请求的主机名。例如 spanner.example.com
      • PATH_MATCHER:路径匹配器的名称。
      • REGION:网址映射的区域。
  5. 创建目标 HTTPS 代理。

    使用 gcloud compute ssl-certificates create 命令创建区域 SSL 证书资源。内部 HTTP(S) 负载均衡器不支持由 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:证书的区域。

    使用区域 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. 创建转发规则。

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

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

    替换以下内容:

    • FWD_RULE:转发规则的名称。

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

    • FWD_RULE_IP_ADDRESS:您要用于转发规则的 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 是可选操作。

配置 DNS 记录

为添加到网址映射的每个主机配置 DNS 记录,并指向转发规则的 IP 地址。

例如,假设您已使用以下配置信息配置了具有 HTTP(S) 使用方服务控制的 Private Service Connect:

  • 使用目标服务 asia-east1-spanner.googleapis.com 的 Private Service Connect NEG。

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

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

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

发送到 spanner.example.com 的所有请求都将发送到负载均衡器,该负载均衡器会将请求转发到 asia-east1-spanner.googleapis.com

如果您使用 Cloud DNS 管理 DNS,请参阅添加 DNS 记录

验证配置

  1. 创建虚拟机实例。

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

    替换以下内容:

    • VM_NAME:虚拟机的名称。

    • NETWORK:虚拟机的网络。

    • ZONE:虚拟机的可用区。

  2. 连接到虚拟机。

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

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

    curl [-k] -s 'https://HOST:443/RESOURCE_URI' \
        -H 'Host: HOST' \
        --connect-to HOST:443:FWD_RULE_IP_ADDRESS:443
    

    替换以下内容:

    • HOST:在网址映射中配置的主机名。

    • RESOURCE_URI:您要用于验证的资源的其余 URI。例如,如果负载均衡器将请求转发到 Cloud Spanner 区域端点,则您可以使用 v1/projects/<var>PROJECT_ID</var>/instanceConfigs

    • FWD_RULE_IP_ADDRESS:分配给转发规则的 IP 地址。

从本地主机使用 Private Service Connect

如果您的本地网络连接到 VPC 网络,您可以连接到内部 HTTP(S) 负载均衡器,它通过使用方 HTTP(S) 服务控制提供 Private Service Connect。

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

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

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

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

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

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

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

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