切换语言为:繁体

使用iptables实现模拟下游HTTP服务的各种错误

  • 爱糖宝
  • 2024-11-27
  • 2009
  • 0
  • 0

一个服务具备好的鲁棒性,肯定要兼容下游各种各样的非预期返回,防止下游API改动影响服务稳定性。

如何验证呢?肯定不能手动改下游代码实现指定的错误返回,操作成本太大了。去开发或基于开源二次开发一个代理服务成本有比较高。iptables则是一个不错的选择。大概的实现方式可见下图:

使用iptables实现模拟下游HTTP服务的各种错误

iptables用途及用到的命令

iptables可以实现路由转发,且由于是linux网络层,性能极佳,一台Linux服务可以满足N多对被测服务和下游服务的故障验证。

在测试时,可以通过手工、脚本、或封装一个执行命令服务,来对网络进行操作,实现向下游请求的干扰(请求丢弃、请求拒绝)、随机/指定错误(NAT到对应的插件服务)。

NAT
# 查询
iptables -t nat -L

# 配置端口转发,将本机的端口转发到其他机器上
# 例:通过 192.168.1.10 的 9996 端口转发到 192.168.1.10 的 9650 端口
# 先设置允许ip_forward
sysctl -w net.ipv4.ip_forward=1
# 配置DNAT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 9996 -j DNAT --to-destination 192.168.1.10:9650
# 配置SNAT
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 192.168.1.10/32 --dport 9650 -j SNAT --to-source 192.168.1.10

# 删除则是将 -A 修改为 -D 即可,或获取到对应的规则num,使用 iptables -t nat -D <num>

DROP / REJECT
# 查询
iptables -L

# 请求丢弃
iptables -A OUTPUT -p tcp -d 192.168.1.10 --dport 9650 -j DROP
# 请求拒绝
iptables -A OUTPUT -p tcp -d 192.168.1.10 --dport 9650 -j REJECT

# 删除则是将 -A 修改为 -D 即可,或获取到对应的规则num,使用 iptables -D <num>

插件服务

该服务可以用flask实现一个轻量级的HTTP服务,设置好启动参数,动态启停即可。

当设置下游响应错误、指定错误返回、或随机修改真实返回内容时,启动该服务脚本,NAT到该服务上。由这个插件服务实现对应的各种各样的错误。

0条评论

您的电子邮件等信息不会被公开,以下所有项均必填

OK! You can skip this field.