通过后端访问已发布服务

本指南介绍了如何配置具有 Private Service Connect 后端的全球外部应用负载均衡器,以访问使用 Private Service Connect 发布的服务

图 1. 使用基于全球外部应用负载均衡器的后端允许具有互联网访问权限的服务使用方将流量发送到服务提供方的 VPC 网络中的服务(点击可放大)。

如需了解详情,请参阅 Private Service Connect 后端简介

角色

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

准备工作

  • 如果您要发布自己的服务,请参阅使用 Private Service Connect 发布服务

  • 如果您连接的服务由第三方发布,请要求服务提供方提供以下信息:

    • 您要连接的服务连接的 URI。服务连接的格式为 projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

    • 您对用于发送请求的 DNS 名称的任何要求。您可能需要在网址映射配置DNS 配置中使用特定的 DNS 名称。

创建网络端点组

创建指向您要访问的已发布服务的服务连接的 Private Service Connect NEG。如果跨多个不同区域部署已发布服务,请为每个服务连接创建一个 NEG。

每个 Private Service Connect NEG 都使用 /32 IP 地址,以便负载均衡器能够与其通信。

控制台

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

    进入“网络端点组”

  2. 点击创建网络端点组

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

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

  5. 选择目标类型已发布服务

  6. 对于目标服务,输入服务连接的 URI。

  7. 选择要在其中创建网络端点组的网络子网

    子网必须与已发布服务位于同一区域。

  8. 点击创建

gcloud

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

替换以下内容:

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

  • TARGET_SERVICE:要建立的服务连接。

  • REGION:要在其中创建网络端点组的区域。该区域必须与目标服务的区域相同。

  • NETWORK:要在其中创建网络端点组的网络。如果省略,则使用默认网络。

  • SUBNET:要在其中创建网络端点组的子网。子网必须与目标服务位于同一区域。如果您指定了网络,则必须指定子网。如果同时省略网络和子网,则使用默认网络,并使用指定 REGION 中的默认子网。

为负载均衡器预留外部 IP 地址

如需为负载均衡器预留外部 IP 地址,请按以下步骤操作。

控制台

  1. 在 Google Cloud 控制台中,进入 IP 地址页面。

    进入“IP 地址”

  2. 如需预留 IPv4 地址,请点击预留静态地址

  3. 为 IP 地址资源分配一个名称

  4. 将网络层级设置为优质

  5. IP 版本设置为 IPv4

  6. 类型设置为全局

  7. 点击预留

gcloud

  1. 为负载均衡器预留全球外部 IPv4 地址。

    gcloud compute addresses create ADDRESS_NAME \
        --ip-version=IPV4 --global
    

    ADDRESS_NAME 替换为 IP 地址资源的名称。

  2. 运行以下命令以查看预留的 IP 地址:

    gcloud compute addresses describe ADDRESS_NAME \
      --format="get(address)" --global
    

创建 SSL 证书资源

如需创建 HTTPS 负载均衡器,您必须向该负载均衡器的前端添加 SSL 证书资源。使用 Google 管理的 SSL 证书自行管理的 SSL 证书创建 SSL 证书资源。

  • Google 管理的证书。我们建议您使用 Google 管理的证书,因为 Google Cloud 会自动获取、管理和续订这些证书。如需创建 Google 管理的证书,您必须拥有一个网域和该网域用于预配证书的 DNS 记录。如果您还没有网域,则可以从 Google Domains 获取一个。如需了解详情,请参阅 Google Domains 使用入门。此外,您还需要更新网域的 DNS A 记录,以指向上一步中创建的负载均衡器的 IP 地址。有关详细说明,请参阅使用 Google 管理的证书

  • 自行管理的证书。自行管理的 SSL 证书是您自行获取、预配和续订的证书。自行管理的证书可由证书授权机构签名,也可以自签名。如果这些证书由证书授权机构签名,则您必须拥有一个网域。如果您还没有网域,则可以从 Google Domains 获取一个。如需了解详情,请参阅 Google Domains 使用入门。此外,您还需要更新网域的 DNS A 记录,以指向上一步中创建的负载均衡器的 IP 地址。有关详细说明,请参阅使用自行管理的 SSL 证书

    如果您暂时不想设置网域,则可以使用自签名 SSL 证书进行测试。

