使用 Google Cloud Armor 配置速率限制
本文档介绍了如何对 Cloud Service Mesh 客户端应用公平份额速率限制,以帮助您管理服务的公平消耗,并防止恶意或行为不当的客户端使服务过载。
配置过程需要您创建 Cloud Armor 安全政策和端点政策。如果您不熟悉 Cloud Armor 安全政策,建议您阅读安全政策概览。
速率限制的运作方式
速率限制功能可限制服务在指定时间间隔内可从客户端接收的请求数量,从而提高服务的可用性,并在客户端之间公平地分配可用容量。Cloud Armor 对超过速率限制阈值的入站流量应用请求阈值、间隔和操作,这些都是用户可配置的。对于 Cloud Service Mesh 速率限制,Cloud Armor 使用安全政策类型 CLOUD_ARMOR_INTERNAL_SERVICE
,安全政策规则使用 fairshare
操作。
每个 Cloud Armor 安全政策均包含一条或多条规则。每条规则都包含匹配条件和操作。当请求满足匹配条件时,Cloud Armor 会对该请求应用配置的操作。配置速率限制时,您需要创建一条安全政策规则,其中包含前面提到的某项速率限制操作,以及适合您使用情形的任何匹配条件(包括使用 --src-ip-ranges "*"
标志匹配所有入站请求)。政策中的规则按优先级顺序进行评估。数值优先级最低的规则具有最高逻辑优先级,并且最先进行评估。Cloud Armor 会执行服务器端速率限制,这意味着速率限制由服务器强制执行,而不是由客户端设备强制执行。
速率限制操作具有其他字段,可用于微调速率限制阈值。以下字段在所有速率限制规则之间共享:
rate_limit_threshold_count
:每个用户配置的时间间隔内,Cloud Armor 必须应用速率限制的请求数量。interval_sec
:rate_limit_threshold_count
的时间间隔(以秒为单位)。exceed_action
:对超出速率限制阈值的请求执行的操作。conform_action
:对未超出速率限制阈值的请求执行的操作。
使用 Cloud Service Mesh 进行速率限制
本部分简要介绍了使用 Cloud Service Mesh 配置速率限制所需的步骤。
首先,您需要创建端点政策,并确保 EndpointMatcher
选择您的 Cloud Service Mesh 实例,以对入站流量强制执行速率限制。EndpointMatcher
使用端点标签来标识其所附加到的实例。
接下来,您将创建一个类型为 CLOUD_ARMOR_INTERNAL_SERVICE
的 Cloud Armor 安全政策。此安全政策类型唯一可用的操作是 fairshare
。在此政策中,您将创建一个具有 fairshare
操作的默认规则,以对不符合优先级更高的规则的所有流量应用公平共享速率限制。您可以添加新的优先级更高的规则,以便对不同类型的流量应用不同的速率限制。例如,您可以为特定 IP 地址范围设置较低或较高的速率限制。
最后,在完成创建包含一项或多项速率限制规则的安全政策后,您需要将其附加到端点政策。附加安全政策后,Cloud Armor 会对所有符合规则匹配条件并连接到所选服务网格实例的传入流量应用服务器端速率限制。EndpointMatcher
Cloud Service Mesh 会在所有实例中配置全局速率限制。这意味着,系统会汇总所有服务器实例的总流量,以确定何时强制执行速率限制。向此类服务发送请求的任何客户端都必须遵守相同的强制执行阈值和政策。这意味着,当总流量速率超过阈值时,系统会丢弃一些请求。
如需使用 Cloud Service Mesh 配置速率限制,请参阅使用 Envoy 配置 Google Cloud Armor 速率限制。
限制
使用 Cloud Armor 配置速率限制时,请注意以下限制:
- Cloud Armor 配额会限制您可以创建的自定义规则数量。我们建议您在创建超过 20 条自定义规则之前,先检查配额。
- 每个端点政策资源都必须引用不同的安全政策。如果安全政策已被现有端点政策引用,则无法将其附加到新的端点政策。
- 具有
fairshare
操作的安全政策仅限于ALL
速率限制键。 - 当您部署具有
fairshare
操作的安全政策时,Cloud Armor 在强制执行规则期间会忽略preview
字段。 - 如果您使用 TCP 流量路由,则无法配置 Cloud Armor 安全政策。
此外,类型为 CLOUD_ARMOR_INTERNAL_SERVICE
的 Cloud Armor 安全政策仅限于以下自定义表达式语言 (CEL) 属性:
request.headers
request.method
request.path
request.scheme
request.query
如需详细了解 CEL 属性,请参阅配置自定义规则语言属性。