arrow_back

设置网络及 HTTP 负载均衡器

加入 登录

设置网络及 HTTP 负载均衡器

1 个小时 1 个积分

GSP007

Google Cloud 自定进度实验

概览

在本实操实验中,您将了解网络负载均衡器和 HTTP 负载均衡器之间的区别,并学习如何为 Compute Engine 虚拟机 (VM) 中运行的应用设置这两种负载均衡器。

您可以通过多种方式在 Google Cloud 上实现负载均衡。 本实验将引导您完成下列负载均衡器的设置过程:

建议您自己手动输入命令,这有助于您学习核心概念。 很多实验中都有一个代码块,其中会包含所需的命令。 在实验过程中,您可以轻松复制代码块中的命令并粘贴至合适位置。

学习内容

  • 设置网络负载均衡器。

  • 设置 HTTP 负载均衡器。

  • 通过实操实验,学习网络负载均衡器和 HTTP 负载均衡器之间的区别。

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示了 Google Cloud 资源可供您使用多长时间。

Qwiklabs 实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

准备工作

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
  • 为完成实验留出时间。

注意:如果您已有自己的个人 Google Cloud 帐号或项目,请不要在此实验中使用。

注意:如果您使用的是 Chrome 操作系统设备,请在无痕式窗口中运行此实验。

如何开始实验并登录 Google Cloud 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧是实验详细信息面板,其中包含以下各项:

    • 打开 Google 控制台按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google 控制台。 该实验会启动资源并打开另一个标签页,显示登录页面。

    提示:请将这些标签页安排在不同的窗口中,并将它们并排显示。

    注意:如果您看见选择帐号对话框,请点击使用其他帐号
  3. 如有必要,请从实验详细信息面板复制用户名,然后将其粘贴到登录对话框中。点击下一步

  4. 请从实验详细信息面板复制密码,然后将其粘贴到欢迎对话框中。点击下一步

    重要提示:您必须使用左侧面板中的凭据。请勿使用您的 Google Cloud Skills Boost 凭据。 注意:在本次实验中使用您自己的 Google Cloud 帐号可能会产生额外费用。
  5. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于该帐号为临时帐号,请勿添加帐号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Cloud 控制台。

注意:您可以点击左上角的导航菜单来查看列有 Google Cloud 产品和服务的菜单。 “导航菜单”图标

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

  2. 点击继续

预配和连接到环境需要一些时间。如果您连接成功,即表示您已通过身份验证,且当前项目会被设为您的 PROJECT_ID 环境变量所指的项目。输出内容中有一行说明了此会话的 PROJECT_ID

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 键自动补全功能。

  1. (可选)您可以通过此命令列出有效的帐号名称:

gcloud auth list

输出

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:

gcloud config list project

输出

[core] project = <project_ID>

输出示例

[core] project = qwiklabs-gcp-44776a13dea667a6 Note: For full documentation of gcloud, in Google Cloud, refer to the gcloud CLI overview guide.

任务 1. 为所有资源设置默认区域和可用区

  1. 在 Cloud Shell 中设置默认可用区:

    gcloud config set compute/zone {{{project_0.startup_script.project_zone}}}
  2. 设置默认区域:

    gcloud config set compute/region {{{project_0.startup_script.project_region}}}

    如需详细了解如何选择可用区和区域,请参阅 Compute Engine 文档中的区域和可用区指南

任务 2. 创建多个网络服务器实例

对于此实验中的负载均衡场景,您需要创建三个 Compute Engine 虚拟机实例,并在这些实例上安装 Apache,然后添加一条允许 HTTP 流量访问这些实例的防火墙规则。

下方所示代码可将该可用区设置为 。通过设置标记字段,您可以一次性同时引用所有这些实例,例如使用防火墙规则。 这些命令也会在每个实例上安装 Apache,还会为每个实例提供唯一的首页。

  1. 在默认可用区中创建一个虚拟机 www1。

    gcloud compute instances create www1 \ --zone={{{project_0.startup_script.project_zone}}} \ --tags=network-lb-tag \ --machine-type=e2-medium \ --image-family=debian-11 \ --image-project=debian-cloud \ --metadata=startup-script='#!/bin/bash apt-get update apt-get install apache2 -y service apache2 restart echo "

    网络服务器:www1

    " | tee /var/www/html/index.html'
  2. 在默认可用区中创建一个虚拟机 www2。

    gcloud compute instances create www2 \ --zone={{{project_0.startup_script.project_zone}}} \ --tags=network-lb-tag \ --machine-type=e2-medium \ --image-family=debian-11 \ --image-project=debian-cloud \ --metadata=startup-script='#!/bin/bash apt-get update apt-get install apache2 -y service apache2 restart echo "

    网络服务器:www2

    " | tee /var/www/html/index.html'
  3. 在默认可用区中创建一个虚拟机 www3。

    gcloud compute instances create www3 \ --zone={{{project_0.startup_script.project_zone}}} \ --tags=network-lb-tag \ --machine-type=e2-medium \ --image-family=debian-11 \ --image-project=debian-cloud \ --metadata=startup-script='#!/bin/bash apt-get update apt-get install apache2 -y service apache2 restart echo "

    网络服务器:www3

    " | tee /var/www/html/index.html'
  4. 创建允许外部流量访问虚拟机实例的防火墙规则:

    gcloud compute firewall-rules create www-firewall-network-lb \ --target-tags network-lb-tag --allow tcp:80

