🗂️ Configuration du serveur NFS
Intoduction
J'ai mis en place un serveur NFS afin de fournir un stockage persistant aux conteneurs tournant sur Docker Swarm. Cela permettra aux conteneurs de maintenir l'accès à ses données quelque soit le noeud sur lequel ils sont exécutés.
Pour commencer, le partage NFS sera monté sur les noeuds. À noter qu'il est possible de les monter directement dans les conteneurs avec le driver NFS fourni par Docker Swarm.
Le partage NFS me permettra d'héberger les configurations de mes différents services et les données persistantes.
Ma façon de faire est très clairement améliorable mais elle me permet de démarrer rapidement la prise en main.
Installation du service NFS
J'ai installé la distribution Debian GNU/Linux 12 en réservant une partition pour le partage NFS.
root@srv-nfs:~# pydf
Filesystem Size Used Avail Use% Mounted on
/dev/sdb2 30G 2053M 26G 6.7 [#####.................................................................] /
/dev/sdb1 511M 5972k 505M 1.1 [#.....................................................................] /boot/efi
/dev/sda1 98G 2780k 93G 0.0 [......................................................................] /mnt/nfsdatas
Puis j'ai installé mes outils habituels et le service NFS.
Configuration du partage NFS
root@srv-nfs:~# vim /etc/exports
/mnt/nfsdatas 10.1.4.0/24(rw,sync,no_root_squash,no_all_squash,no_subtree_check)
Explication :
- /mnt/nfsdatas : Chemin d'accès du partage.
- 10.1.4.0/24 : autorisation d'accès au partage NFS des clients compris dans cet adressage IP.
- Options d'exportation NFS :
- rw : Cette option permet aux clients de lire et d'écrire sur le partage NFS.
- sync : Cette option assure que toutes les écritures sur le partage NFS sont synchronisées, c'est-à-dire que les données sont écrites sur le disque avant que l'écriture ne soit considérée comme terminée. Cela garantit l'intégrité des données mais peut réduire les performances.
- no_root_squash : Par défaut, NFS remappe les requêtes de super-utilisateur (root) provenant du client NFS à un utilisateur non-privilégié sur le serveur NFS pour des raisons de sécurité (root squashing). L'option no_root_squash désactive ce comportement, permettant au super-utilisateur sur le client d'agir en tant que super-utilisateur sur le serveur. Cela peut poser des risques de sécurité.
- no_all_squash : Par défaut, NFS remappe toutes les requêtes provenant du client NFS à un utilisateur non-privilégié (all squash). L'option no_all_squash désactive ce comportement, permettant aux utilisateurs sur le client d'agir avec leurs identifiants d'origine sur le serveur. Cette option est souvent utilisée avec no_root_squash pour des raisons de permissions.
- no_subtree_check : Cette option désactive la vérification des sous-arbres. Par défaut, NFS vérifie que le fichier demandé par un client est bien situé sous le répertoire exporté (subtree check). Désactiver cette vérification peut améliorer les performances mais réduit la sécurité, car des répertoires situés en dehors de l'arborescence exportée pourraient être accessibles en cas de mauvaise configuration. Par exemple, si un lien symbolique dans le répertoire exporté pointe vers un fichier en dehors de ce répertoire, le client pourrait accéder à ce fichier sans restrictions.
Passons à la configuration du partage sur les noeuds :
root@ds01:~# vim /etc/fstab
(...)
#----------------------------------------------------------------
# NFS
#----------------------------------------------------------------
10.1.4.254:/mnt/nfsdatas /mnt/nfsdatas nfs defaults 0 0
root@ds01:~# systemctl daemon-reload
root@ds01:~# mount -a
root@ds01:~# pydf
Filesystem Size Used Avail Use% Mounted on
/dev/root 29G 3550M 24G 11.9 [####................................] /
/dev/mmcblk0p1 127M 32M 95M 25.2 [#########...........................] /boot
overlay 29G 3550M 24G 11.9 [####................................] /mnt/dietpi_userdata/docker-data/overlay2/80752719a39e9e8e101cc18bdf5847dd3b8906a717823f2ed90b3f15503836c8/merged
10.1.4.254:/mnt/nfsdatas 98G 2816k 93G 0.0 [....................................] /mnt/nfsdatas
Notre point de montage est prêt à être utilisé.