设置使用后端存储分区的负载平衡器

借助后端存储分区,您可以使用 Google Cloud Storage 存储分区进行 HTTP(S) 负载平衡

使用 Cloud Storage 存储分区作为负载平衡器后端

外部 HTTP(S) 负载平衡器使用网址映射将来自指定网址的流量定向到后端服务或后端存储分区。一种常见的使用场景是:

  • 向后端服务发送动态内容(例如数据)请求。
  • 向后端存储分区发送静态内容(例如图片)请求。

在下图中,负载平衡器将路径为 /love-to-fetch/ 的流量发送到 europe-north 地区的 Cloud Storage 存储分区。所有其他请求都会转到 us-east 地区的 Cloud Storage 存储分区。

将流量分配到 Cloud Storage(点击可放大)
将流量分配到 Cloud Storage(点击可放大)

本文档介绍如何创建外部 HTTP(S) 负载平衡器,以将针对静态内容的请求路由到 Cloud Storage 存储分区。配置使用后端存储分区的负载平衡器后,对以 /love-to-fetch 开头的网址路径的请求会发送到 europe-north Cloud Storage 存储分区,所有其他请求会发送到 us-east Cloud Storage 存储分区。

准备工作

确保您的设置符合前提条件。

设置默认项目

  1. 如果您要使用 gcloudgsutil 实用程序,可以按照《快速入门:使用 gsutil 工具》文档中的说明安装这两个实用程序。
  2. 设置默认项目

    控制台

    a.转到 Google Cloud Console 中的首页。
    转到 Google Cloud 首页

    b. 在 Google Cloud 的右侧,从下拉菜单中选择一个项目。

    gcloud 或 gsutil

     gcloud config set project [PROJECT_ID]
    

     gsutil config set project [PROJECT_ID]
    
    • [PROJECT_ID] - 您将用于本指南的项目。

权限

要按照本指南操作,您需要在项目中创建 Cloud Storage 存储分区和负载平衡器。您应该是项目的 Owner 或 Editor,或者应具有下列 Compute Engine IAM 角色

任务 所需角色
创建负载平衡器组件 Network Admin
创建 Cloud Storage 存储分区 Storage Object Admin

如需了解详情,请参阅以下指南:

准备 Cloud Storage 存储分区和内容

准备 Cloud Storage 存储分区的过程如下所示:

  • 创建存储分区。
  • 将内容复制到存储分区。
  • 提供对存储分区的公开访问权限。

创建 Cloud Storage 存储分区

如果您已有 Cloud Storage 存储分区,则可以跳到下一步

创建存储分区以用作 HTTP(S) 负载平衡的后端时,我们建议您选择一个多地区存储分区,该存储分区会自动跨多个 Google Cloud 地区复制对象。这可以提高内容的可用性,并提高应用的故障容忍度。

控制台

  1. 在 Cloud Console 中打开 Cloud Storage 浏览器:
    打开 Cloud Storage 浏览器
  2. 点击创建存储分区
  3. 为以下字段指定值,其他所有字段保留默认值:

    属性 值(输入值或选择指定的选项)
    名称 为每个存储分区输入一个全局唯一的名称。如果您输入的名称不是唯一的,则会看到一条消息,提示您尝试使用其他名称
    位置类型 对于本示例,请选择地区。对于生产部署,我们建议您选择多地区存储分区。
    位置 对一个存储分区选择 us-east1
    对另一个存储分区选择 europe-north1
    默认存储类别 标准
    访问权限控制 统一
  4. 点击创建

  5. 记下新创建的 Cloud Storage 存储分区的名称,以便在下一步中使用;在下一步中,这两个名称分别称为 BUCKET_1_NAMEBUCKET_2_NAME

gsutil

gsutil mb -p PROJECT_ID -c standard -l us-east1 -b on gs://BUCKET_1_NAME
gsutil mb -p PROJECT_ID -c standard -l europe-north1 -b on gs://BUCKET_2_NAME

将图形文件复制到 Cloud Storage 存储分区

为了测试设置,请将图形文件从公共 Cloud Storage 存储分区复制到您自己的 Cloud Storage 存储分区。

  1. 在 Cloud Shell 中运行以下命令,将存储分区名称变量替换为您的 Cloud Storage 存储分区名称:

    gsutil cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_1_NAME/never-fetch/
    
    gsutil cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET_2_NAME/love-to-fetch/
    
  2. 在 Cloud Console 中,点击刷新存储分区,以验证图形文件已复制。

将 Cloud Storage 存储分区设为公开

请将 Cloud Storage 存储分区设为可公开读取。通过此设置,互联网上的任何人都可以查看您的对象及其元数据(不包括 ACL)。此外,互联网上的任何人还可以列出您的存储分区中的对象。请勿在您的公共存储分区中包含敏感信息。

为了降低意外泄露敏感信息的可能性,不要将公开对象和敏感数据存储在同一个存储分区中。如需了解详情,请参阅建议的存储分区架构

控制台

授予所有用户查看存储分区中对象的权限。对每个存储分区重复此过程。

  1. 在 Cloud Console 中打开 Cloud Storage 浏览器:
    打开 Cloud Storage 浏览器
  2. 导航到该存储分区,然后点击权限标签页。
  3. 点击并选择添加成员
  4. 新成员中输入 allUsers
  5. 对于角色,请选择存储 > Storage Object Viewer
  6. 点击保存

gsutil

gsutil iam ch allUsers:objectViewer gs://BUCKET_1_NAME
gsutil iam ch allUsers:objectViewer gs://BUCKET_2_NAME

预留外部 IP 地址

