前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在UFW、FirewallD、IPTable为Docker Swarm集群配置防火墙

如何在UFW、FirewallD、IPTable为Docker Swarm集群配置防火墙

原创
作者头像
何处惹尘埃
修改2018-07-18 14:50:49
2.3K0
修改2018-07-18 14:50:49
举报
文章被收录于专栏:云计算教程系列

介绍

Docker SwarmDocker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。

使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。

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

  • 用于保障Docker客户端通信安全机制的TCP2376端口。Docker Machine需要此端口才能工作。Docker Machine用于编排Docker主机。
  • TCP端口。此端口2377用于Docker Swarm或集群的节点之间的通信。
  • TCP和UDP端口7946用于节点之间的通信。
  • 用于覆盖网络流量的UDP端口4789

注意: 除了这些端口之外,还必须打开端口22(用于SSH流量)以及任何在群集上运行特定服务所需的其他端口。腾讯云相关端口配置详见:腾讯云CVM安全组配置文档

在本文中,您将学习如何使用防火墙管理应用程序在Ubuntu 16.04上配置Linux防火墙。防火墙管理应用程序包括FirewallD,IPTables工具和UFW(简单防火墙)。UFW是Ubuntu发行版上的默认防火墙应用程序。本教程涵盖三种方法,但每种方法都提供相同的效果,您可以选择操作起来最得心应手的方法。

准备

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

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

方案一、使用UFW打开Docker Swarm端口

如果您刚刚设置了Docker主机,默认UFW已经安装。您只需启用并配置它。

在Swarm管理的节点服务器上执行以下命令:

代码语言:txt
复制
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:

代码语言:txt
复制
ufw reload

如果未启用UFW,请使用以下命令执行此操作:

代码语言:txt
复制
ufw enable

重启Docker守护程序:

代码语言:txt
复制
systemctl restart docker

然后在worker的每个节点上,执行以下命令:

代码语言:txt
复制
ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 7946/tcp 
ufw allow 7946/udp 
ufw allow 4789/udp 

然后,重新加载UFW:

代码语言:txt
复制
ufw reload

如果未启用UFW,请启用它:

代码语言:txt
复制
ufw enable

重启Docker守护进程:

代码语言:txt
复制
systemctl restart docker

这样您就打开了所有必要端口。

方案二、使用FirewallD打开Docker Swarm端口

FirewallD是Fedora,CentOS的默认防火墙应用程序。但是FirewallD也可以在其他Linux发行版上使用,包括Ubuntu 16.04。

如果您选择使用FirewallD而不是UFW,请首先卸载UFW:

代码语言:txt
复制
apt-get purge ufw

然后安装FirewallD:

代码语言:txt
复制
apt-get install firewalld

验证它是否正在运行:

代码语言:txt
复制
systemctl status firewalld

如果它没有运行,请开启它:

代码语言:txt
复制
systemctl start firewalld

然后设置自动启动:

代码语言:txt
复制
systemctl enable firewalld

在Swarm管理的节点服务器上执行以下命令,打开必要的端口:

代码语言:txt
复制
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

然后,重新加载防火墙:

代码语言:txt
复制
firewall-cmd --reload

然后重启Docker:

代码语言:txt
复制
systemctl restart docker

然后在worker的每个节点上,执行以下命令:

代码语言:txt
复制
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

然后,重新加载防火墙:

代码语言:txt
复制
firewall-cmd --reload

然后重启Docker:

代码语言:txt
复制
systemctl restart docker

您已成功为FirewallD打开所有Docker Swarm上的必要的端口。

方案三、使用IPTable打开Docker Swarm端口

要在任何Linux上使用IPtables,您必须首先卸载任何其他防火墙实用程序。如果您安装了FirewallD或UFW,请先卸载它们。

然后安装iptables-persistent包,它可以管理IPtables规则的自动加载:

代码语言:txt
复制
apt-get install iptables-persistent

接下来,使用以下命令刷新现有规则:

代码语言:txt
复制
netfilter-persistent flush

现在,您可以使用iptables程序添加规则。第一组命令应该在Swarm管理器的节点上执行。

代码语言:txt
复制
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

输入所有命令后,将规则保存到磁盘:

代码语言:txt
复制
netfilter-persistent save

然后重启Docker:

代码语言:txt
复制
sudo systemctl restart docker

在Swarm worker的节点上,执行以下命令:

代码语言:txt
复制
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

将这些新规则保存到磁盘:

代码语言:txt
复制
netfilter-persistent save

然后重启Docker:

代码语言:txt
复制
sudo systemctl restart docker

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

代码语言:txt
复制
sudo netfilter-persistent stop

然后刷新规则:

代码语言:txt
复制
sudo netfilter-persistent flush

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

代码语言:txt
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 方案一、使用UFW打开Docker Swarm端口
  • 方案二、使用FirewallD打开Docker Swarm端口
  • 方案三、使用IPTable打开Docker Swarm端口
  • 结论
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档