介绍
Docker Swarm是 Docker 的一项功能,可以轻松地在规模上运行 Docker 主机和容器。 Docker Swarm 或 Docker 集群由一个或多个 Docker 主机组成,这些主机作为 manager 节点,以及任何数量的 worker 节点。设置此类系统需要仔细操纵 Linux 防火墙。
Docker Swarm 正确运作所需的网络端口是:
- TCP 端口
2376
用于安全的 Docker 客户端通信. 此端口需要 Docker Machine 才能工作. Docker Machine 用于组织 Docker 主机. * TCP 端口2377
. 此端口用于 Docker Swarm 或集群的节点之间的通信. 它只需要在管理节点上打开。 * TCP 和 UDP 端口7946' 用于节点之间的通信(容器网络发现)。 * UDP 端口
4789' 用于覆盖网络流量(容器入网网络)。
注:除了这些端口之外,端口 `22 (对于 SSH 流量) 和任何其他需要在集群上运行特定服务的端口必须是开放的。
在本文中,您将学习如何在Ubuntu 16.04上配置Linux防火墙,使用在所有Linux发行版上可用的不同防火墙管理应用程序。这些防火墙管理应用程序是FirewallD,IPTables Tools和UFW,Uncomplicated Firewall。UFW是Ubuntu发行版上的默认防火墙应用程序,包括Ubuntu 16.04。
前提条件
在继续这篇文章之前,你应该:
您可以按照教程(How To Provision and Manage Remote Docker Hosts with Docker Machine on Ubuntu 16.04)(https://andsky.com/tech/tutorials/how-to-provision-and-manage-remote-docker-hosts-with-docker-machine-on-ubuntu-16-04)来设置这些。
注意:您会注意到,命令(以及本文中的所有命令)没有前缀为sudo
,这是因为假设您在使用 Docker Machine 提供它后使用docker-machine ssh
命令登录服务器。
方法 1 — 使用 UFW 打开 Docker Swarm 端口
如果您刚刚安装了 Docker 主机,那么 UFW 已经安装了,您只需要启用并配置它。 请遵循 此指南以了解有关 Ubuntu 16.04 上使用 UFW 的更多信息。
在将作为Swarm管理器的节点上执行以下命令:
1[environment second]
2ufw allow 22/tcp
3ufw allow 2376/tcp
4ufw allow 2377/tcp
5ufw allow 7946/tcp
6ufw allow 7946/udp
7ufw allow 4789/udp
然后,重新加载UFW:
1[environment second]
2ufw reload
如果 UFW 未启用,请使用以下命令:
1[environment second]
2ufw enable
这可能不是必要的,但每次你对防火墙进行更改和重新启动时,重新启动 Docker 防火墙永远不会伤害:
1[environment second]
2systemctl restart docker
然后,在将作为工人功能的每个节点上,执行以下命令:
1[environment third]
2ufw allow 22/tcp
3ufw allow 2376/tcp
4ufw allow 7946/tcp
5ufw allow 7946/udp
6ufw allow 4789/udp
然后,重新加载UFW:
1[environment third]
2ufw reload
如果 UFW 未启用,请启用:
1[environment third]
2ufw enable
然后重新启动Docker DAEMON:
1[environment third]
2systemctl restart docker
这就是你需要做的,以打开使用UFW的Docker Swarm所需的端口。
方法 2 — 使用防火墙D 打开 Docker Swarm 端口
FirewallD是Fedora、CentOS和其他基于它们的Linux发行版上的默认防火墙应用程序,但FirewallD也可以在其他Linux发行版上使用,包括Ubuntu 16.04。
如果您选择使用 FirewallD 而不是 UFW,请先卸载 UFW:
1apt-get purge ufw
然后安装 Firewall:
1apt-get install firewalld
检查它是否在运行:
1systemctl status firewalld
如果它没有运行,请开始:
1systemctl start firewalld
然后启用它以便在 boot 上启动:
1systemctl enable firewalld
在将成为Swarm管理器的节点上,使用以下命令打开所需的端口:
1[environment second]
2firewall-cmd --add-port=22/tcp --permanent
3firewall-cmd --add-port=2376/tcp --permanent
4firewall-cmd --add-port=2377/tcp --permanent
5firewall-cmd --add-port=7946/tcp --permanent
6firewall-cmd --add-port=7946/udp --permanent
7firewall-cmd --add-port=4789/udp --permanent
注意:如果您犯了一个错误,需要删除一个条目,请键入: firewall-cmd --remove-port=port-number/tcp -permanent
。
然后,重新加载防火墙:
1[environment second]
2firewall-cmd --reload
然后重新启动 Docker。
1[environment second]
2systemctl restart docker
然后,在将作为Swarm工人功能的每个节点上,执行以下命令:
1[environment third]
2firewall-cmd --add-port=22/tcp --permanent
3firewall-cmd --add-port=2376/tcp --permanent
4firewall-cmd --add-port=7946/tcp --permanent
5firewall-cmd --add-port=7946/udp --permanent
6firewall-cmd --add-port=4789/udp --permanent
然后,重新加载防火墙:
1[environment third]
2firewall-cmd --reload
然后重新启动 Docker。
1[environment third]
2systemctl restart docker
您已成功使用 FirewallD 打开 Docker Swarm 所需的端口。
方法 3 — 使用 IPTables 打开 Docker Swarm 端口
要在任何 Linux 发行版上使用 IPtables,您必须先卸载任何其他防火墙实用程序. 如果您正在从 FirewallD 或 UFW 切换,请先卸载它们。
然后安装iptables-persistent
包,管理IPtables规则的自动加载:
1apt-get install iptables-persistent
接下来,使用此命令清除任何现有规则:
1netfilter-persistent flush
现在你可以使用iptables
实用程序添加规则,这个第一套命令应该在作为Swarm管理器的节点上执行。
1[environment second]
2iptables -A INPUT -p tcp --dport 22 -j ACCEPT
3iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
4iptables -A INPUT -p tcp --dport 2377 -j ACCEPT
5iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
6iptables -A INPUT -p udp --dport 7946 -j ACCEPT
7iptables -A INPUT -p udp --dport 4789 -j ACCEPT
输入所有命令后,将规则保存到磁盘:
1[environment second]
2netfilter-persistent save
然后重新启动 Docker。
1[environment second]
2sudo systemctl restart docker
在将作为Swarm工人的节点上,执行这些命令:
1[environment third]
2iptables -A INPUT -p tcp --dport 22 -j ACCEPT
3iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
4iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
5iptables -A INPUT -p udp --dport 7946 -j ACCEPT
6iptables -A INPUT -p udp --dport 4789 -j ACCEPT
将这些新规保存在磁盘上:
1[environment third]
2netfilter-persistent save
然后重新启动 Docker:
1[environment third]
2sudo systemctl restart docker
您可以了解更多关于这些规则如何工作的教程 How the Iptables Firewall Works。
如果您想要在使用此方法后切换到 FirewallD 或 UFW,正确的方法是先停止防火墙:
1sudo netfilter-persistent stop
然后放下规则:
1sudo netfilter-persistent flush
最后,将现在空的表保存到磁盘:
1sudo netfilter-persistent save
然后您可以切换到 UFW 或 FirewallD。
结论
FirewallD、IPTables Tools 和 UFW 是 Linux 世界中的三种防火墙管理应用程序,您刚刚学会了如何使用它们来打开设置 Docker Swarm 所需的网络端口。