Envoy本地限流请求重试配置无效问题排查求助
解决Envoy本地限流重试不生效的问题
核心问题分析
你的配置未触发重试的原因是:
- Envoy默认不重试本地过滤器返回的拒绝响应(比如本地限流的429),需要显式开启该功能
- 仅配置
retry_on: envoy-ratelimited不足以触发本地限流的重试,需结合其他参数补充配置
修改后的配置
routes: - match: prefix: "/app" route: host_rewrite_literal: app prefix_rewrite: "/" timeout: 15s cluster: app retry_policy: retry_on: envoy-ratelimited,retriable-status-codes num_retries: 4 retry_local_refused_responses: true # 关键:开启本地拒绝响应的重试 retriable_status_codes: # 标记429为可重试状态码 - 429 typed_per_filter_config: envoy.filters.http.local_ratelimit: "@type": type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit stat_prefix: app_ratelimit token_bucket: max_tokens: 5 tokens_per_fill: 5 fill_interval: 5s 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
关键修改说明
retry_local_refused_responses: true:这是触发本地限流重试的核心开关,强制Envoy处理本地过滤器返回的拒绝响应- 扩展
retry_on参数:添加retriable-status-codes并指定429,确保Envoy将本地限流返回的429状态码识别为可重试条件 - 你的配置中已开启
filter_enforced: true,这会让本地限流直接返回429而非仅标记请求,是重试触发的必要前提
额外验证步骤
- 检查过滤器链顺序:确保
envoy.filters.http.local_ratelimit位于envoy.filters.http.router之前(默认配置通常满足,若自定义过滤器链需确认) - 查看统计指标:重试触发后,
cluster.app.retry.attempts、cluster.app.retry.success指标会增长;app_ratelimit.enabled、app_ratelimit.enforced可验证本地限流是否正常工作
内容的提问来源于stack exchange,提问作者Danila
相关产品推荐
相关产品推荐

