introduction
Docker Swarm est une fonctionnalité de Docker qui facilite l'exécution des hôtes et des conteneurs Docker à grande échelle. Un Docker Swarm, ou cluster Docker, est composé d'un ou plusieurs hôtes Dockerized qui fonctionnent comme des nœudsmanager, et un nombre quelconque de nœudsworker. La configuration d’un tel système nécessite une manipulation minutieuse du pare-feu Linux.
Les ports réseau nécessaires au bon fonctionnement de Docker Swarm sont les suivants:
-
Port TCP
2376
pour la communication sécurisée du client Docker. Ce port est requis pour que Docker Machine fonctionne. Docker Machine est utilisé pour orchestrer des hôtes Docker. -
Port TCP
2377
. Ce port est utilisé pour la communication entre les nœuds d’un groupe d’armement ou d’un groupe Docker Swarm. Il ne doit être ouvert que sur les nœuds du gestionnaire. -
Port TCP et UDP
7946
pour la communication entre les nœuds (découverte de réseau de conteneur). -
Port UDP
4789
pour le trafic réseau de superposition (réseau d'entrée de conteneur).
Note: Outre ces ports, le port22
(pour le trafic SSH) et tous les autres ports nécessaires à l'exécution de services spécifiques sur le cluster doivent être ouverts.
Dans cet article, vous apprendrez à configurer le pare-feu Linux sur Ubuntu 16.04 à l’aide des différentes applications de gestion de pare-feu disponibles sur toutes les distributions Linux. Ces applications de gestion de pare-feu sont FirewallD, IPTables Tools et UFW, le pare-feu simple. UFW est l'application de pare-feu par défaut sur les distributions Ubuntu, y compris Ubuntu 16.04. Bien que ce tutoriel couvre trois méthodes, chacune d’elles aboutit au même résultat, vous pouvez donc choisir celle que vous connaissez le mieux.
Conditions préalables
Avant de continuer avec cet article, vous devriez:
-
Configurez les hôtes qui composent votre cluster, y compris au moins un gestionnaire d’essaim et un ouvrier. Vous pouvez suivre le tutorielHow To Provision and Manage Remote Docker Hosts with Docker Machine on Ubuntu 16.04 pour les configurer.
Note: Vous remarquerez que les commandes (et toutes les commandes de cet article) ne sont pas précédées desudo
. En effet, il est supposé que vous êtes connecté au serveur à l'aide de la commandedocker-machine ssh
après l'avoir provisionné à l'aide de Docker Machine.
[[method-1 -—- opening-docker-swarm-ports-using-ufw]] == Méthode 1 - Ouverture de ports Docker Swarm à l'aide de UFW
Si vous venez de configurer vos hôtes Docker, UFW est déjà installé. Vous devez juste l'activer et le configurer. Suivezthis guide pour en savoir plus sur l'utilisation d'UFW sur Ubuntu 16.04.
Exécutez les commandes suivantes sur les nœuds qui fonctionneront en tant que gestionnaires 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
Ensuite, rechargez UFW:
ufw reload
Si UFW n’est pas activé, utilisez la commande suivante:
ufw enable
Cela peut ne pas être nécessaire, mais il n'est jamais inutile de redémarrer le démon Docker chaque fois que vous modifiez et redémarrez le pare-feu:
systemctl restart docker
Ensuite, sur chaque nœud qui fonctionnera en tant que travailleur, exécutez les commandes suivantes:
ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp
Ensuite, rechargez UFW:
ufw reload
Si UFW n’est pas activé, activez-le:
ufw enable
Puis redémarrez le démon Docker:
systemctl restart docker
C’est tout ce dont vous avez besoin pour ouvrir les ports nécessaires à Docker Swarm en utilisant UFW.
[[method-2 -—- opening-docker-swarm-ports-using-firewalld]] == Méthode 2 - Ouverture des ports Docker Swarm à l'aide de FirewallD
FirewallD est l'application de pare-feu par défaut sur Fedora, CentOS et les autres distributions Linux qui en sont basées. Mais FirewallD est également disponible sur d'autres distributions Linux, y compris Ubuntu 16.04.
Si vous choisissez d'utiliser FirewallD au lieu de UFW, commencez par désinstaller UFW:
apt-get purge ufw
Puis installez FirewallD:
apt-get install firewalld
Vérifiez qu’il est en cours d’exécution:
systemctl status firewalld
S'il ne fonctionne pas, lancez-le:
systemctl start firewalld
Puis activez-le pour qu'il démarre au démarrage:
systemctl enable firewalld
Sur le nœud qui sera un gestionnaire Swarm, utilisez les commandes suivantes pour ouvrir les ports nécessaires:
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
[.note] #Note: Si vous faites une erreur et devez supprimer une entrée, tapez:firewall-cmd --remove-port=port-number/tcp —permanent
.
#
Ensuite, rechargez le pare-feu:
firewall-cmd --reload
Puis redémarrez Docker.
systemctl restart docker
Ensuite, sur chaque nœud qui fonctionnera en tant que travailleur Swarm, exécutez les commandes suivantes:
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
Ensuite, rechargez le pare-feu:
firewall-cmd --reload
Puis redémarrez Docker.
systemctl restart docker
Vous avez utilisé avec succès FirewallD pour ouvrir les ports nécessaires à Docker Swarm.
[[method-3 -—- opening-docker-swarm-ports-using-iptables]] == Méthode 3 - Ouverture de ports Docker Swarm à l'aide d'IPTables
Pour utiliser IPtables sur n’importe quelle distribution Linux, vous devez d’abord désinstaller tout autre utilitaire de pare-feu. Si vous passez de FirewallD ou UFW, commencez par les désinstaller.
Ensuite, installez le packageiptables-persistent
, qui gère le chargement automatique des règles IPtables:
apt-get install iptables-persistent
Ensuite, supprimez les règles existantes à l’aide de cette commande:
netfilter-persistent flush
Vous pouvez maintenant ajouter des règles à l'aide de l'utilitaireiptables
. Ce premier ensemble de commandes doit être exécuté sur les nœuds qui serviront de gestionnaires 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
Après avoir entré toutes les commandes, enregistrez les règles sur le disque:
netfilter-persistent save
Puis redémarrez Docker.
sudo systemctl restart docker
Sur les nœuds qui fonctionneront en tant que travailleurs Swarm, exécutez ces commandes:
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
Enregistrez ces nouvelles règles sur le disque:
netfilter-persistent save
Puis redémarrez Docker:
sudo systemctl restart docker
C’est tout ce qui est nécessaire pour ouvrir les ports nécessaires à Docker Swarm à l’aide de IPTables. Vous pouvez en savoir plus sur le fonctionnement de ces règles dans le didacticielHow the Iptables Firewall Works.
Si vous souhaitez passer à FirewallD ou UFW après avoir utilisé cette méthode, la méthode appropriée consiste à arrêter le pare-feu en premier:
sudo netfilter-persistent stop
Puis éliminez les règles:
sudo netfilter-persistent flush
Enfin, sauvegardez les tables maintenant vides sur le disque:
sudo netfilter-persistent save
Ensuite, vous pouvez passer à UFW ou FirewallD.
Conclusion
FirewallD, IPTables Tools et UFW sont les trois applications de gestion de pare-feu dans le monde Linux. Vous venez d'apprendre à utiliser chacun d'eux pour ouvrir les ports réseau nécessaires à la configuration de Docker Swarm. La méthode que vous utilisez est juste une question de préférence personnelle, car ils sont tous également capables.