introduction
Docker Swarm est une fonctionnalité de Docker qui facilite l’exécution des hôtes et des conteneurs Docker à grande échelle. Un groupe Docker Swarm, ou Docker, est composé d’un ou plusieurs hôtes dockérisés fonctionnant en tant que nœuds manager et d’un nombre quelconque de nœuds worker. 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 du réseau de conteneurs). -
Port UDP
+ 4789 +
pour le trafic réseau en superposition (mise en réseau des conteneurs).
Dans cet article, vous allez configurer le pare-feu Linux sur CentOS 7 à l’aide de FirewallD et IPTables. FirewallD est l’application de pare-feu par défaut sur CentOS 7, mais IPTables est également disponible. Bien que ce tutoriel couvre les deux méthodes, chacune d’elles aboutit au même résultat, vous pouvez donc choisir celle avec laquelle vous êtes le plus familier.
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 tutoriel Comment mettre à disposition et gérez les hôtes Docker distants avec Docker Machine sous CentOS 7) pour les configurer.
Méthode 1 - Ouvrez les ports Swarm Docker à l’aide de FirewallD
FirewallD est l’application de pare-feu par défaut sur CentOS 7, mais sur un nouveau serveur CentOS 7, elle est désactivée. Activez-le et ajoutez les ports réseau nécessaires au fonctionnement de Docker Swarm.
Avant de commencer, vérifiez son statut:
systemctl status firewalld
Il ne devrait pas fonctionner, alors 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=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
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=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.
Méthode 2 - Ouvrez les ports Swarm Docker à 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. Pour basculer vers IPTables depuis FirewallD, arrêtez d’abord FirewallD:
systemctl stop firewalld
Puis le désactiver
systemctl disable firewalld
Puis installez le paquet + iptables-services
, qui gère le chargement automatique des règles IPTables:
yum install iptables-services
Ensuite, démarrez IPTables:
systemctl start iptables
Puis activez-le pour qu’il démarre automatiquement au démarrage:
systemctl enable iptables
Avant de commencer à ajouter des règles spécifiques à Docker Swarm à la chaîne INPUT, examinons les règles par défaut de cette chaîne:
iptables -L INPUT --line-numbers
La sortie devrait ressembler à ceci:
OutputChain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
Prises ensemble, les règles par défaut fournissent une protection dynamique au serveur, interdisant tout le trafic d’entrée, à l’exception de celui déjà établi. Le trafic SSH est autorisé dans. Faites attention à la règle numéro 5, soulignée ci-dessus, car il s’agit d’une règle de rejet de fourre-tout. Pour que votre Docker Swarm fonctionne correctement, les règles que vous ajoutez doivent être ajoutées above cette règle. Cela signifie que les nouvelles règles doivent être insérées au lieu d’être ajoutées à la chaîne INPUT.
Maintenant que vous savez quoi faire, vous pouvez ajouter les règles dont vous avez besoin en utilisant l’utilitaire + iptables +
. Ce premier ensemble de commandes doit être exécuté sur les nœuds qui serviront de gestionnaires Swarm.
iptables -I INPUT 5 -p tcp --dport 2376 -j ACCEPT
iptables -I INPUT 6 -p tcp --dport 2377 -j ACCEPT
iptables -I INPUT 7 -p tcp --dport 7946 -j ACCEPT
iptables -I INPUT 8 -p udp --dport 7946 -j ACCEPT
iptables -I INPUT 9 -p udp --dport 4789 -j ACCEPT
Ces règles sont des règles d’exécution et seront perdues si le système est redémarré. Pour enregistrer les règles d’exécution actuelles dans un fichier afin qu’elles persistent après un redémarrage, tapez:
/usr/libexec/iptables/iptables.init save
Les règles sont maintenant enregistrées dans un fichier nommé + iptables +
dans le répertoire + / etc / sysconfig +
. Et si vous affichez les règles en utilisant + iptables -L - line-numbers +
, vous verrez que toutes les règles ont été insérées au-dessus de la règle de rejet général:
OutputChain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 ACCEPT tcp -- anywhere anywhere tcp dpt:2376
6 ACCEPT tcp -- anywhere anywhere tcp dpt:7946
7 ACCEPT udp -- anywhere anywhere udp dpt:7946
8 ACCEPT udp -- anywhere anywhere udp dpt:4789
9 ACCEPT tcp -- anywhere anywhere tcp dpt:http
10 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Puis redémarrez Docker.
Outputsystemctl restart docker
Sur les nœuds qui fonctionneront en tant que travailleurs Swarm, exécutez ces commandes:
iptables -I INPUT 5 -p tcp --dport 2376 -j ACCEPT
iptables -I INPUT 6 -p tcp --dport 7946 -j ACCEPT
iptables -I INPUT 7 -p udp --dport 7946 -j ACCEPT
iptables -I INPUT 8 -p udp --dport 4789 -j ACCEPT
Enregistrez les règles sur le disque:
/usr/libexec/iptables/iptables.init save
Puis redémarrez Docker:
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 apprendre plus sur le fonctionnement de ces règles dans le didacticiel Comment fonctionne le pare-feu IPTables.
Conclusion
FirewallD et IPTables sont deux des applications de gestion de pare-feu les plus populaires dans le monde Linux. Vous venez de lire comment les utiliser 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.