将 HTTP 负载均衡器与 Cloud Armor 结合使用

概述

Google Cloud HTTP(S) 负载平衡是在 Google 网络边缘的 Google 全球接入点 (POP) 中实施的。定向到 HTTP(S) 负载均衡器的用户流量进入离用户最近的 POP,然后通过 Google 的全球网络负载平衡到最近的具有足够可用容量的后端。

Cloud Armor IP 允许列表/拒绝列表使您能够限制或允许访问位于 Google Cloud 边缘的 HTTP(S) 负载均衡器,尽可能靠近用户和恶意流量。这可以防止恶意用户或流量消耗资源或进入您的虚拟私有云 (VPC) 网络。

在本实验中,您将配置一个具有全局后端的 HTTP 负载均衡器,如下图所示。然后,您对负载均衡器进行压力测试,并使用 Cloud Armor 将压力测试 IP 列入黑名单。

将 HTTP 负载均衡器与 Cloud Armor 结合使用

目标

在本实验中,您将学习如何执行以下任务:

  • 创建 HTTP 和健康检查防火墙规则
  • 配置两个实例模板
  • 创建两个托管实例组
  • 使用 IPv4 和 IPv6 配置 HTTP 负载均衡器
  • 压力测试 HTTP 负载均衡器
  • 将 IP 地址列入拒绝名单以限制对 HTTP 负载均衡器的访问

配置 HTTP 和健康检查防火墙规则

配置防火墙规则以允许来自 Google Cloud 运行状况检查器的 HTTP 流量和 TCP 流量到后端。

创建 HTTP 防火墙规则

创建防火墙规则以允许后端的 HTTP 流量。

  1. 在 Cloud Console 中,导航至 导航菜单> VPC 网络>防火墙。
将 HTTP 负载均衡器与 Cloud Armor 结合使用
  1. 注意现有的ICMPinternalRDPSSH防火墙规则。

每个 Google Cloud 项目都以 default 网络和这些防火墙规则开始。

  1. 单击创建防火墙规则
  2. 设置以下值,将所有其他值保留为默认值:
PropertyValue (type value or select option as specified)
Namedefault-allow-http
Networkdefault
TargetsSpecified target tags
Target tagshttp-server
Source filterIPv4 Ranges
Source IPv4 ranges0.0.0.0/0
Protocols and portsSpecified protocols and ports, and then check tcp, type:80

确保在源 IP 范围中包含/0以指定所有网络。

  1. 单击创建

创建健康检查防火墙规则

运行状况检查确定负载均衡器的哪些实例可以接收新连接。对于 HTTP 负载平衡,对负载平衡实例的运行状况检查探测来自范围130.211.0.0/22和35.191.0.0/16. 您的防火墙规则必须允许这些连接。

  1. 仍在防火墙规则页面中,单击创建防火墙规则
  2. 设置以下值,将所有其他值保留为默认值:
PropertyValue (type value or select option as specified)
Namedefault-allow-health-check
Networkdefault
TargetsSpecified target tags
Target tagshttp-server
Source filterIPv4 Ranges
Source IPv4 ranges130.211.0.0/22, 35.191.0.0/16
Protocols and portsSpecified protocols and ports, and then check tcp

确保一一 输入两个源 IP 范围,并在它们之间按空格键。

配置实例模板并创建实例组

托管实例组使用实例模板来创建一组相同的实例。使用这些来创建 HTTP 负载均衡器的后端。

配置实例模板

实例模板是一种 API 资源,用于创建 VM 实例和托管实例组。实例模板定义机器类型、启动磁盘映像、子网、标签和其他实例属性。为us-east1europe-west1创建一个实例模板。

  1. 在 Cloud Console 中,导航至导航菜单> Compute Engine >实例模板,然后点击创建实例模板。
  2. 对于Name,输入us-east1-template
  3. 对于系列,选择N1
  4. 单击 NETWORKING, DISKS, SECURITY, MANAGEMENT, SOLE-TENANCY.
将 HTTP 负载均衡器与 Cloud Armor 结合使用
  1. 单击管理选项卡。
将 HTTP 负载均衡器与 Cloud Armor 结合使用
  1. Metadata下,单击+ ADD ITEM并指定以下内容:
KeyValue
startup-script-urlgs://cloud-training/gcpnet/httplb/startup.sh