现在您的存储分区已启动并正在运行,接下来请设置一个全球静态外部 IP 地址,以供客户用来访问您的负载平衡器。

此步骤是可选的,但建议执行,因为静态外部 IP 地址会提供单个地址以指向您的网域。

控制台

  1. 转到 Google Cloud Console 中的“外部 IP 地址”页面。
    转到“外部 IP 地址”页面
  2. 点击预留静态地址以预留 IPv4 地址。
  3. 指定名称 example-ip
  4. 将网络层级设置为优质
  5. IP 版本设置为 IPv4
  6. 类型设置为全局
  7. 点击预留
  8. 确保将类型设置为全局
  9. 点击预留

gcloud

gcloud compute addresses create example-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

请记下预留的 IPv4 地址:

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

创建使用后端存储分区的 HTTP 负载平衡器

如果要创建 HTTPS 负载平衡器,您必须向该负载平衡器的前端添加 SSL 证书资源。如需了解详情,请参阅 SSL 证书概览

控制台

  1. 转到 Google Cloud Console 中的“负载平衡”页面。
    转到“负载平衡”页面
  2. HTTP(S) 负载平衡下,点击开始配置
  3. 选择从互联网到我的虚拟机
  4. 名称设置为 http-lb

配置后端

  1. 点击后端配置
  2. 对于后端服务和后端存储分区,点击创建或选择后端服务和后端存储分区,然后点击后端存储分区 > 创建后端存储分区
  3. 名称设置为 cats
  4. 点击 Cloud Storage 存储分区下的浏览
  5. 选择您的 BUCKET_1_NAME,然后点击选择
  6. 点击创建

重复此步骤以创建 dogs,然后浏览到 BUCKET_2_NAME

配置主机规则和路径匹配器

主机规则和路径匹配器是外部 HTTP(S) 负载平衡器网址映射的配置组件。

  1. 点击主机和路径规则
  2. 对于 cats,您无法更改默认的主机和路径。这意味着所有不匹配的请求都会转到 cats
  3. 对于 dogs,在主机字段中输入 *
  4. 对于 dogs,在路径字段中输入 /love-to-fetch/*

    主机 路径 后端
    所有不匹配的项(默认) 所有不匹配的项(默认) cats
    * /love-to-fetch/* dogs

配置前端

  1. 点击前端配置
  2. 验证以下选项配置了这些值:

    属性 值(按照说明输入值或选择选项)
    协议 HTTP
    网络服务层 优质
    IP 版本 IPv4
    IP 地址 example-ip
    端口 80

    如果您希望创建 HTTPS 负载平衡器而不是 HTTP 负载平衡器,则必须拥有 SSL 证书 (gcloud compute ssl-certificates list),并且必须按如下所示填写相关字段。

    属性 值(按照说明输入值或选择选项)
    协议 HTTP(S)
    网络服务层级 优质
    IP 版本 IPv4
    IP 地址 example-ip
    端口 443
    选择证书或创建新证书
  3. 点击完成

检查配置

  1. 点击检查并最终确认
  2. 检查后端存储分区主机和路径规则前端
  3. 点击创建
  4. 等待负载平衡器完成创建。
  5. 点击负载平衡器的名称 (http-lb)。
  6. 请记下负载平衡器的 IP 地址,以便在下一个任务中使用。它被称为 IP_ADDRESS

gcloud

配置后端

gcloud compute backend-buckets create cats \
    --gcs-bucket-name=BUCKET_1_NAME
gcloud compute backend-buckets create dogs \
    --gcs-bucket-name=BUCKET_2_NAME

配置网址映射

gcloud compute url-maps create http-lb \
    --default-backend-bucket=cats
gcloud compute url-maps add-path-matcher http-lb \
    --path-matcher-name=path-matcher-2 \
    --new-hosts=* \
    --backend-bucket-path-rules="/love-to-fetch/*=dogs" \
    --default-backend-bucket=cats

配置目标代理

gcloud compute target-http-proxies create http-lb-proxy \
    --url-map=http-lb

配置转发规则

gcloud compute forwarding-rules create http-lb-forwarding-rule \
    --address=example-ip \
    --global \
    --target-http-proxy=http-lb-proxy \
    --ports=80

向后端存储分区发送流量

现在您已经配置了负载平衡器,接下来可以开始向负载平衡器的 IP 地址发送流量了。

控制台

  1. 转到 Google Cloud Console 中的“负载平衡”页面。
    转到“负载平衡”页面
  2. 点击 http-lb,展开您刚创建的负载平衡器。
  3. 后端部分中,确认后端存储分区运行状况良好。您的后端存储分区旁边应该有一个绿色对勾标记。否则,请先尝试重新加载页面。Cloud Console 可能需要一段时间才能指示后端运行状况良好。
  4. 在 Cloud Console 显示后端存储分区运行状况良好后,您可以使用网络浏览器转到 https://IP_ADDRESS/love-to-fetch/two-dogs.jpg 和 https://IP_ADDRESS/never-fetch/three-cats.jpg 来测试您的负载平衡器,其中 IP_ADDRESS负载平衡器的 IP 地址。您的浏览器应该会呈现一个页面,其中的内容显示各个图形文件:

    • http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
    • http://IP_ADDRESS/never-fetch/three-cats.jpg

gcloud

使用 curl 命令测试网址的响应。将 IP_ADDRESS 替换为负载平衡器的 IPv4 地址

curl http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
curl http://IP_ADDRESS/never-fetch/three-cats.jpg

限制

  • 只有外部 HTTP(S) 负载平衡器支持后端存储分区
  • Identity-Aware Proxy 不支持后端存储分区

后续步骤