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

介绍

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 所需的网络端口。

Published At
Categories with 技术
comments powered by Disqus