【问题标题】:Set Istio local rate limit per path with independent quota limits使用独立的配额限制为每个路径设置 Istio 本地速率限制
【发布时间】:2022-12-11 00:08:59
【问题描述】:

我正在尝试使用 Istio 本地速率限制每个路径来限制请求。

注意:我正在尝试为每条路径维护独立的计数器。示例:/1/send 和/2/send 需要有一个独立的配额,而不是一个共同的令牌桶。

我能够使用全局速率限制来实现这个用例,因为描述符的“值”字段在此处标记为可选。

在下面找到来自全局速率限制的 sn-p:

rate_limits:
- actions: # any actions in here
- request_headers:
header_name: ":path"
descriptor_key: "PATH"
- header_value_match:
descriptor_value: post
headers:
- name: :method
prefix_match: POST

descriptors:
- key: PATH
descriptors:
- key: header_match
value: post
rate_limit:
requests_per_unit: 4
unit: minute

但是,对于本地速率限制,不能未定义 PATH 的值。因此,它希望定义一个静态路径来限制请求。

patch:
operation: MERGE
value:
route:
rate_limits:
- actions:
- request_headers:
header_name: ":path"
descriptor_key: path
- header_value_match:
descriptor_value: post
headers:
- name: :method
prefix_match: POST

descriptors:
- entries:
- key: header_match
value: post
- key: path
token_bucket:
max_tokens: 2
tokens_per_fill: 2
fill_interval: 60s
token_bucket:
max_tokens: 5
tokens_per_fill: 5
fill_interval: 60s
....
....

我希望这样的事情可以完成本地速率限制的工作。但是,上面的代码不起作用,因为它需要描述符条目“路径”的值。

此外,将路径更改为 header_value_match 而不是 request_headers 不会产生所需的功能,因为它将 /1/send、/2/send、.....、/n/send 映射到同一描述符条目下,因此使用公共配额对于所有请求。

我试过样本here。当我们使用正则表达式时,如示例所示:

actions:
- header_value_match:
descriptor_value: "status"
expect_match: true
headers:
- name: :path
string_match:
safe_regex:
google_re2: {}
regex: /status/.*

它将匹配 /status/1 , /status/2 , .... /status/n 在相同的描述符下,因此,所有这些路径都将有一个共同的配额计数器。

我正在寻找的是独立地对这些路由中的每一个进行速率限制,即每个 id。

示例:如果我有 10 req/min 的配额,我同时向 /status/1 发出 15 个请求,向 /status/2 发出 5 个请求,那么我希望 /status/1 的 5 个请求受到速率限制,所有 5 个/status/2 的请求成功通过。

但是,因为我们这里有一个公共计数器,发生的是 /status/1 的 10 个请求通过,而其他 5 个请求速率受限。并且,/status/2 的所有 5 个请求都受到速率限制,因为公共配额计数器已用完。

所以,基本上,我希望这些 URI 中的每一个都相互独立地进行速率限制。

【问题讨论】:

    标签: kubernetes istio rate-limiting envoyproxy servicemesh


    【解决方案1】:

    @aadhi95 你能建议一下你是如何在 istio 中实现本地速率限制的吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多