将资源从传统应用负载平衡器迁移到全球外部应用负载平衡器

本文档介绍了如何将传统应用负载平衡器基础架构资源迁移到全球外部应用负载平衡器基础架构。

准备工作

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

设置默认项目

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

gcloud config set project PROJECT_ID

PROJECT_ID 替换为您在本指南中使用的项目。

权限

若要按照本文档中的说明操作,您必须拥有在 Google Cloud 项目中创建 Compute Engine 虚拟机 (VM) 实例、防火墙规则、预留 IP 地址和 Cloud Storage 存储分区的权限。您必须是项目的 Owner 或 Editor,或者必须拥有以下 Compute Engine IAM 角色

任务 所需角色
创建实例 Compute Instance Admin(Beta 版)角色 (roles/compute.instanceAdmin)
添加和移除防火墙规则 Compute Security Admin 角色 (roles/compute.securityAdmin)
创建负载均衡器组件 Compute Network Admin 角色 (roles/compute.networkAdmin)
创建项目(可选) Project Creator 角色 (roles/resourcemanager.projectCreator)
创建 Cloud Storage 存储桶 Storage Object Admin 角色 (roles/storage.objectAdmin)

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

创建传统应用负载平衡器资源

在本文档中,您将创建以下传统应用负载平衡器资源,然后将其迁移到全球外部应用负载平衡器基础架构。

  • 包含虚拟机的代管式实例组。
  • Cloud Storage 存储桶。
  • 一个 HTTP 传统版应用负载平衡器,其后端是代管式实例组和 Cloud Storage 存储桶。

创建托管式实例组

本部分介绍了如何使用运行 Apache 的 Linux 虚拟机创建代管式实例组。代管式实例组根据您指定的实例模板创建每个托管式实例。

创建实例模板

  1. 在 Google Cloud 控制台中,前往实例模板页面。

    转到“实例模板”

  2. 点击创建实例模板

  3. 对于名称,输入 lb-backend-template

  4. 对于区域,请选择 REGION

  5. 启动磁盘部分,确保将启动磁盘的映像设置为 Debian 映像,例如 Debian GNU/Linux 12 (bookworm)。本文中的说明使用仅 Debian 支持的命令,例如 apt-get

  6. 点击高级选项

  7. 点击网络,然后在网络标记字段中输入 allow-health-check

  8. 点击管理,然后在启动脚本字段中输入以下脚本。

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2
    
  9. 点击创建

运行 gcloud compute instance-templates create 命令以创建模板。

gcloud compute instance-templates create lb-backend-template \
    --region=REGION \
    --network=default \
    --subnet=default \
    --tags=allow-health-check \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

创建代管式实例组

  1. 在 Google Cloud 控制台中,前往实例组页面。

    进入“实例组”

  2. 点击创建实例组

  3. 选择新的托管式实例组(无状态)

  4. 对于名称,输入 lb-backend-example

  5. 对于实例模板,请选择实例模板 lb-backend-template

  6. 位置下方,选择单个可用区

  7. 对于区域,选择 REGION

  8. 对于可用区,请选择 ZONE

  9. 对于自动扩缩模式,选择“开启:在实例组中添加和移除实例”

    实例数下限实例数上限设置为 2

  10. 端口映射部分中,点击添加端口

  11. 对于端口名称,请输入 http。对于端口号,请输入 80

  12. 点击创建

运行 gcloud compute instance-groups managed create 命令,以基于模板创建代管式实例组。

gcloud compute instance-groups managed create lb-backend-example \
    --template=lb-backend-template \
    --size=2 --zone=ZONE

运行以下命令以向实例组添加已命名端口:

gcloud compute instance-groups set-named-ports lb-backend-example \
    --named-ports http:80 \
    --zone ZONE

配置防火墙规则

