Le Context
Après avoir acheté un NAS avec deux emplacements M.2, j’ai réalisé que je pouvais implémenter dans mon réseau un cluster Proxmox avec HA fonctionnel. J’ai donc créé un disque iSCSI sur le NAS avec deux SSD M2 de 1 To, y ai connecté mon serveur Proxmox principal et installé l’hyperviseur sur 2 autres MiniPC que j’avais.
Bientôt, j’ai copié tous mes conteneurs et machines virtuelles sur le lecteur iSCSI partagé et j’ai commencé à migrer les machines entre les nœuds. Sans aucun problème en vue, j’ai créé 3 groupes HA avec toutes mes machines actives.
Le Probleme
Peu de temps après, j’ai réalisé que j’accédais à l’interface Web servie par mon hôte principal et qu’en cas d’arrêt ou de redémarrage, je ne pourrai pas contrôler le cluster pendant la durée de l’arrêt du principal.
J’utilise NPM comme proxy inverse et pour le moment il n’a pas d’option pour implémenter l’équilibrage de charge.
La Solution
Alpine à la rescousse. Avec une empreinte minimale (100 Mo), il exécute une instance nginx avec équilibre de charge avant NPM. Pour installer un conteneur alpin sur proxmox je vous suggère de visiter ce site :
https://tteck.github.io/Proxmox/
ou utilisez cette commande sur votre hôte proxmox :
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/alpine.sh)"
L’Impléméntation
Ensuite, j’ai installé nginx et configuré l’équilibrage de charge :
# mise a jour du conteneur
apk update && apk upgrade
# installation du nginx
apk add nginx
# declarer nginix en tant que service
rc-update add nginx default
# demarer nginx
rc-service nginx start
Après avoir modifié son contenu, le fichier de configuration par défaut ressemblera à ceci :
nano /etc/nginx/http.d/default.conf
# This is a default site configuration which will simply return 404, preventing
# chance access to any other virtualhost.
upstream proxmox {
ip_hash;
server 10.1.0.1:8006;
server 10.1.0.2:8006;
server 10.1.0.3:8006;
}
server {
listen 80;
listen [::]:80;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
# Everything is a 404
location / {
proxy_pass https://proxmox/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_http_version 1.1;
}
# You may need this to prevent return 404 recursion.
location = /404.html {
internal;
}
}
La Conclusion
J’ai découvert que NPM n’est pas la solution idéale en tant que proxy inverse étant donné que l’équilibrage de charge n’est pas disponible immédiatement en tant que fonction de base. Je ne suis pas particulièrement satisfait de la solution que j’ai trouvée mais cela fonctionne pour le moment.