一、namespace方式注入
容器上面没有相关的网络权限,很难在容器内注入故障,可以通过宿主机的操控方式进行网络故障注入。
启动一个容器相当于启动一个进程,它的进程就是Pid。
- 查看容器的Pid
docker inpect nginx
- 在宿主机上,通过容器Pid可以进入容器内部,可以找到进程下所有的信息,通过进入ns可以看到宿主机上容器的所有namespace名称空间所有的信息。再通过命令切换网络到容器上。使用nsenter -t pid -n 就可以切换到容器的网络名称空间
cd /proc/Pid
cd ns
nsenter -t pid -n
- 在通过用iptables/tc等命令进行故障注入,例如:
- 使用 iptables 模拟丢包
iptables 是一个强大的工具,可以用来配置Linux内核的防火墙规则。通过 iptables 可以模拟网络丢包。
示例:模拟特定IP的丢包
# 添加一条规则,丢弃来自特定IP(例如192.168.1.100)的所有进入数据包
iptables -A INPUT -s 192.168.1.100 -j DROP
# 或者,丢弃到特定IP(例如192.168.1.200