Proxy pour Proxmox

 

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.

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

Let's Go ...

 

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.

Installation des paquets sur une Debian 9 :

# apt install nginx letsencrypt

Je passes la partie génération du certificat SSL.

 

Configuration du vhost

Je crée mon fichier de vhost 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;
server_name proxy.mondomaine.com;
ssl on;
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_http_version 1.1;
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

Conclusion

nginx est quand même très bon pour faire du proxy, j'ai essayé avec Apache et tout fonctionne sauf VNC, un peu domage, mais à creuser sur un futur test.