在本部分中,您将创建 fw-allow-health-check 防火墙规则,并使用目标标记 allow-health-check 来标识虚拟机。这是一种入站流量规则,允许来自 Google Cloud 健康检查系统(130.211.0.0/2235.191.0.0/16)的流量。

  1. 在 Google Cloud 控制台中,前往防火墙政策页面。

    转到“防火墙政策”

  2. 点击创建防火墙规则

  3. 对于名称,输入 fw-allow-health-check

  4. 对于网络,选择 default

  5. 对于目标,选择 Specified target tags

  6. 目标标记字段中,输入 allow-health-check

  7. 来源过滤条件设置为 IPv4 范围

  8. 来源 IPv4 范围设置为 130.211.0.0/2235.191.0.0/16

  9. 协议和端口部分中,选择指定的协议和端口

  10. 选中 TCP 复选框,然后输入端口号 80

  11. 点击创建

运行 gcloud compute firewall-rules create 命令以创建防火墙规则。

gcloud compute firewall-rules create fw-allow-health-check \
    --network=default \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp:80

创建 Cloud Storage 存储桶

在本部分中,您将创建一个 Cloud Storage 存储桶以供负载平衡器访问。对于生产部署,我们建议您选择一个多区域存储桶,该存储桶会自动跨多个 Google Cloud 区域复制对象。这可以提高内容的可用性,并提高应用的故障容忍度。

  1. 在 Google Cloud 控制台中,前往 Cloud Storage 存储分区页面。

    转到“Cloud Storage 存储桶”

  2. 点击创建

  3. 为存储桶命名框中,输入 storage-backend-bucket,然后点击继续

  4. 点击选择数据存储位置

  5. 位置类型设置为区域,然后指定 REGION

  6. 点击创建

  7. 可选:如果您看到“系统将禁止公开访问”对话框,请清除禁止公开访问此存储桶复选框,然后点击确认

运行 gcloud storage buckets create 命令以创建存储桶:

gcloud storage buckets create gs://storage-backend-bucket \
    --default-storage-class=standard \
    --location=REGION --uniform-bucket-level-access

将内容转移到 Cloud Storage 存储桶

如需在创建负载均衡器后测试存储桶,请将以下图片文件从公共 Cloud Storage 存储桶复制到您自己的 Cloud Storage 存储桶。

gcloud
  1. 点击 激活 Cloud Shell

  2. 在 Cloud Shell 中运行以下命令:

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://storage-backend-bucket/never-fetch/

在 Google Cloud 控制台中,点击存储桶详情页面上的刷新,以验证文件是否已成功复制。

将 Cloud Storage 存储桶设为可公开读取

当您将 Cloud Storage 存储桶设为可公开读取时,互联网上的任何人都可以列出和查看其对象,并查看其元数据(不包括 ACL)。请勿在您的公共存储桶中包含敏感信息。

为了降低意外泄露敏感信息的可能性,不要将公开对象和敏感数据存储在同一个存储桶中。

如需向所有用户授予查看存储桶中对象的权限,请按照以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 Cloud Storage 存储分区页面。

    转到“Cloud Storage 存储桶”

  2. 点击 storage-backend-bucket 名称,然后点击权限标签页。

  3. 点击授予访问权限

  4. 新的主账号框中,输入 allUsers

  5. 选择角色框中,依次选择 Cloud Storage > Storage Object Viewer

  6. 点击保存

  7. 点击允许公开访问

运行 gcloud storage buckets add-iam-policy-binding 命令,向所有用户授予查看存储分区中对象的权限:

gcloud storage buckets add-iam-policy-binding gs://storage-backend-bucket \
    --member=allUsers \
    --role=roles/storage.objectViewer

保留外部 IP 地址

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

  1. 在 Google Cloud 控制台中,前往外部 IP 地址页面。

    转到“外部 IP 地址”

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

  3. 对于名称,输入 lb-ipv4-1

  4. 网络服务层级设置为优质

  5. IP 版本设置为 IPv4

  6. 类型设置为全局

  7. 点击预留

