Docker与Firewalld冲突怎么办?教你几招搞定docker网络

docker-ce默认会采用桥接网络,它会通过iptables来管理它的容器之间的通信和容器与宿主机的通信,如果同时启用了firewalld服务,他们都会对iptables里面的转发链写入规则,而让人头疼的是,firewalld每次启动或者重启都会强制覆盖docker的转发链,同时,docker也会通过更高优先级的策略使firewalld里面配置的条目失效。

具体冲突的原因见Docker官方文档:点此进入。官方也在这篇文章中提供了在docker节点中自定iptables规则的有效方式,也提供了一些坑的细节。

以下提供了几种解决方案,相信总有一种适合你:

第一种方式:按顺序重启firewalld与docker

仅限于利用firewalld限制docker映射之外的端口,如果是docker使用了该端口,则firewalld配置无效,如果想要对docker使用的端口进行限制,这种方式是不合适的。当启动firewalld出现冲突的时候,首先重启firewalld,然后重启docker,注意顺序不可以反过来。这是最垃圾的一种方式,当然如果它能解决燃眉之急的话也不错。

第二种方式:在DOCKER-USERchain中添加规则

DOCKER-USER 链中添加的规则会先于DOCKER链生效,因此在这个链中手动添加规则将会生效。这是最推荐的方式,没有之一。

1、不要尝试去手动修改DOCKER链,这样可能会使docker网络出现问题。
2、注意添加的规则要插在DOCKER-USER链的顶部,默认情况下所有到达docker主机的连接都会被允许。
3、限制条件就是,如果端口不是在Docker中开放的,比如22端口,那么在DOCKER链中插入规则不会生效,需要在INPUT链中设置规则。

几个示例:

## 限制 192.168.3.0/24 网络防止3306端口
iptables -I DOCKER-USER -s 192.168.3.0/24 -p tcp --dport 3306 -j DROP
## 拒绝来自所有主机的连接,除了192.168.1.1,注意修改外网卡地址
iptables -I DOCKER-USER -i eth0 ! -s 192.168.1.1 -j DROP
## 当然也可以只允许一部分IP
iptables -I DOCKER-USER -i eth0 ! -s 192.168.1.0/24 -j DROP
iptables -I DOCKER-USER -m iprange -i eth0! --src-range 192.168.1.1-192.168.1.3 -j DROP

第三种方式:最新版本的Docker支持与firewalld共存

前提:Docker版本大于等于 20.10.0,
Docker在最新的版本里自动创建了一个名为docker的 firewalld zone,并把它的所有网络接口(包括docker0)加入到了这个区域里面,执行下面的命令将你的docker0接口移到docker区域。

# Please substitute the appropriate zone and docker interface
firewall-cmd --zone=trusted --remove-interface=docker0 --permanent
firewall-cmd --reload

几个大坑

  • Docker节点可以做路由节点?NO!Docker默认将FORWALD链的规则设置为DROP,所有转发链最终都通向思路。如果实在是要做路由功能,尝试执行下面的命令。
iptables -I DOCKER-USER -i src_if -o dst_if -j ACCEPT

当然最好不要用docker节点做路由,它承担的太多了。

  • 你可以在docker 的配置文件daemon.js中设置iptables选项为false来阻止docker 使用iptables,但是这个选项并不适用于大多数用户,它会使得docker的容器网络变得更脆弱,更容易崩溃
  • 你可以通过设置 --ip 来改变docker 监听的地址,但是这并没有什么作用,它只是改变了默认值而已
  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值