Pangolin en mode Haute Disponibilité sur Scaleway

Pangolin en mode Haute Disponibilité sur Scaleway
Photo by Dmitriy Zarivniy / Unsplash

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-XXS ou PLAY2-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.

  1. Dans la console Scaleway, créez un Private Network.
  2. Attachez vos 3 instances (Nœud 1, Nœud 2, Data) à ce réseau.
  3. Notez les adresses IP privées (ex: 192.168.10.1 pour le Nœud 1, 192.168.10.2 pour le Nœud 2, et 192.168.10.3 pour 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)

  1. Sur la Machine B, créez le même dossier /opt/pangolin/.
  2. Copiez le docker-compose.yml, config.yml et privateConfig.yml depuis la Machine A.
  3. 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.
  4. Lancez avec docker compose up -d.

Configuration du Load Balancer Scaleway

Dans la console Scaleway :

  1. Créez un Load Balancer.
  2. 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.1 et 192.168.10.2.
  3. Frontend :
    • Port : 443.
    • Certificat : SSL Let's Encrypt (généré via Scaleway).

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.yml et de faire un docker 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.