现在,您需要获取这些实例的外部 IP 地址,并验证它们是否正在运行。

  1. 运行以下命令,列出您的实例。您可以在 EXTERNAL_IP 列查看这些实例的 IP 地址:

    gcloud compute instances list
  2. 运行 curl 命令,将 [IP_ADDRESS] 替换为您每个虚拟机的 IP 地址,从而验证这些虚拟机是否正在运行:

    curl http://[IP_ADDRESS]

    点击下方的检查我的进度,确认您是否创建了一组网络服务器。

    创建多个网络服务器实例

任务 3. 配置负载均衡服务

配置负载均衡服务时,您的虚拟机实例将接收发往您配置的静态外部 IP 地址的数据包。 如果虚拟机实例是使用 Compute Engine 映像创建的,则系统会自动配置实例,处理此 IP 地址。

注意: 如需详细了解如何设置网络负载均衡,请参阅外部 TCP/UDP 网络负载均衡概览指南
  1. 为负载均衡器创建静态外部 IP 地址:

    gcloud compute addresses create network-lb-ip-1 \ --region {{{project_0.startup_script.project_region}}}

    输出:

    Created [https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-03-xxxxxxxxxxx/regions/{{{project_0.startup_script.project_region}}}/addresses/network-lb-ip-1].
  2. 添加旧版 HTTP 健康检查资源:

    gcloud compute http-health-checks create basic-check
  3. 向您的实例所在的区域添加目标池。运行以下命令,创建目标池并执行必要的健康检查,确保服务正常运行:

    gcloud compute target-pools create www-pool \ --region {{{project_0.startup_script.project_region}}} --http-health-check basic-check
  4. 将实例添加到目标池:

    gcloud compute target-pools add-instances www-pool \ --instances www1,www2,www3
  5. 添加转发规则:

    gcloud compute forwarding-rules create www-rule \ --region {{{project_0.startup_script.project_region}}} \ --ports 80 \ --address network-lb-ip-1 \ --target-pool www-pool

    点击下方的检查我的进度,验证您是否已创建指向网络服务器的 L4 网络负载均衡器。

    配置负载均衡服务

任务 4. 将流量发送到您的实例

在配置了负载均衡服务后,您可以开始将流量发送到转发规则并观察流量分散到不同的实例。

  1. 输入以下命令,查看负载均衡器使用的 www-rule 转发规则的外部 IP 地址:

    gcloud compute forwarding-rules describe www-rule --region {{{project_0.startup_script.project_region}}}
  2. 访问外部 IP 地址

    IPADDRESS=$(gcloud compute forwarding-rules describe www-rule --region {{{project_0.startup_script.project_region}}} --format="json" | jq -r .IPAddress)
  3. 显示外部 IP 地址

    echo $IPADDRESS
  4. 使用 curl 命令来访问外部 IP 地址(将 IP_ADDRESS 替换为之前的命令所输出的外部 IP 地址):

    while true; do curl -m1 $IPADDRESS; done

    三个实例会随机轮流接收来自 curl 命令的响应。如果响应最初不成功,请等待大约 30 秒时间以完全加载配置,并在再次尝试前将实例的状态标记为“健康状况良好”。

  5. 使用 Ctrl + c 停止运行该命令。

任务 5. 创建 HTTP 负载均衡器

HTTP(S) 负载均衡是以 Google Front End (GFE) 为基础实现的。 这些 GFE 分布于全球各地,可通过 Google 的全球网络和控制层面协同运作。 您可以将网址规则配置为将一些网址路由到一组实例,然后将其他网址路由到其他实例。

请求始终会被路由到距离用户最近的那组实例,当然,该组实例必须有足够的处理能力且适合处理该请求才行。 如果最近的那组实例没有足够的处理能力,则系统会将该请求发送到有足够处理能力的最近一组实例。