startup-script-url指定实例启动时执行的脚本 。此脚本安装 Apache 并更改欢迎页面以包含客户端 IP 以及 VM 实例的名称、区域和区域。随意在这里探索这个脚本。

  1. 单击网络
  2. 设置以下值并将所有其他值保留为默认值:
PropertyValue (type value or select option as specified)
Network tagshttp-server
Networkdefault
Subnetworkdefault (us-east1)

网络标签http-server确保HTTP健康检查防火墙规则适用于这些实例。

  1. 单击创建
  2. 等待创建实例模板。

现在通过复制us-east1- template 为子网 b创建另一个实例模板:

  1. 单击us-east1-template,然后单击顶部的复制选项。
  2. 对于名称,输入europe-west1-template
  3. 单击NETWORKING, DISKS, SECURITY, MANAGEMENT, SOLE-TENANCY
  4. 单击网络
  5. 对于Subnetwork,选择default (europe-west1)
  6. 单击完成
  7. 单击创建

创建托管实例组

在us-east1中创建一个托管实例组,在europe-west1中创建一个。

  1. 仍在Compute Engine中,点击左侧菜单中的实例组
将 HTTP 负载均衡器与 Cloud Armor 结合使用
  1. 单击创建实例组
  2. 设置以下值,将所有其他值保留为默认值:
PropertyValue (type value or select option as specified)
Nameus-east1-mig
LocationMultiple zones
Regionus-east1
Instance templateus-east1-template
Autoscaling > Autoscaling metrics > Click dropdown > Metric typeCPU utilization
Target CPU utilization80, click Done.
Cool-down period45
Minimum number of instances1
Maximum number of instances5

托管实例组提供自动扩展功能,允许您根据负载的增加或减少自动从托管实例组添加或删除实例。自动缩放可帮助您的应用程序优雅地处理流量增加,并在资源需求较低时降低成本。您只需定义自动缩放策略,自动缩放器就会根据测量的负载执行自动缩放。

  1. 单击创建

现在重复相同的过程,在europe-west1中为europe-west1-mig创建第二个实例组:

  1. 单击创建实例组
  2. 设置以下值,将所有其他值保留为默认值:
PropertyValue (type value or select option as specified)
Nameeurope-west1-mig
LocationMultiple zones
Regioneurope-west1
Instance templateeurope-west1-template
Autoscaling > Autoscaling metrics > Click dropdown > Metric typeCPU utilization
Target CPU utilization80, click Done.
Cool-down period45
Minimum number of instances1
Maximum number of instances5
  1. 单击创建

验证后端

验证是否正在两个区域中创建 VM 实例并访问它们的 HTTP 站点。

  1. 仍在Compute Engine中,点击左侧菜单中的VM 实例
  2. 注意以us-east1-mig和开头的实例europe-west1-mig。

这些实例是托管实例组的一部分。

  1. 单击的实例的外部 IPus-east1-mig。

您应该看到客户端 IP(您的 IP 地址)、主机名(以 开头us-east1-mig)和服务器位置(us-east1 中的一个区域)。

  1. 单击的实例的外部 IPeurope-west1-mig。

您应该会看到客户端 IP(您的 IP 地址)、主机名(以 开头europe-west1-mig)和服务器位置(europe-west1 中的一个区域)。

将 HTTP 负载均衡器与 Cloud Armor 结合使用

主机名服务器位置标识 HTTP 负载均衡器发送流量的 位置。

配置 HTTP 负载均衡器

配置 HTTP 负载均衡器以平衡两个后端(us-east1 中的 us-east1-migeurope-west1 中的 europe-west1-mig)之间的流量,如网络图所示:

将 HTTP 负载均衡器与 Cloud Armor 结合使用

开始配置

  1. 在 Cloud Console 中,点击导航菜单 > 点击网络服务>负载均衡,然后点击创建负载均衡器
  2. HTTP(S) 负载平衡下,单击开始配置
将 HTTP 负载均衡器与 Cloud Armor 结合使用
  1. 选择从 Internet 到我的 VM 或无服务器服务,然后单击继续
  2. 名称设置为http-lb。

配置后端

后端服务将传入流量引导到一个或多个附加的后端。每个后端都由一个实例组和额外的服务容量元数据组成。

  1. 单击后端配置
  2. 对于后端服务和后端存储桶,单击创建后端服务
  3. 设置以下值,将所有其他值保留为默认值:
PropertyValue (select option as specified)
Namehttp-backend
Instance groupus-east1-mig
Port numbers80
Balancing modeRate
Maximum RPS50
Capacity100
  1. 单击完成
  2. 单击添加后端
  3. 设置以下值,将所有其他值保留为默认值:
PropertyValue (select option as specified)
Instance groupeurope-west1-mig
Port numbers80
Balancing modeUtilization
Maximum backend utilization80
Capacity100

此配置意味着负载均衡器尝试将europe-west1-mig的每个实例保持在或低于 80% 的 CPU 利用率。

  1. 单击完成
  2. 对于运行状况检查,选择创建运行状况检查
将 HTTP 负载均衡器与 Cloud Armor 结合使用
  1. 设置以下值,将所有其他值保留为默认值:
PropertyValue (select option as specified)
Namehttp-health-check
ProtocolTCP
Port80

运行状况检查确定哪些实例接收新连接。此 HTTP 运行状况检查每 5 秒轮询一次实例,最多等待 5 秒以获取响应,并将 2 次成功或 2 次失败的尝试分别视为健康或不健康。

  1. 单击保存
  2. 选中启用日志记录框。
  3. 采样率设置为1:
将 HTTP 负载均衡器与 Cloud Armor 结合使用
  1. 单击创建以创建后端服务。
将 HTTP 负载均衡器与 Cloud Armor 结合使用

配置前端

主机和路径规则决定了您的流量将如何被引导。例如,您可以将视频流量引导至一个后端,而静态流量则引导至另一个后端。但是,您不会在本实验中配置主机和路径规则。

  1. 点击前端配置
  2. 指定以下内容,将所有其他值保留为默认值:
PropertyValue (type value or select option as specified)
ProtocolHTTP
IP versionIPv4
IP addressEphemeral
Port80
  1. 单击完成
  2. 单击添加前端 IP 和端口
  3. 指定以下内容,将所有其他值保留为默认值:
PropertyValue (type value or select option as specified)
ProtocolHTTP
IP versionIPv6
IP addressEphemeral
Port80
  1. 单击完成

HTTP(S) 负载平衡支持客户端流量的 IPv4 和 IPv6 地址。客户端 IPv6 请求在全局负载平衡层终止,然后通过 IPv4 代理到您的后端。

查看并创建 HTTP 负载均衡器

  1. 点击Review and finalize
将 HTTP 负载均衡器与 Cloud Armor 结合使用
  1. 查看后端服务前端
将 HTTP 负载均衡器与 Cloud Armor 结合使用
  1. 点击创建
  2. 等待创建负载均衡器。
  3. 单击负载均衡器的名称 ( http-lb )。
  4. 记下下一个任务的负载均衡器的 IPv4 和 IPv6 地址。它们将分别称为[LB_IP_v4]和[LB_IP_v6]。

IPv6 地址是十六进制格式的地址。

测试 HTTP 负载均衡器

现在您已为后端创建了 HTTP 负载均衡器,请验证流量是否已转发到后端服务。

访问 HTTP 负载均衡器

要测试对 HTTP 负载均衡器的 IPv4 访问,请在浏览器中打开一个新选项卡并导航到http://[LB_IP_v4]. 确保替换[LB_IP_v4]为负载均衡器的 IPv4 地址。

访问 HTTP 负载均衡器最多可能需要 5 分钟。同时,您可能会收到 404 或 502 错误。继续尝试,直到您看到其中一个后端的页面。

根据您与us-east1europe-west1的接近程度,您的流量将被转发到us-east1-migeurope-west1-mig实例。

如果您有本地 IPv6 地址,请通过导航到 尝试使用 HTTP 负载均衡器的 IPv6 地址http://[LB_IP_v6]。确保替换[LB_IP_v6]为负载均衡器的 IPv6 地址。

压力测试 HTTP 负载均衡器

使用 .创建一个新 VM 以模拟 HTTP 负载均衡器上的负载siege。然后,确定负载高时两个后端之间的流量是否平衡。

  1. 在控制台中,导航到导航菜单> Compute Engine > VM 实例。
  2. 单击创建实例
  3. 设置以下值,将所有其他值保留为默认值:
PropertyValue (type value or select option as specified)
Namesiege-vm
Regionus-west1
Zoneus-west1-c
SeriesN1

鉴于us-west1更接近us-east1而不是europe-west1,流量应该只转发到us-east1-mig(除非负载太高)。

  1. 单击创建
  2. 等待siege-vm实例被创建。
  3. 对于siege-vm,单击SSH启动终端并连接。
  4. 运行以下命令,安装 siege:
