Pangolin en mode Haute Disponibilité sur Scaleway
Introduction & Intérêt du Clustering
Le clustering consiste à faire fonctionner plusieurs instances de Pangolin en parallèle.
Pourquoi passer au cluster ?
- Haute Disponibilité (HA) : Si un serveur tombe en panne, le Load Balancer redirige le trafic vers le second nœud sans interruption pour l'utilisateur.
- Évolutivité (Scalability) : Vous pouvez ajouter des nœuds supplémentaires pour absorber plus de tunnels et de trafic.
- Mises à jour à chaud : Vous pouvez redémarrer un nœud pour maintenance pendant que l'autre gère le trafic.
Prérequis & Dimensionnement (Scaleway)
Infrastructure recommandée
- 2 Instances Applicatives (Nœuds) : Type
PRO2-XXSouPLAY2-PICO(2 vCPU, 2-4 Go RAM). - 1 Instance de Données : Type
PRO2-XXS - 1 Private Network (VPC) : Pour isoler les communications entre vos serveurs.
- 1 Load Balancer : Pour distribuer le trafic public (HTTPS/UDP) vers vos nœuds privés.
Configuration du Réseau Privé (VPC)
Avant d'installer quoi que ce soit, isolez vos machines.
- Dans la console Scaleway, créez un Private Network.
- Attachez vos 3 instances (Nœud 1, Nœud 2, Data) à ce réseau.
- Notez les adresses IP privées (ex:
192.168.10.1pour le Nœud 1,192.168.10.2pour le Nœud 2, et192.168.10.3pour la Data).
Architecture du projet
Sur vos machines, créez la structure suivante :
/opt/pangolin/
├── docker-compose.yml
├── config/
│ ├── config.yml
│ ├── privateConfig.yml
│ ├── encryption.pem (à copier du Nœud 1 vers le Nœud 2)
│ ├── encryption.pub (à copier du Nœud 1 vers le Nœud 2)
│ └── server_secret (à copier du Nœud 1 vers le Nœud 2)
Préparation de la Data (Machine C)
Si vous n'utilisez pas les services managés de Scaleway, voici un docker-compose.yml rapide pour votre machine de données :
version: '3.8'
services:
postgres:
image: postgres:15
restart: always
environment:
POSTGRES_DB: pangolin_db
POSTGRES_USER: pangolin_user
POSTGRES_PASSWORD: password_ultra_secure
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:7-alpine
restart: always
command: redis-server --requirepass password_redis_secure
ports:
- "6379:6379"
volumes:
pgdata:
Configuration du Nœud 1 (Initialisation)
Sur la Machine A, créez les fichiers de configuration dans /opt/pangolin/config/ :
config.yml
postgres:
connection_string: "postgresql://pangolin_user:password_ultra_secure@192.168.10.3:5432/pangolin_db"
privateConfig.yml
redis:
host: "192.168.10.3"
port: 6379
password: "password_redis_secure"
docker-compose.yml (Applicatif)
version: '3.8'
services:
pangolin:
image: pangolin/pangolin:latest # Remplacez par l'image officielle
restart: always
ports:
- "3001:3001" # Dashboard/API
- "3004:3004" # Gerbil Exit Node
volumes:
- ./config:/app/config
environment:
- NODE_ENV=production
Action : Lancez le nœud 1 avec docker compose up -d. Pangolin va générer les clés dans ./config.
Configuration du Nœud 2 (Mise en miroir)
- Sur la Machine B, créez le même dossier
/opt/pangolin/. - Copiez le
docker-compose.yml,config.ymletprivateConfig.ymldepuis la Machine A. - SYNCHRONISATION : Copiez les fichiers générés par le Nœud 1 (
encryption.pem,encryption.pub,server_secret) dans le dossier/opt/pangolin/config/de la Machine B. - Lancez avec
docker compose up -d.
Configuration du Load Balancer Scaleway
Dans la console Scaleway :
- Créez un Load Balancer.
- Backend :
- Protocole : HTTP (ou TCP si vous gérez le SSL sur les nœuds).
- Port :
3001. - Ajoutez les IP privées :
192.168.10.1et192.168.10.2.
- Frontend :
- Port :
443. - Certificat : SSL Let's Encrypt (généré via Scaleway).
- Port :
Pourquoi cette méthode est la meilleure ?
- Isolation : Si vous devez mettre à jour Pangolin, il vous suffit de changer le tag de l'image dans le
docker-compose.ymlet de faire undocker compose pull && docker compose up -d. - Portabilité : Si vous voulez ajouter un 3ème nœud, vous n'avez qu'à copier le dossier
/opt/pangolin/complet (avec les clés) sur une nouvelle machine. - Sécurité : Grâce au VPC Scaleway, vos ports de base de données et Redis ne sont pas exposés sur Internet, seulement dans votre réseau privé.
Astuce Sécurité : Pour la première synchronisation des clés entre la Machine A et la Machine B, utilisez la commande scp via les IP privées pour que vos secrets ne transitent jamais par le web public.