如何在linux配置DockerSwarm的Linux防火牆

Docker 防火牆 Linux Ubuntu 代碼人生 2017-05-18

介紹

Docker Swarm是Docker的一個功能,可以輕鬆地在規模上運行Docker主機和容器。Docker Swarm或Docker集群由一個或多個Dockerized主機組成,它們作為管理器節點和任意數量的工作節點。設置這樣的系統需要仔細操縱Linux防火牆。

Docker Swarm正常工作所需的網絡端口有:

  • TCP端口2376用於安全Docker客戶端通信。Docker Machine可以使用此端口。Docker Machine用於編排Docker主機。

  • TCP端口2377。該端口用於Docker群集或群集節點之間的通信。它只需要在管理器節點上打開。

  • TCP和UDP端口7946用於節點間的通信(容器網絡發現)。

  • 4789用於覆蓋網絡流量的UDP端口(容器入口組網)。

注意:除了這些端口之外,端口22(用於SSH流量)和特定服務在集群上運行所需的任何其他端口都必須打開。

在本文中,您將學習如何使用所有Linux發行版上可用的不同防火牆管理應用程序在Ubuntu 16.04上配置Linux防火牆。這些防火牆管理應用程序是防火牆,IPTables工具和UFW,簡單防火牆。UFW是Ubuntu發行版上的默認防火牆應用程序,包括Ubuntu 16.04。雖然本教程涵蓋三種方法,但每種方法都會產生相同的結果,因此您可以選擇您最熟悉的方法。

先決條件

在繼續閱讀本文之前,您應該:

  • 設置構成集群的主機,包括至少一個群組管理器和一個群組工作程序。您可以按照本教程如何在Ubuntu 16.04上使用Docker Machine配置和管理遠程Docker主機進行設置。

注意:你會注意到命令(和本文中的所有命令)不是前綴sudo。這是因為假設您docker-machine ssh使用Docker Machine配置之後,使用該命令登錄到服務器。

方法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群集端口

要在任何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

這就是為Docker Swarm使用IPTables打開所需的端口。您可以在教程如何使用Iptables防火牆中瞭解更多關於這些規則如何工作的信息。

如果您希望在使用此方法後切換到FirewallD或UFW,正確的方法是先停止防火牆:

sudo netfilter-persistent stop

然後沖洗規則:

sudo netfilter-persistent flush

最後,將現在的空表保存到磁盤中:

sudo netfilter-persistent save

然後你可以切換到UFW或FirewallD。

結論

FirewallD,IPTables工具和UFW是Linux世界中的三個防火牆管理應用程序。你剛剛學會了如何使用它來打開設置Docker Swarm所需的網絡端口。您使用哪種方法只是個人偏好的問題,因為它們都具有同等的功能。

相關推薦

推薦中...