背景前提:Docker版本大于等于 20.10.0,Docker在最新的版本里自动创建了一个名为docker的 firewalld zone,并把它的所有网络接口(包括docker0)加入到了这个区域里面,执行将docker0接口移到docker zone的命令,就可以实现docker与firewalld并存。
问题:
如果实现了并存,且重启firewalld之间不再影响docker。那通过配置firewalld zone=docker的规则还会对docker生效么?是不是如果不关闭docker的ipatbles的功能(iptables=false),无论是firewalld在zone=[public]还是zone=docker配置规则都是不会影响到docker的服务访问的?
如果实现了 Docker 和 firewalld 的并存,那么 Docker 的 iptables 规则和 firewalld 的规则是同时生效的。因此,如果你配置了 firewalld 的 zone=docker 的规则,那么这些规则仍然会对 Docker 容器产生影响。无论是在 firewalld 的 public 区域还是 docker 区域设置规则,都会生效。
需要注意的是,如果不关闭 Docker 的 iptables 功能,那么 Docker 仍然会维护自己的 iptables 规则。如果同时使用了 iptables 和 firewalld,那么两个防火墙的规则会同时生效,这可能会导致规则冲突或者不符合预期的情况。因此,如果要使用 firewalld,建议关闭 Docker 的 iptables 功能,让 firewalld 管理所有的网络规则,以避免规则冲突。可以在 Docker 的配置文件中设置 iptables=false 来关闭 Docker 的 iptables 功能。
收起如果已经成功实现了Docker与Firewalld的并存,并且重启Firewalld也不会影响Docker,那么配置Firewalld的zone=docker的规则仍然会对Docker生效。因为Docker的网络接口已经被加入到docker这个Firewalld zone中,所以任何应用程序的网络流量都会被Firewalld检查和过滤。
至于iptables的功能,如果设置为false,那么Docker将不再使用iptables来管理网络规则,而是使用nftables。在这种情况下,Firewalld在zone=[public]或zone=docker配置规则都会影响到Docker的服务访问。但是需要注意的是,如果使用nftables,那么Firewalld的规则将不会被转换为iptables规则,因此需要使用nftables规则来配置Firewalld。