在 CentOS 7 上为Docker Swarm配置Linux防火墙
swarm工作前系统需要:
关闭selinux;
开启防火墙;不开启防火墙可能发生不能通信的问题。
开启内核转发。
Docker Swarm正常运行所需的网络端口是:
TCP 2376:用于Docker客户端之间安全通信。 Docker Machine需要此端口才能工作。 Docker Machine用于协调Docker主机。
TCP 2377:此端口用于Docker Swarm或集群的节点之间的通信。它只需要在管理器节点上打开。
TCP和UDP 7946:用于节点之间的通信(container network discovery)。
UDP 4789:用于overlay network 通信(container ingress networking)。
注意:除了这些端口之外,还必须打开端口22(用于SSH流量)以及在群集上运行特定服务所需的任何其他端口
CentOS 7上配置Linux防火墙
使用FirewallD打开Docker Swarm端口
FirewallD是CentOS 7上的默认防火墙应用程序,但在新的CentOS 7服务器上,它是默认启用的。因此,让我们启用它并添加Docker Swarm运行所需的网络端口。
#请验证其状态并且用firewalld
systemctl status firewalld systemctl start firewalld systemctl enable firewalld
在将成为Swarm管理器的节点上,使用以下命令打开必要的端口:
firewall-cmd --add-port=2376/tcp --permanent firewall-cmd --add-port=2377/tcp --permanent firewall-cmd --add-port=7946/tcp --permanent firewall-cmd --add-port=7946/udp --permanent firewall-cmd --add-port=4789/udp --permanent
然后在将用作Swarm worker的每个node节点上,执行以下命令:
firewall-cmd --add-port=2376/tcp --permanent firewall-cmd --add-port=7946/tcp --permanent firewall-cmd --add-port=7946/udp --permanent firewall-cmd --add-port=4789/udp --permanent
重新加载 firewalld
firewall-cmd --reload
重启docker
systemctl restart docker
注意:如果您输入错误并需要删除条目,请键入:
firewall-cmd --remove-port=port-number/tcp —permanent.
使用 IPTable 打开Docker Swarm端口
启用iptables,关闭 firewalld
要在任何Linux发行版上使用IPTable,您必须先卸载任何其他防火墙实用程序。要从FirewallD切换到IPTables
systemctl stop firewalld systemctl disable firewalld yum install iptables-services -y systemctl start iptables systemctl enable iptables
在开始将特定于Docker Swarm的规则添加到INPUT链之前,让我们查看该链中的默认规则:
iptables -L INPUT --line-numbers
输出应该看起来像这样:
Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED 2 ACCEPT icmp -- anywhere anywhere 3 ACCEPT all -- anywhere anywhere 4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh 5 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
总之,默认规则为服务器提供有状态保护,拒绝除已经建立的所有输入流量之外的所有输入流量。允许SSH流量。请注意上面突出显示的规则5,因为它是一个主要的拒绝规则。为了使Docker Swarm正常运行,您添加的规则需要添加到此规则之上。这意味着需要插入新规则,而不是附加到INPUT链。
在将成为Swarm管理器的节点上,使用以下命令打开必要的端口:
iptables -I INPUT 5 -p tcp --dport 2376 -j ACCEPT iptables -I INPUT 6 -p tcp --dport 2377 -j ACCEPT iptables -I INPUT 7 -p tcp --dport 7946 -j ACCEPT iptables -I INPUT 8 -p udp --dport 7946 -j ACCEPT iptables -I INPUT 9 -p udp --dport 4789 -j ACCEPT
然后在将用作Swarm worker的每个node节点上,执行以下命令:
iptables -I INPUT 5 -p tcp --dport 2376 -j ACCEPT iptables -I INPUT 6 -p tcp --dport 7946 -j ACCEPT iptables -I INPUT 7 -p udp --dport 7946 -j ACCEPT iptables -I INPUT 8 -p udp --dport 4789 -j ACCEPT
保存规则
这些规则是运行时规则,如果重新启动系统,它们将丢失。要将当前运行时规则保存到文件以便在重新引导后保持不变,请键入:
/usr/libexec/iptables/iptables.init save
这些规则现在保存在/ etc / sysconfig目录中名为iptables的文件中。如果您使用iptables -L --line-numbers查看规则,您将看到所有规则都已插入到catch-all拒绝规则之上:
验证规则:
iptables -L INPUT --line-numbers
输出:
Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED 2 ACCEPT icmp -- anywhere anywhere 3 ACCEPT all -- anywhere anywhere 4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh 5 ACCEPT tcp -- anywhere anywhere tcp dpt:2376 6 ACCEPT tcp -- anywhere anywhere tcp dpt:7946 7 ACCEPT udp -- anywhere anywhere udp dpt:7946 8 ACCEPT udp -- anywhere anywhere udp dpt:4789 9 ACCEPT tcp -- anywhere anywhere tcp dpt:http 10 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
重启docker
systemctl restart docker
共 0 条评论