以下说明假定您已创建 SSL 证书资源。

配置负载均衡器

配置具有高级流量管理功能(负载均衡方案设置为 EXTERNAL_MANAGED)的全球外部应用负载均衡器以连接到代管式服务。

如果您要连接到跨多个区域部署的已发布服务,并且您已创建多个 Private Service Connect NEG 以连接到每个服务连接,则可以向后端服务添加所有 NEG。

虽然 Private Service Connect NEG 是区域性的,但此配置中的所有其他负载均衡组件都是全球性的。

控制台

开始配置

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

    转到“负载均衡”

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

基本配置

  1. 输入负载均衡器名称
  2. 不关闭窗口继续操作。

前端配置

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

  7. 点击证书列表,然后选择您创建的证书。

  8. 点击确定

  9. 点击完成

后端配置

Private Service Connect 网络端点组是一种负载均衡器后端。将同一代管式服务的所有 Private Service Connect NEG 添加到后端服务。

  1. 点击后端配置
  2. 点击后端服务和后端存储桶列表,然后点击创建后端服务
  3. 输入后端服务的名称
  4. 后端类型设置为 Private Service Connect 网络端点组
  5. 后端部分,点击 Private Service Connect 网络端点组列表,然后选择您创建的 Private Service Connect NEG。点击完成
  6. 如果您创建了多个 Private Service Connect NEG,请点击添加后端以选择另一个 NEG。

    重复此步骤,直到此代管式服务的所有 NEG 都添加到后端服务。

  7. 点击创建

路由规则

由于此配置仅包含一个后端服务,因此默认路由规则就足够了,您无需在本部分进行任何更改。

检查并最终确定

  1. 如需查看配置,请点击检查并最终确定
  2. 点击创建

gcloud

  1. 为要连接的代管式服务创建后端服务。

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

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

  2. 添加指向目标服务的 Private Service Connect NEG。

    如果您已为同一服务在不同区域中创建了多个 NEG,请重复此步骤以将所有 NEG 添加到后端服务。

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

    请替换以下内容:

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

    网址映射必须引用默认后端服务。将您创建的后端服务配置为默认后端服务。

    gcloud compute url-maps create URL_MAP_NAME \
      --default-service=BACKEND_SERVICE_NAME \
      --global
    

    请替换以下内容:

    • URL_MAP_NAME:网址映射的名称。

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

  4. 创建目标 HTTPS 代理。

    使用您创建的 SSL 证书资源创建目标 HTTPS 代理。

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

    请替换以下内容:

    • PROXY_NAME:目标 HTTPS 代理的名称。
    • URL_MAP_NAME:网址映射的名称。
    • CERTIFICATE:证书资源的名称。
  5. 创建转发规则。

    gcloud compute forwarding-rules create FWD_RULE \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=PREMIUM \
        --address=ADDRESS_NAME \
        --target-https-proxy=PROXY_NAME \
        --ports=443 \
        --global
    

    替换以下内容:

    • FWD_RULE:转发规则的名称。

    • ADDRESS_NAME:您预留用于转发规则的 IP 地址资源。

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

配置 DNS 记录

如果要使用 DNS 名称访问 Private Service Connect 后端,请为每个外部转发规则创建 DNS 名称。DNS 记录必须与网址映射中的名称对应。除非您的网址映射重写名称,否则 DNS 记录还必须与提供方服务所需的名称相对应。

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

验证配置

  1. 创建虚拟机实例。

    gcloud compute instances create VM_NAME \
        --network=NETWORK \
        --image-project=debian-cloud --image-family=debian-11 \
        --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。

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

问题排查

后端创建成功,但未建立连接

如果您为已发布的服务成功创建后端,但连接未建立,请检查后端的连接状态。连接状态可能表示您可以解决该问题的步骤。