• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

在 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
0
下一篇:在Ubuntu 16.04上为Docker Swarm配置Linux防火墙

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。