模拟 HTTP 故障

    本文档介绍如何在 Chaos Mesh 中通过创建 HTTPChaos 实验模拟 HTTP 故障。

    HTTPChaos 是 Chaos Mesh 中的一种故障类型。通过创建 HTTPChaos 实验,你可以模拟 HTTP 服务端在请求或响应过程中发生故障的场景。目前,HTTPChaos 支持模拟以下故障类型:

    • abort:中断服务端的连接
    • delay:为目标过程注入延迟
    • replace:替换请求报文或者响应报文的部分内容
    • patch:给请求报文或响应报文添加额外内容

    HTTPChaos 支持多种类型故障的组合。在创建 HTTPChaos 实验时,如果同时配置了多种 HTTP 故障类型,实验运行时注入故障的优先级(顺序)固定为 abort -> delay -> replace -> patch。其中 abort 故障会导致短路,直接中断此次连接。

    关于 HTTPChaos 详细的配置介绍,请参见字段说明部分。

    注意事项

    在注入 HTTPChaos 相关故障之前,请注意以下事项:

    • 确保目标 Pod 上没有运行 Chaos Mesh 的 Control Manager。
    • 为使 HTTPChaos 注入生效,尽量避免复用客户端的 TCP socket。因为在注入故障前建立的 TCP socket 上进行 HTTP 请求不受 HTTPChaos 影响。
    • 在生产环境下谨慎使用非幂等语义请求(例如大多数 POST 请求)。若使用了这类请求,注入故障后可能无法通过重复请求使目标服务恢复正常状态。
    1. 打开 Chaos Dashboard 面板,单击实验页面中的新的实验按钮创建实验:

    2. 选择目标区域选择HTTP 故障,然后选择具体行为(如 RESPONSE ABORT),并填写具体配置:

    3. 提交实验。

      以上图为例,点击提交即完成了对 80 端口所有请求的响应中断配置。

    使用 YAML 文件创建实验

    Chaos Mesh 也支持使用 YAML 配置文件创建 HTTPChaos 实验。在 YAML 配置文件中,你可以模拟一种 HTTP 故障类型,也可以模拟多种 HTTP 故障的组合。

    1. 将实验配置写入到 http-abort-failure.yaml 文件中,内容示例如下:

    2. 使用 kubectl 创建实验,命令如下:

    其它故障组合示例

    1. 将实验配置写入到 http-failure.yaml 文件中,内容示例如下:

      依据此配置示例,Chaos Mesh 将向指定的 Pod 中分别注入 delay 故障、replace 故障、 故障。

    通用字段指故障注入的目标过程为 Request 或 Response 时均有意义的字段。

    target 相关的字段说明

    Request 专用字段是指故障注入的目标过程为 Request (即 target 设置为 Request) 时有意义的字段。

    Response 专用字段说明

    本地调试

    如果你不确定某种故障的效果,也可以使用 在本地测试相应功能。Chaos Mesh 同样使用 rs-tproxy 实现 HTTPChaos。