Aller au contenu

🗂️ 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.

schema-infra-02

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.

Partitions du serveur 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.

Installation des paquets
root@srv-nfs:~# apt install nfs-kernel-server nfs-common -y

Configuration du partage NFS

Configuration du partage dans le fichier /etc/exports sur le serveur 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 :

Configuration du partage dans le fichier /etc/fstab sur les noeuds Swarm
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é.