如需预留外部 IP 地址,请运行以下命令:

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global
  

如需记下预留的 IPv4 地址,请运行以下命令:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global
  

设置传统应用负载平衡器

在本部分中,您将在客户端和负载平衡器之间使用 HTTP(前端)。

开始配置

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

    转到“负载均衡”

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

基本配置

  1. 负载平衡器名称字段中,输入 web-map-http
  2. 点击前端配置,配置以下字段,然后点击完成
    • 协议HTTP
    • IP 版本IPv4
    • IP 地址lb-ipv4-1
    • 端口443
  3. 点击后端配置
  4. 后端服务和后端存储分区中,点击创建后端服务,然后执行以下操作:
    1. 配置以下字段:
      • 名称web-backend-service
      • 协议HTTP
      • 已命名的端口http
    2. Backends > New backend 部分,配置以下字段,然后点击 Done
      • 实例组lb-backend-example
      • 端口号80
    3. 对于健康检查,请点击创建健康检查,指定以下字段,然后点击保存
      • 名称http-basic-check
      • 协议HTTP
    4. 日志记录部分,选中启用日志记录复选框。
    5. 点击创建
  5. 点击确定
  6. 后端服务和后端存储桶中,点击创建后端存储桶,配置以下字段,然后点击创建
    • 后端存储桶名称cats
    • Cloud Storage 存储桶storage-backend-bucket
  7. 点击确定
  8. 点击主机和路径规则
  9. 对于 cats,在主机 2字段中输入 *,在路径 2字段中输入 /never-fetch/*
  10. 点击检查并最终确定
  11. 查看负载均衡器配置设置。
  12. 点击创建
  1. 创建健康检查。

    gcloud compute health-checks create http http-basic-check \
        --port 80
    
  2. 创建后端服务。

    gcloud compute backend-services create web-backend-service \
        --load-balancing-scheme=EXTERNAL \
        --protocol=HTTP \
        --port-name=http \
        --health-checks=http-basic-check \
        --enable-logging \
        --logging-sample-rate=1.0 \
        --enable-cdn \
        --global
    
  3. 将您的实例组作为后端添加到后端服务。

    gcloud compute backend-services add-backend web-backend-service \
        --instance-group=lb-backend-example \
        --instance-group-zone=ZONE \
        --global
    
  4. 添加后端存储桶。

    gcloud compute backend-buckets create cats \
        --gcs-bucket-name=storage-backend-bucket
    
  5. 创建网址映射以将传入请求路由到后端服务和后端存储桶。

    gcloud compute url-maps create web-map-http \
        --default-service web-backend-service
    
    gcloud compute url-maps add-path-matcher web-map-http \
        --path-matcher-name=cats-path-matcher \
        --default-backend-bucket=cats \
        --new-hosts="*" \
        --backend-bucket-path-rules="/never-fetch/*=cats"
    
  6. 创建目标 HTTP 代理以将请求路由到网址映射。

    gcloud compute target-http-proxies create http-lb-proxy \
        --url-map=web-map-http
    
  7. 创建全局转发规则以将传入请求路由到代理。

    gcloud compute forwarding-rules create web-map-http-forwarding-rule \
        --load-balancing-scheme=EXTERNAL \
        --address=lb-ipv4-1 \
        --global \
        --target-http-proxy=http-lb-proxy \
        --ports=80
    

测试发送到实例的流量

现在负载均衡服务已运行,您可以将流量发送到转发规则并会发现流量被分散到不同的实例。

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

    转到“负载均衡”

  2. 点击 web-map-http

  3. 前端部分,记下负载均衡器的 IP:Port

  4. 如需测试后端实例,请在网络浏览器的地址栏中输入 http://IP_ADDRESS

    您的浏览器会呈现一个页面,其中的内容显示提供该页面的实例的名称及其可用区(例如 Page served from: lb-backend-example-xxxx)。

  5. 如需测试后端存储桶,请在网络浏览器的地址栏中输入 http://IP_ADDRESS/never-fetch/three-cats.jpg

    您的浏览器会呈现图片。

迁移传统应用负载平衡器资源

在本部分中,您将后端服务、后端存储桶和转发规则迁移到全球外部应用负载平衡器基础架构。

迁移后端服务

  1. 为后端服务做好迁移准备。

    gcloud beta compute backend-services update web-backend-service \
        --external-managed-migration-state=PREPARE \
        --global
    

    等待一段时间(大约 6 分钟)。

  2. 将部分流量(例如 10%)发送到后端服务。

    gcloud beta compute backend-services update web-backend-service \
        --external-managed-migration-state=TEST_BY_PERCENTAGE \
        --external-managed-migration-testing-percentage=10 \
        --global
    

    等待一段时间(大约 6 分钟)。

    资源准备就绪后,会将 10% 的请求发送到全球外部应用负载平衡器基础架构,将 90% 的请求发送到传统应用负载平衡器基础架构。

  3. 访问后端服务。

    在网络浏览器的地址栏中输入 http://IP_ADDRESS。如果您看到 Page served from: lb-backend-example-xxxx 消息,请运行以下命令来提高百分比。

    gcloud beta compute backend-services update web-backend-service \
        --external-managed-migration-state=TEST_BY_PERCENTAGE \
        --external-managed-migration-testing-percentage=50 \
        --global
    

    重复此过程,直到达到 100%。

  4. 可选:检查后端服务的日志。

  5. 完成测试,并将所有流量发送到后端服务。

    gcloud beta compute backend-services update web-backend-service \
        --external-managed-migration-state=TEST_ALL_TRAFFIC \
        --global
    
  6. 可选:检查后端服务的日志。

  7. 将后端服务的架构更改为 EXTERNAL_MANAGED

    gcloud beta compute backend-services update web-backend-service \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --global
    

    等待一段时间(大约 6 分钟),以便后端服务完全迁移到全球外部应用负载平衡器基础架构。

  8. 可选:检查后端服务的日志。您会看到负载均衡方案为 EXTERNAL_MANAGED

迁移后端存储桶

  1. 为后端存储桶做好迁移准备。

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --external-managed-backend-bucket-migration-state=PREPARE \
        --global
    

    等待一段时间(大约 6 分钟)。

  2. 将部分流量(例如 10%)发送到后端存储桶。

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --external-managed-backend-bucket-migration-state=TEST_BY_PERCENTAGE \
        --external-managed-backend-bucket-migration-testing-percentage=10 \
        --global
    

    等待一段时间(大约 6 分钟)。

    资源准备就绪后,会将 10% 的请求发送到全球外部应用负载平衡器基础架构,将 90% 的请求发送到传统版应用负载平衡器基础架构。

  3. 访问后端存储桶。

    在网络浏览器的地址栏中输入 http://IP_ADDRESS/never-fetch/three-cats.jpg。如果您看到猫的图片,请运行以下命令来提高百分比。重复此过程,直到达到 100%。

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --external-managed-backend-bucket-migration-state=TEST_BY_PERCENTAGE \
        --external-managed-backend-bucket-migration-testing-percentage=50 \
        --global
    
  4. 可选:检查后端存储桶的日志。

  5. 完成测试,并将所有流量发送到后端存储桶。

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --external-managed-backend-bucket-migration-state=TEST_ALL_TRAFFIC \
        --global
    
  6. 可选:检查后端存储桶的日志。

迁移转发规则

  1. 将转发规则的方案更改为 EXTERNAL_MANAGED

    gcloud beta compute forwarding-rules update web-map-http-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --global
    

    请等待一段时间(大约 6 分钟),以便转发规则完全迁移到全球外部应用负载平衡器基础架构。

  2. 可选:检查转发规则的日志。您会看到负载均衡方案为 EXTERNAL_MANAGED

后续步骤