如需使用 Compute Engine 后端设置负载均衡器,您的虚拟机必须属于某个实例组。 这个代管式实例组提供了一组虚拟机,用于运行外部 HTTP 负载均衡器的后端服务器。 对于此实验,后端会传送其各自的主机名。

  1. 首先,创建负载均衡器模板:

    gcloud compute instance-templates create lb-backend-template \ --region={{{project_0.startup_script.project_region}}} \ --network=default \ --subnet=default \ --tags=allow-health-check \ --machine-type=e2-medium \ --image-family=debian-11 \ --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://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'

    托管实例组 (MIG) 可让您在多个相同的虚拟机上运行应用。您可以利用自动化 MIG 服务让您的工作负载具有可扩缩性和高可用性,这些服务包括自动扩缩、自动修复、区域(多可用区)部署和自动更新。

  2. 基于该模板创建一个代管式实例组:

    gcloud compute instance-groups managed create lb-backend-group \ --template=lb-backend-template --size=2 --zone={{{project_0.startup_script.project_zone}}}
  3. 创建 fw-allow-health-check 防火墙规则。

    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 注意:入站流量规则允许来自 Google Cloud 健康检查系统(130.211.0.0/2235.191.0.0/16)的流量。 本实验使用目标标记 allow-health-check 来标识虚拟机
  4. 现在您的实例已启动并正在运行,接下来请设置一个全局静态外部 IP 地址,以供客户用来访问您的负载均衡器:

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

    请记下预留的 IPv4 地址:

    gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
  5. 为负载均衡器创建健康检查:

    gcloud compute health-checks create http http-basic-check \ --port 80 注意:Google Cloud 提供的健康检查机制可确定后端实例是否能够正确响应流量。 如需了解详情,请参阅“创建健康检查”文档
  6. 创建后端服务:

    gcloud compute backend-services create web-backend-service \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global
  7. 将您的实例组作为后端添加到后端服务:

    gcloud compute backend-services add-backend web-backend-service \ --instance-group=lb-backend-group \ --instance-group-zone={{{project_0.startup_script.project_zone}}} \ --global
  8. 创建网址映射关系,以将传入的请求路由到默认的后端服务:

    gcloud compute url-maps create web-map-http \ --default-service web-backend-service 注意: 网址映射是一个 Google Cloud 配置资源,用于向后端服务或后端存储桶路由请求。 例如,对于外部 HTTP(S) 负载均衡器,您可以使用单个网址映射,根据网址映射中配置的规则将请求路由到不同的目的地:

    • 针对 https://example.com/video 的请求会路由到一个后端服务。
    • 针对 https://example.com/audio 的请求会路由到一个其他后端服务。
    • 针对 https://example.com/images 的请求会路由到一个 Cloud Storage 后端存储桶。
    • 针对任何其他主机和路径组合的请求会路由到默认后端服务。
  9. 创建一个目标 HTTP 代理,以将请求路由到您的网址映射:

    gcloud compute target-http-proxies create http-lb-proxy \ --url-map web-map-http
  10. 创建一条全局转发规则,以将传入的请求路由到相应代理:

gcloud compute forwarding-rules create http-content-rule \ --address=lb-ipv4-1\ --global \ --target-http-proxy=http-lb-proxy \ --ports=80 注意:转发规则及其对应的 IP 地址构成 Google Cloud 负载均衡器的前端配置。 如需详细了解转发规则的基本知识,请参阅转发规则概览指南

点击下方的检查我的进度,验证您是否已创建 L7 HTTP(S) 负载均衡器。

创建 HTTP 负载均衡器

任务 6. 测试发送到您的实例的流量

  1. 在 Cloud 控制台的导航菜单中,转到网络服务 > 负载均衡

  2. 点击您刚刚创建的负载均衡器 (web-map-http)。

  3. 后端部分,点击后端的名称,并确认虚拟机健康状况良好。如果虚拟机健康状况不佳,请稍等片刻,然后尝试重新加载页面。

  4. 当虚拟机健康状况良好时,请打开网络浏览器并转到 http://IP_ADDRESS/(将 IP_ADDRESS 替换为负载均衡器的 IP 地址),以此测试负载均衡器。

测试过程可能需要三到五分钟时间。 如果无法连接,请等待一分钟,然后重新加载浏览器。

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

恭喜!

您已成功创建网络负载均衡器和 HTTP(s) 负载均衡器,练习了如何使用实例模板和代管式实例组。

完成挑战任务

本自学实验已纳入 Google Cloud 基础知识挑战任务中。 一项挑战任务就是一系列相关的实验,学习时按部就班地完成这些实验即可。 完成挑战任务即可赢得一枚徽章,以表彰您取得的成就。您可以公开展示徽章,还可以在您的在线简历或社交媒体帐号中加入指向徽章的链接。欢迎注册参加此挑战任务,完成后就能立即获得相应的积分。请参阅 Google Cloud Skills Boost 目录查看所有可用的请求。

参与下一项实验

欢迎您继续参与挑战任务,下一项实验是 Hello Node Kubernetes;或者,您也可以查看下面这些推荐实验:

后续步骤/了解详情

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳做法,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,有点播、直播和虚拟三种培训方式可供选择,让您不必挤占忙碌时间。各项认证则可帮助您检验和证明您在 Google Cloud 技术方面的技能与专业知识。

上次更新手册的时间:2022 年 8 月 12 日

上次测试实验的时间:2022 年 8 月 12 日

版权所有 2020 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。