跳转到内容

故障注入

故障注入可帮助您测试服务在不利条件下的表现——包括慢速后端、间歇性故障或完全中断。通过在网关层注入故障,可以在不修改后端代码的情况下验证熔断器、重试逻辑和回退机制。

Nantian Gateway 支持两种故障类型,作为 HTTPRoute 过滤器配置:

故障类型作用适用场景
延迟在将请求转发至后端之前添加固定延迟测试超时处理、慢后端场景
中断立即返回 HTTP 错误状态而不连接后端测试错误处理、熔断器触发

向一定比例的请求注入固定延迟:

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: fault-test
spec:
parentRefs:
- name: my-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /api
filters:
- type: ExtensionRef
extensionRef:
group: gateway.networking.k8s.io
kind: HTTPRouteFilter
name: fault-injection
backendRefs:
- name: api-service
port: 8080
- filters:
- type: RequestMirror
requestMirror:
backendRef:
name: fault-injector
port: 8080

在 30% 的请求上注入 5 秒延迟,验证熔断器是否开启:

# 1. 配置熔断器
# 参见 BackendLBPolicy 配置中的 maxInflightRequests
# 2. 注入延迟
# 在指向后端的路由上应用延迟过滤器
# 3. 发送流量并观察
# 超过阈值后熔断器应跳闸
# 指标: nantian_gw_dataplane_circuit_breaker_open_total

中断 50% 的请求,验证重试是否成功:

# 1. 配置重试
# 参见重试策略指南中的重试配置
# 2. 注入中断
# 应用中断过滤器,在 50% 请求上返回 503
# 3. 观察
# 成功的响应表明重试已处理中断
# 追踪 nantian_gw_dataplane_retry_attempts_total

注入超过路由超时时间的延迟:

# 1. 设置一个较短的路由超时(如 2 秒)
# 2. 注入 5 秒延迟
# 3. 请求应失败并返回 504 Gateway Timeout

故障注入过滤器是强大的测试工具,但在生产环境中使用很危险:

安全实践:

  • 使用灰度路由 — 创建一个独立的用于故障测试的路由,仅匹配测试请求头或路径
  • 从小开始 — 从 5% 注入率开始,逐步增加
  • 持续监控 — 在注入期间观察错误率仪表板
  • 自动化清理 — 使用 CronJob 或 TTL 在固定时间窗口后移除测试路由
  • 隔离生产流量 — 对 staging 后端而非生产服务运行故障测试

通过指标跟踪故障注入行为:

指标描述
nantian_gw_dataplane_fault_injection_delays_total注入的延迟次数
nantian_gw_dataplane_fault_injection_aborts_total注入的中断次数

结合熔断器重试策略指南,构建完整的弹性测试框架。