如何在Ubuntu16.04上为DockerSwarm配置Linux防火墙

来自菜鸟教程
跳转至:导航、​搜索

介绍

Docker Swarm 是 Docker 的一项功能,可以轻松地大规模运行 Docker 主机和容器。 Docker Swarm 或 Docker 集群由一个或多个 Dockerized 主机组成,这些主机充当 manager 节点,以及任意数量的 worker 节点。 设置这样的系统需要仔细操作 Linux 防火墙。

Docker Swarm 正常运行所需的网络端口是:

  • TCP 端口 2376 用于安全的 Docker 客户端通信。 Docker Machine 需要此端口才能工作。 Docker Machine 用于编排 Docker 主机。
  • TCP 端口 2377。 此端口用于 Docker Swarm 或集群的节点之间的通信。 它只需要在管理节点上打开。
  • TCP 和 UDP 端口 7946 用于节点之间的通信(容器网络发现)。
  • UDP 端口 4789 用于覆盖网络流量(容器入口网络)。

注意: 除了这些端口之外,端口 22(用于 SSH 流量)以及在集群上运行特定服务所需的任何其他端口都必须打开。


在本文中,您将了解如何使用所有 Linux 发行版上提供的不同防火墙管理应用程序在 Ubuntu 16.04 上配置 Linux 防火墙。 这些防火墙管理应用程序是 FirewallD、IPTables Tools 和 UFW,即简单防火墙。 UFW 是 Ubuntu 发行版(包括 Ubuntu 16.04)上的默认防火墙应用程序。 虽然本教程涵盖了三种方法,但每种方法都提供相同的结果,因此您可以选择最熟悉的一种。

先决条件

在继续阅读本文之前,您应该:

注意: 您会注意到命令(以及本文中的所有命令)没有以 sudo 为前缀。 这是因为假设您在使用 Docker Machine 配置后使用 docker-machine ssh 命令登录到服务器。


方法 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,请使用以下命令执行此操作:

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,请启用它:

ufw enable

然后重启 Docker 守护进程:

systemctl restart docker

这就是使用 UFW 为 Docker Swarm 打开必要端口所需要做的一切。

方法 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

这就是使用 IPTables 为 Docker Swarm 打开必要端口所需的全部内容。 您可以在教程 Iptables 防火墙的工作原理 中了解有关这些规则如何工作的更多信息。

如果您希望在使用此方法后切换到 FirewallD 或 UFW,正确的方法是先停止防火墙:

sudo netfilter-persistent stop

然后刷新规则:

sudo netfilter-persistent flush

最后,将现在为空的表保存到磁盘:

sudo netfilter-persistent save

然后您可以切换到 UFW 或 FirewallD。

结论

FirewallD、IPTables Tools 和 UFW 是 Linux 世界中的三个防火墙管理应用程序。 您刚刚学习了如何使用它们打开设置 Docker Swarm 所需的网络端口。 您使用哪种方法只是个人喜好问题,因为它们都具有同等能力。