如何在Ubuntu 16.04上为Docker Swarm配置Linux防火墙

介绍

Docker Swarm 是Docker的一项功能,可以很容易地大规模投放Docker窗主机和容器。 Docker窗群,或码头集群,该功能是由一个或多个主机Dockerized作为 经典的节点,任何数量的 工作节点组成。设置这样的系统需要仔细操纵Linux防火墙。 Docker Swarm正常工作所需的网络端口有:
  • TCP端口2376进行安全Docker窗客户端通信。此端口是Docker Machine工作所必需的。 Docker机器用于编排Docker主机。
  • TCP端口2377 。此端口用于Docker Swarm或群集的节点之间的通信。它只需要在管理器节点上打开。
  • TCP和UDP端口7946的节点之间的通信(容器网络发现)。
  • UDP端口4789的覆盖网络通信(容器入口联网)。
注意:除了这些端口,端口22 (SSH的流量),并在集群上运行需要提供特定服务的其他端口必须是开放。 在本文中,您将学习如何使用所有Linux发行版上提供的不同防火墙管理应用程序在Ubuntu 16.04上配置Linux防火墙。这些防火墙管理应用程序是FirewallD,IPTables工具和UFW,简单的防火墙。 UFW是Ubuntu发行版上的默认防火墙应用程序,包括Ubuntu 16.04。虽然本教程包含三种方法,每种方法都提供相同的结果,因此您可以选择最熟悉的方法。

预前准备

在继续阅读本文之前,您应该: 注意:您会注意到命令(在这篇文章中所有的命令)不能与前缀sudo 。这是因为它假设您正在使用的登录到服务器docker-machine ssh使用Docker窗机设置后命令。

方法1 - 使用UFW打开Docker Swarm端口

如果你只是设置你的Docker主机,UFW已经安装。您只需要启用和配置它。按照 本指南来了解更多关于在Ubuntu 16.04使用UFW。 在将用作Swarm管理器的节点上执行以下命令:
ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 2377/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp
之后,重新加载并启用UFW:
ufw reload
ufw enable
这可能不是必需的,但是在任何时候更改并重新启动防火墙时,都不必重新启动Docker守护程序:
systemctl restart docker
然后在将用作工作线程的每个节点上,执行以下命令:
ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 7946/tcp 
ufw allow 7946/udp 
ufw allow 4789/udp 
之后,重新加载并启用UFW:
ufw reload
ufw enable
然后重新启动Docker守护进程:
systemctl restart docker
这是所有你需要做的打开Docker Swarm使用UFW所需的端口。

方法2 - 使用FirewallD打开Docker Swarm端口

FirewallD是Fedora,CentOS和基于它们的其他Linux发行版上的默认防火墙应用程序。但FirewallD也可用于其他Linux发行版,包括Ubuntu 16.04。 如果您选择使用FirewallD而不是UFW,请首先卸载UFW:
apt-get purge ufw
然后安装FirewallD:
apt-get install firewalld
验证它是否正在运行:
systemctl status firewalld
如果没有运行,请启动它:
systemctl start firewalld
然后启用它,以便它在启动时启动:
systemctl enable firewalld
在将是Swarm管理器的节点上,使用以下命令打开必要的端口:
firewall-cmd --add-port=22/tcp --permanent
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
注意 :如果你犯了一个错误,需要删除的条目,输入:firewall-cmd --remove-port= port-number /tcp —permanent 然后,重新加载防火墙:
firewall-cmd --reload
然后重新启动Docker。
systemctl restart docker
然后在将用作Swarm工作程序的每个节点上,执行以下命令:
firewall-cmd --add-port=22/tcp --permanent
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
然后,重新加载防火墙:
firewall-cmd --reload
然后重新启动Docker。
systemctl restart docker
您已成功使用FirewallD打开Docker Swarm所需的端口。

方法3 - 使用IPTables打开Docker Swarm端口

要在任何Linux发行版上使用IPtables,您必须首先卸载任何其他防火墙实用程序。如果您从FirewallD或UFW切换,请先卸载它们。 然后安装 iptables-persistent包,它管理的iptables规则自动加载:
apt-get install iptables-persistent
接下来,使用此命令清除所有现有规则:
netfilter-persistent flush
现在,您可以添加使用规则, iptables实用程序。第一组命令应该在将用作Swarm管理器的节点上执行。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT
输入所有命令后,将规则保存到磁盘:
netfilter-persistent save
然后重新启动Docker。
sudo systemctl restart docker
在将用作Swarm工作程序的节点上,执行以下命令:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT
将这些新规则保存到磁盘:
netfilter-persistent save
然后重新启动Docker:
sudo systemctl restart docker
这是所有需要为Docker Swarm使用IPTables打开必要的端口。您可以了解更多关于这些规则在本教程是如何工作 iptables防火墙的工作原理 。 如果您希望在使用此方法后切换到FirewallD或UFW,正确的方法是首先停止防火墙:
sudo netfilter-persistent stop
然后刷新规则:
sudo netfilter-persistent flush
最后,将现在的空表保存到磁盘:
sudo netfilter-persistent save
然后可以切换到UFW或FirewallD。

结论

FirewallD,IPTables工具和UFW是Linux世界中的三个防火墙管理应用程序。您刚刚学习了如何使用每个打开设置Docker Swarm所需的网络端口。你使用哪种方法只是个人喜好的问题,因为他们都具有同等的能力。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