【问题描述】
在服务器上设置了防火墙规则,旨在限制只有特定的两个IP地址能够访问2181、6379、9200端口。但在测试时发现:
2181端口(直接监听在宿主机上)被拒绝访问,符合预期。
9200和6379端口(docker容器映射的端口)可以正常访问,与预期不符。
【问题分析】
排查思路如下:
1、检查firewalld的状态,发现存在警告信息。
2、考虑到docker容器在启动时会自动配置iptables规则以允许容器端口的访问。推测firewalld可能在启动时或规则重载时删除了docker自动添加的iptables规则。
原因说明如下:
firewalld在启动时或规则重载时,会清除iptables中的部分或全部规则,这会影响到docker容器通过iptables映射的端口。docker在默认情况下会使用iptables来管理容器的网络流量,包括端口映射。因此,当firewalld与docker同时运行时,如果firewalld的配置或启动顺序不当,可能会导致docker容器的端口映射失效。
【问题解决方法】
通过修改docker服务配置,禁用docker对iptables的自动管理解决。详细步骤操作如下:
vim /etc/systemd/system/docker.service
在在[Service]部分下,找到ExecStart=行,并在其后面添加--iptables=false参数。
systemctl daemon-reload
systemctl restart docker