介紹
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所需的網絡端口。您使用哪種方法只是個人偏好的問題,因為它們都具有同等的功能。