sudo apt-get -y install siege
  1. 要将 HTTP 负载均衡器的 IPv4 地址存储在环境变量中,请运行以下命令,替换[LB_IP_v4]为 IPv4 地址:
export LB_IP=[LB_IP_v4]
  1. 要模拟负载,请运行以下命令:
siege -c 250 -t150s http://$LB_IP

输出应如下所示:

将 HTTP 负载均衡器与 Cloud Armor 结合使用
  1. 在 Cloud Console 的导航菜单 上,点击网络服务>负载平衡
  2. 单击后端
  3. 点击http-backend
  4. 导航到http-lb
  5. 单击监控选项卡。
  6. 监控北美和两个后端之间的前端位置(总入站流量) 2 到 3 分钟。

起初,流量应该只定向到us-east1-mig,但随着 RPS 的增加,流量也会定向到europe-west1-mig

这表明默认情况下流量被转发到最近的后端,但如果负载非常高,流量可以分布在后端。

  1. 返回siege-vm的SSH终端。
  2. 如果它仍在运行,请按CTRL+C停止围攻。

siege-vm 外部IP 加入黑名单

使用 Cloud Armor 禁止siege-vm访问 HTTP 负载均衡器。

创建安全策略

使用siege-vm的拒绝名单规则创建 Cloud Armor 安全策略。

  1. 在控制台中,导航到导航菜单 > Compute Engine > VM 实例
  2. 注意siege-vm外部 IP。这将被称为。[SIEGE_IP]

有多种方法可以识别尝试访问您的 HTTP 负载均衡器的客户端的外部 IP 地址。例如,您可以在 BigQuery 中检查 VPC 流日志捕获的流量,以确定大量传入请求。

  1. 在 Cloud Console 中,导航至导航菜单>网络安全Cloud Armor
  2. 单击创建策略
  3. 设置以下值,将所有其他值保留为默认值:
PropertyValue (type value or select option as specified)
Namedenylist-siege
Default rule actionAllow
  1. 单击下一步
  2. 单击添加规则
  3. 设置以下值,将所有其他值保留为默认值:
PropertyValue (type value or select option as specified)
ConditionEnter the SIEGE_IP
ActionDeny
Deny status403 (Forbidden)
Priority1000
  1. 单击完成
将 HTTP 负载均衡器与 Cloud Armor 结合使用
  1. 单击下一步
  2. 单击添加目标
  3. 对于类型,选择负载均衡器后端服务
  4. 对于Target,选择http-backend
  5. 单击创建策略

或者,您可以将默认规则设置为拒绝,并且仅允许列表/允许来自授权用户/IP 地址的流量。

  1. 等待创建策略,然后再进行下一步。

验证安全策略

确认siege-vm无法访问 HTTP 负载均衡器。

  1. 返回siege-vm的SSH终端。
  2. 要访问负载均衡器,请运行以下命令:
curl http://$LB_IP

输出应如下所示:

将 HTTP 负载均衡器与 Cloud Armor 结合使用

浏览安全策略日志以确定此流量是否也被阻止。

  1. 在控制台中,导航到导航菜单>网络安全Cloud Armor
  2. 点击拒绝名单围攻
  3. 单击日志
  4. 单击查看策略日志
  5. 在 Logging 页面上,确保清除Query preview中的所有文本。选择资源到Cloud HTTP Load Balancer > http-lb-forwarding-rule > http-lb然后点击Add
  6. 现在单击运行查询
  7. 在查询结果中展开一个日志条目。
  8. 展开httpRequest

请求应该来自siege-vm IP 地址。如果没有,请展开另一个日志条目。

  1. 展开jsonPayload
  2. 展开enforcedSecurityPolicy
  3. 请注意,configuredAction名称DENY为。 denylist-siege
将 HTTP 负载均衡器与 Cloud Armor 结合使用

Cloud Armor 安全策略会创建日志,可以对其进行探索以确定流量何时被拒绝和何时被允许,以及流量的来源。

恭喜!

您在 us-east1 和 europe-west1 中配置了具有后端的 HTTP 负载均衡器。然后,您使用虚拟机对负载均衡器进行压力测试,并使用 Cloud Armor 将该虚拟机的 IP 地址列入黑名单。您可以浏览安全策略日志以确定流量被阻止的原因。

发表评论

您的电子邮箱地址不会被公开。