Déploiement D'un Cluster Docker Swarm Mode via Terraform Sur Scaleway 3/3 : Déployer Le Cluster
Contexte
Je vous propose dans cette série d’articles, d’installer un cluster docker Swarm Mode via Terraform chez l’hébergeur Scaleway.
Celle-ci comprend 3 articles :
- l’intérêt de cette solution (ne contient pas d’éléments techniques)
- la génération de l’image des serveurs Scaleway à déployer
- le déploiement via Terraform du cluster Docker Swarm Mode
Déploiement via Terraform du cluster Docker Swarm Mode
organisation des fichiers terraform
Les fichiers terraform, (qui regroupent les ressources de l’infrastructure voulue), sont les suivants :
terraform.tf
Il s’agit du fichier de configuration principal. Il décrit l’infrastructure voulue, sous forme de ressources.
Ces ressources sont fournies par des providers, et mis en place avec l’aide de provisioners afin de déployer des fichiers sur les serveurs, ou d’exécuter des commandes (locales au poste qui lance le déploiement ou distantes sur les serveurs cibles).
le fichier est organisé via les sections suivantes :
- définition des providers (ici scaleway et cloudflare)
- définition de la ressource “manager_init“, qui correspond au premier serveur scaleway servant à initialiser le cluster swarm (un noeud manager) :
Ce premier serveur initiant le cluster est nécessaire ; il génère les tokens de sécurité pour les autres noeuds ayant le rôle de manager ou worker.
La récupération des tokens de sécurité Docker Swarm mode se fait via des appels distants vers le premier Manager sur le port 2375.
Une solution plus sûre pourrait passer plutôt par l’écriture du token sur un fichier sur le premier serveur lors de sa génération, une récupération en locale, puis un upload en scp sur les serveurs nécessitant ces tokens lors de la connexion à ceux-ci juste après leur création via des provisioners Terraform.
Veuillez noter aussi que le cluster Docker Swarm mode écoute sur le port 2375, qui n’est pas sécurisé. Une installation plus sûre utiliserait le port 2376 couplé à une authentification cliente par certificat SSL supportée nativement par le Docker Engine. Cette configuration dépasse largement le cadre de cet article.
- définition des autres managers du cluster :
il est recommandé, pour avoir un cluster robuste, d’avoir au moins 3 managers présents. Une plus grande robustesse aurait induit la répartition des noeuds sur plusieurs centres de données (Scaleway propose un centre de données français, et un centre de données néerlandais pour l’instant). - définition des workers du cluster
- définition de l’IP statique de référence et association au serveur d’initialisation :
Cela permet que le DNS pointe toujours vers une IP valide, même si le serveur associé change.
À noter qu’un problème persiste ici : lorsque le serveur tombe, il n’y a pas encore de mécanisme de rétro-contrôle qui associe l’IP avec un autre serveur en vie du cluster.
- ajout d’un sous-domaine wildcard (*) au DNS, pointant vers l’IP statique
Cela permet au cluster de gérer des sous-domaines de façon autonome, via traefik par exemple - définition des groupes de sécurité, avec leur règles associées :
Comm indiqué précédemment, cela n’apporte qu’une sécurité limitée, au vu du fonctionnement des groupes de sécurité de Scaleway.
Voici le contenu du fichier terraform.tf :
|
|
daemon_manager.tpl
Ce fichier est un template pour configurer le démon docker des noeuds manager du cluster. la variable SWARM_MANAGER_PRIVATE_IP
sera remplacée au démarrage pour l’adresse IP de l’interface réseau privée du serveur.
|
|
daemon_worker.json
Ce fichier permet de configurer le démon des noeuds worker du cluster Docker Swarm mode. Il ne contient pas l’adresse IP
de l’interface réseau privée du serveur, car les noeuds worker ne peuvent piloter le cluster (sauf si on les transforme en manager).
|
|
variables.tf
Le fichier terraform.tf
, fait référence à des variables. Celles-ci sont décrites dans le fichier variables.tf
.
|
|
terraform.tfvars
Ce fichier contient les valeurs des variables référencées dans le fichier terraform.tf
, et définies dans le fichier variables.tf
.
|
|
terraform.tfstate
Ce fichier est généré par Terraform, et contient l’état de l’infrastructure après application des changements.
déclenchement de Terraform
- créer un plan d’exécution
l’exécution de la commande terraform plan
, permet d’inspecter l’infrastructure actuelle, et l’infrastructure cible,
afin de générer un plan d’exécution des changements nécessaires.
- créer l’infrastructure
Cette création se fait via la commande :terraform apply
- détruire l’infrastructure
La destruction se fait via la commande terraform destroy
(après confirmation via l’invite de commandes).
résultat
Après avoir crée via terraform apply
, votre infrastructure (et patienté quelques minutes), en se connectant sur un des noeuds ayant le rôle de manager, vous pouvez lancer la commande suivante :
|
|
Vous pouvez donc constater la bonne mise en place de votre cluster Docker Swarm Mode.
conclusion
Cet article vous permet de vous familiariser avec Terraform, un outil de plus en plus présent pour automatiser la création de vos infrastructures immutables via du code.
Il vous permet aussi de vous essayer à la création d’un cluster Docker Swarm Mode.
J’attire néanmoins votre attention sur la non-sécurisation de l’image et du réseau mis en place.
Une mise en production d’un environnement de ce type, demanderait au préalable, d’autres opérations de sécurisation qui sortent du cadre de cet article.