Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。
使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。
Docker Swarm正常运行所需的网络端口是:
2376
端口。Docker Machine需要此端口才能工作。Docker Machine用于编排Docker主机。2377
用于Docker Swarm或集群的节点之间的通信。7946
用于节点之间的通信。4789
。注意: 除了这些端口之外,还必须打开端口22(用于SSH流量)以及任何在群集上运行特定服务所需的其他端口。腾讯云相关端口配置详见:腾讯云CVM安全组配置文档
在本文中,您将学习如何使用防火墙管理应用程序在Ubuntu 16.04上配置Linux防火墙。防火墙管理应用程序包括FirewallD,IPTables工具和UFW(简单防火墙)。UFW是Ubuntu发行版上的默认防火墙应用程序。本教程涵盖三种方法,但每种方法都提供相同的效果,您可以选择操作起来最得心应手的方法。
在继续本文之前,您应该:
注意: 您会注意到本文中的所有命令都没有sudo前缀。那是因为本文假设您在使用Docker Machine配置它之后会使用docker-machine ssh命令登录服务器。
如果您刚刚设置了Docker主机,默认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
然后在worker的每个节点上,执行以下命令:
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
这样您就打开了所有必要端口。
FirewallD是Fedora,CentOS的默认防火墙应用程序。但是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
然后在worker的每个节点上,执行以下命令:
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上的必要的端口。
要在任何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 worker的节点上,执行以下命令:
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
如果您希望切换到FirewallD或UFW,正确的方法是首先停止防火墙:
sudo netfilter-persistent stop
然后刷新规则:
sudo netfilter-persistent flush
最后,将现在空表保存到磁盘:
sudo netfilter-persistent save
然后你可以切换到UFW或FirewallD。
FirewallD,IPTables和UFW是Linux中的三个最常用的防火墙管理程序。本教程讲解了如何打开设置Docker Swarm所需的网络端口。您可以从以上方法中任选一种,它们没有任何区别,赶快买几台服务器去尝试下吧:https://cloud.tencent.com/product/cvm
参考文献:《How to Configure the Linux Firewall for Docker Swarm on Ubuntu 16.04 》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。