L'interface de management de Proxmox VE est accessible via un port spécial : 8006 qui peut être bloqué sur certains réseaux, qui plus est le certificat SSL est auto-signé et donc génère des erreurs.
C'est donc pas la configuration la plus adéquate pour une utilisation régulière.
Il est bien sûr possible d'adapter tout cela, mais mon infrastructure repose sur 3 serveurs proxmox en cluster, je veux pouvoir arriver sur l'interface quel que soit l'état du serveur.
Pour cela il faut donc mettre en place un proxy qui load-balance les requêtes sur les différents serveurs.
Je rajoute en plus les besoins suivants
- toutes les requêtes doivent passer par le port 443
- certificat Let's Encrypt
- noVNC doit fonctionner via ce proxy
Prérequis
3 serveurs Proxmox en cluster fonctionnel. Les miens sont en cluster HA avec du Ceph sur 3 datacentes OVH RBX / GRA / BHS
Proxy
Le proxy est une instance public cloud OVH avec un petit shorewall pour bloquer les ports non nécessaires.
Bien sur le proxy peut être directement sur un serveur Proxmox dans le cas ou il n'y a pas de cluster.
Installation des paquets
Installation des paquets sur une Debian 12 :
apt install nginx letsencrypt
Création du certificat SSL
letsencrypt certonly -d proxy.mondomaine.com
Configuration du vhost
Cas d'un cluster
Je crée mon fichier de vhost nginx avec les paramètres suivants :
upstream proxmox {
ip_hash;
server server1:8006;
server server2:8006;
server server2:8006;
}
server {
listen 80 ;
server_name proxy.mondomaine.com;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443 ssl http2;
server_name proxy.mondomaine.com;
ssl_certificate /etc/letsencrypt/live/proxy.mondomaine.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/proxy.mondomaine.com/privkey.pem;
proxy_redirect off;
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_pass https://proxmox;
proxy_buffering off;
client_max_body_size 0;
proxy_connect_timeout 3600s;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
send_timeout 3600s;
}
}
Quelques remarques :
ip_hash : important pour le fonctionnement de la console vnc
Cas d'un simple serveur Proxmox
Un vhost plus simple sur la partie location et ne pas mettre la partie upstream
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass https://127.0.0.1:8006;
proxy_buffering off;
client_max_body_size 0;
proxy_connect_timeout 3600s;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
send_timeout 3600s;
}
Interdire l'utilisation du port 8006
Il faut créer le fichier /etc/default/pveproxy
ALLOW_FROM="127.0.0.1"
DENY_FROM="all"
POLICY="allow"
Et redémarrer le pveproxy
systemctl restart pveproxy.service
Conclusion
On a ainsi une configuration de l'interface de Proxmox sur un port standard avec un certificat SSL reconnu.