docker网络iptables被清理导致容器无法访问外网

问题:

近期因调整堡垒机权限,对iptables进行调整,手贱执行了iptables -F. 所有k8s的规则很快就被kubelet加回来了, 也就每当个事.
晚上跑cicd的时候大部分容器无法拉代码, 只有少数容器可以. 后来发现和gitlab不通,初期判断是因为iptables的问题,几次调整以后还是不行.观察了一下发现所有能拉代码的全是host网络的容器. 这时才想到会不会是iptables的问题,检查发现果然是docker的转发规则全被清空了.

解决:

暴力方法是重启docker, 最简单的办法是用ansible重新推一下docker的规则即可.

iptables 命令如下:

iptables -A FORWARD -j DOCKER-ISOLATION
iptables -A FORWARD -o docker0 -j DOCKER
iptables -A DOCKER-ISOLATION -j RETURN
iptables -A FORWARD -o docker0 -j DOCKER
iptables -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i docker0 ! -o docker0 -j ACCEPT
iptables -A FORWARD -i docker0 -o docker0 -j ACCEPT

总结:

变更不要偷懒,不要暴力,否则出来混早晚要还回来.