速率限制服务 (RLS) (proto)

service.ratelimit.v3.RateLimitRequest

[service.ratelimit.v3.RateLimitRequest proto]

速率限制请求的主要消息。速率限制服务的设计目的是完全通用的,因为它可以对任意分层键值对进行操作。加载的配置将解析请求并找到要应用的最具体的限制。此外,RateLimitRequest 可以包含多个“描述符”以限制。当提供多个描述符时,服务器将对所有描述符进行限制,并在其中任何一个超过限制时返回 OVER_LIMIT 响应。如果需要,这将启用更复杂的应用程序级速率限制场景。

{
  "domain": ...,
  "descriptors": [],
  "hits_addend": ...
}
domain

(string) 所有速率限制请求都必须指定一个域。这使得配置能够按应用程序进行,而不必担心重叠。例如,“envoy”。

descriptors

(repeated extensions.common.ratelimit.v3.RateLimitDescriptor) 所有速率限制请求都必须指定至少一个 RateLimitDescriptor。每个描述符都由服务处理(见下文)。如果任何描述符超过限制,则整个请求被认为超过限制。

hits_addend

(uint32) 速率限制请求可以选择指定请求添加到匹配限制的命中次数。如果消息中未设置该值,则请求将匹配限制增加 1。可以通过将过滤器状态值 envoy.ratelimit.hits_addend 设置为所需数字来覆盖此值。无效数字(< 0)或数字将被忽略。

service.ratelimit.v3.RateLimitResponse

[service.ratelimit.v3.RateLimitResponse proto]

来自 ShouldRateLimit 调用的响应。

{
  "overall_code": ...,
  "statuses": [],
  "response_headers_to_add": [],
  "request_headers_to_add": [],
  "raw_body": ...,
  "dynamic_metadata": {...}
}
overall_code

(service.ratelimit.v3.RateLimitResponse.Code) 考虑到 RateLimitRequest 消息中传递的所有描述符的总体响应代码。

statuses

(repeated service.ratelimit.v3.RateLimitResponse.DescriptorStatus) 一个 DescriptorStatus 消息列表,其长度与 RateLimitRequest 中传递的描述符列表的长度匹配。调用者可以使用它来确定哪些单独的描述符失败,以及/或所有描述符的当前配置限制是什么。

response_headers_to_add

(repeated config.core.v3.HeaderValue) 要添加到响应的标头列表。

request_headers_to_add

(repeated config.core.v3.HeaderValue) 要在转发时添加到请求的标头列表。

raw_body

(bytes) 当响应代码不是 OK 时,要发送到下游客户端的响应主体。

dynamic_metadata

(Struct) 可选的响应元数据,将作为动态元数据发出,供下一个过滤器使用。此元数据位于由需要它的扩展过滤器规范名称指定的命名空间中。

service.ratelimit.v3.RateLimitResponse.RateLimit

[service.ratelimit.v3.RateLimitResponse.RateLimit proto]

按每时间单位的请求数和单位本身来定义实际的速率限制。

{
  "name": ...,
  "requests_per_unit": ...,
  "unit": ...
}
name

(string) 此限制的名称或描述。

requests_per_unit

(uint32) 每时间单位的请求数。

unit

(service.ratelimit.v3.RateLimitResponse.RateLimit.Unit) 时间单位。

枚举 service.ratelimit.v3.RateLimitResponse.RateLimit.Unit

[service.ratelimit.v3.RateLimitResponse.RateLimit.Unit proto]

标识速率限制的时间单位。

UNKNOWN

(默认) ⁣时间单位未知。

SECOND

⁣表示秒的时间单位。

MINUTE

⁣表示分钟的时间单位。

HOUR

⁣表示小时的时间单位。

DAY

⁣表示一天的时间单位。

MONTH

⁣表示一个月的时间单位。

YEAR

⁣表示一年的时间单位。

service.ratelimit.v3.RateLimitResponse.DescriptorStatus

[service.ratelimit.v3.RateLimitResponse.DescriptorStatus proto]

{
  "code": ...,
  "current_limit": {...},
  "limit_remaining": ...,
  "duration_until_reset": {...}
}
code

(service.ratelimit.v3.RateLimitResponse.Code) 单个描述符的响应代码。

current_limit

(service.ratelimit.v3.RateLimitResponse.RateLimit) 服务器配置的当前限制。这对调试等很有用。

limit_remaining

(uint32) 当前时间单位内剩余的限制。

duration_until_reset

(Duration) 到当前限制窗口重置的持续时间。

枚举 service.ratelimit.v3.RateLimitResponse.Code

[service.ratelimit.v3.RateLimitResponse.Code proto]

UNKNOWN

(默认) ⁣响应代码未知。

OK

⁣响应代码,用于通知请求数低于限制。

OVER_LIMIT

⁣响应代码,用于通知请求数超过限制。