使用 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) 包含执行本指南中描述的任务所需的权限。

支持的服务

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

准备工作

  • 在项目中启用 Compute Engine API

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

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

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

创建网络端点组

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

控制台

  1. 转到 Google Cloud Console 中的网络端点组页面。
    转到“网络端点组”
  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 Console 中的负载均衡页面。
    转到“负载均衡”
  2. HTTP(S) 负载均衡下,点击开始配置
  3. 选择“仅在我的虚拟机之间”。此设置表示负载平衡器是内部的。
  4. 点击继续

基本配置

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

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

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

后端配置

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

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

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

      已命名的端口设置不用于此负载均衡器配置。保留默认的已命名端口设置。

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

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

路由规则

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

  1. 如果您有多个后端服务,请点击路由规则
  2. 选择简单主机和路径规则
  3. 对于每个后端,请执行以下操作:
    1. 添加主机和路径规则
    2. 主机部分,输入将用于向此服务发送请求的主机名,例如 cloudkms.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:网址映射的区域。
    1. 对于每个主机名,添加主机规则。

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

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

      替换以下内容:

      • URL_MAP_NAME:网址映射的名称。
      • HOST:要向此服务发送请求的主机名。例如 cloudkms.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. 为转发规则预留区域内部 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 服务的格式:projects/PROJECT/locations/REGION/namespaces/NAMESPACE_NAME/services/SERVICE_NAME。指定 --service-directory-registration 是可选操作。

配置 DNS 记录

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

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

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

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

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

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

发送到 cloudkms.example.com 的所有请求都将发送到负载均衡器,该负载均衡器会将请求转发到 asia-east1-cloudkms.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 Key Management Service 区域端点,则您可以使用 v1/projects/<var>PROJECT_ID</var>/locations

    • FWD_RULE_IP_ADDRESS:分配给预留 IP 资源 ADDRESS_NAME 的 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 和服务。