本地限流¶
当请求的路由或者虚拟主机各自具有过滤器的 本地限流配置 时,HTTP 本地限流过滤器将应用 令牌桶 限流。
如果本地限流令牌桶经过检查且没有可用的令牌,则返回 429 响应(响应是可配置的)。本地限流过滤器同时会设置 x-envoy-ratelimited 头部。可配置额外的响应头部。
示例配置¶
全局设置限流器的过滤器示例配置(例如:所有虚拟主机/路由共享同一个令牌桶):
name: envoy.filters.http.local_ratelimit
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
stat_prefix: http_local_rate_limiter
token_bucket:
max_tokens: 10000
tokens_per_fill: 1000
fill_interval: 1s
filter_enabled:
runtime_key: local_rate_limit_enabled
default_value:
numerator: 100
denominator: HUNDRED
filter_enforced:
runtime_key: local_rate_limit_enforced
default_value:
numerator: 100
denominator: HUNDRED
response_headers_to_add:
- append: false
header:
key: x-local-rate-limit
value: 'true'
全局禁用限流器但为特定路由启用的过滤器示例配置:
name: envoy.filters.http.local_ratelimit
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
stat_prefix: http_local_rate_limiter
特定路由的配置:
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match: { prefix: "/path/with/rate/limit" }
route: { cluster: service_protected_by_rate_limit }
typed_per_filter_config:
envoy.filters.http.local_ratelimit:
"@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
token_bucket:
max_tokens: 10000
tokens_per_fill: 1000
fill_interval: 1s
filter_enabled:
runtime_key: local_rate_limit_enabled
default_value:
numerator: 100
denominator: HUNDRED
filter_enforced:
runtime_key: local_rate_limit_enforced
default_value:
numerator: 100
denominator: HUNDRED
response_headers_to_add:
- append: false
header:
key: x-local-rate-limit
value: 'true'
- match: { prefix: "/" }
route: { cluster: default_service }
需要注意的是如果此过滤器已经配置为全局禁用并且没有虚拟主机或路由级别的令牌桶,则限流不会生效。
统计¶
本地限流过滤器在 <stat_prefix>.http_local_rate_limit. 命名空间中输出统计信息。429 响应 – 或者已经配置的状态码 – 会提交到常规集群 动态 HTTP 统计信息 中。
名称 |
类型 |
描述 |
---|---|---|
enabled |
Counter |
与限流过滤器协商过的请求总数 |
ok |
Counter |
低于令牌桶限制的响应总数 |
rate_limited |
Counter |
没有可用令牌的响应总数(但不一定强制执行) |
enforced |
Counter |
限流所作用到的请求总数(例如:429 返回) |