Comment configurer le pare-feu Linux pour Docker Swarm sur Ubuntu 16.04

De Get Docs
Aller à :navigation, rechercher

Introduction

Docker Swarm est une fonctionnalité de Docker qui facilite l'exécution d'hôtes et de conteneurs Docker à grande échelle. Un Docker Swarm, ou cluster Docker, est composé d'un ou plusieurs hôtes Dockerisés qui fonctionnent comme des nœuds manager et un nombre quelconque de nœuds worker. La mise en place d'un tel système nécessite une manipulation minutieuse du pare-feu Linux.

Les ports réseau requis pour qu'un Docker Swarm fonctionne correctement sont :

  • Port TCP 2376 pour une communication client Docker sécurisée. Ce port est requis pour que Docker Machine fonctionne. Docker Machine est utilisé pour orchestrer les hôtes Docker.
  • Port TCP 2377. Ce port est utilisé pour la communication entre les nœuds d'un Docker Swarm ou d'un cluster. Il ne doit être ouvert que sur les nœuds de 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 superposé (réseau d'entrée de conteneur).

Remarque : Outre ces ports, le port 22 (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 didacticiel couvre trois méthodes, chacune donne le même résultat, vous pouvez donc choisir celle que vous connaissez le mieux.

Conditions préalables

Avant de poursuivre cet article, vous devez :

Remarque : Vous remarquerez que les commandes (et toutes les commandes de cet article) ne sont pas précédées de sudo. En effet, il est supposé que vous êtes connecté au serveur à l'aide de la commande docker-machine ssh après l'avoir provisionné à l'aide de Docker Machine.


Méthode 1 - Ouverture des ports Docker Swarm à l'aide d'UFW

Si vous venez de configurer vos hôtes Docker, UFW est déjà installé. Il vous suffit de l'activer et de le configurer. Suivez ce 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é, faites-le avec la commande suivante :

ufw enable

Cela n'est peut-être pas nécessaire, mais cela ne fait jamais de mal 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 comme un nœud de calcul, 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

Redémarrez ensuite le démon Docker :

systemctl restart docker

C'est tout ce que vous devez faire pour ouvrir les ports nécessaires pour Docker Swarm en utilisant UFW.

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 d'autres distributions Linux basées sur eux. Mais FirewallD est également disponible sur d'autres distributions Linux, y compris Ubuntu 16.04.

Si vous choisissez d'utiliser FirewallD au lieu d'UFW, désinstallez d'abord UFW :

apt-get purge ufw

Installez ensuite FirewallD :

apt-get install firewalld

Vérifiez qu'il est en cours d'exécution :

systemctl status firewalld

S'il ne fonctionne pas, démarrez-le :

systemctl start firewalld

Activez-le ensuite 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

Remarque : Si vous faites une erreur et devez supprimer une entrée, saisissez : firewall-cmd --remove-port=port-number/tcp —permanent.


Ensuite, rechargez le pare-feu :

firewall-cmd --reload

Redémarrez ensuite Docker.

systemctl restart docker

Ensuite, sur chaque nœud qui fonctionnera en tant que worker 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

Redémarrez ensuite Docker.

systemctl restart docker

Vous avez utilisé avec succès FirewallD pour ouvrir les ports nécessaires pour Docker Swarm.

Méthode 3 - Ouverture des ports Docker Swarm à l'aide d'IPTables

Pour utiliser IPtables sur n'importe quelle distribution Linux, vous devez d'abord désinstaller tous les autres utilitaires de pare-feu. Si vous passez de FirewallD ou UFW, commencez par les désinstaller.

Installez ensuite le package iptables-persistent qui gère le chargement automatique des règles IPtables :

apt-get install iptables-persistent

Ensuite, videz toutes les règles existantes à l'aide de cette commande :

netfilter-persistent flush

Vous pouvez maintenant ajouter des règles à l'aide de l'utilitaire iptables. 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 saisi toutes les commandes, enregistrez les règles sur le disque :

netfilter-persistent save

Redémarrez ensuite Docker.

sudo systemctl restart docker

Sur les nœuds qui fonctionneront en tant que nœuds de calcul 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

Redémarrez ensuite Docker :

sudo systemctl restart docker

C'est tout ce qu'il faut pour ouvrir les ports nécessaires pour Docker Swarm en utilisant IPTables. Vous pouvez en savoir plus sur le fonctionnement de ces règles dans le tutoriel Comment fonctionne le pare-feu Iptables.

Si vous souhaitez passer à FirewallD ou UFW après avoir utilisé cette méthode, la bonne façon de procéder est d'abord d'arrêter le pare-feu :

sudo netfilter-persistent stop

Videz ensuite les règles :

sudo netfilter-persistent flush

Enfin, enregistrez les tables désormais 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 du monde Linux. Vous venez d'apprendre à les utiliser pour ouvrir les ports réseau nécessaires à la configuration de Docker Swarm. La méthode que vous utilisez n'est qu'une question de préférence personnelle, car ils sont tous également capables.