Cloud canadien à Montréal · VM dès 8,50 CAD/mois

Répartiteur de charge : une adresse, plusieurs VM

Un répartiteur prend le trafic sur sa propre adresse et le partage entre vos machines. Pools et contrôles de santé, port HTTPS et certificat automatique, routage par chemin, maintenance sans coupure : un montage complet, à 0,010 CAD l'heure.

Un flux entrant partagé par un répartiteur entre trois machines, dont une drainée

Une seule machine derrière un nom de domaine, c'est simple jusqu'au jour où il faut la redémarrer pour une mise à jour, ou où la charge dépasse ce qu'elle tient. Un répartiteur de charge prend le trafic sur sa propre adresse et le distribue entre plusieurs machines : on en retire une pour la maintenance, les autres continuent de servir.

Le répartiteur FFxF est un service géré. Vous décrivez où va le trafic, FFxF fait tourner le répartiteur, obtient ses certificats Let's Encrypt et le tient à jour. Ce guide en monte un de bout en bout, avec les sorties réelles d'un répartiteur en service.

1. Comment ça s'articule

  • Un pool regroupe les machines qui rendent le même service, chacune avec un port : web pour le site, api pour l'API.
  • Un port d'entrée s'ouvre sur l'adresse du répartiteur, en HTTP, HTTPS ou TCP, avec un pool par défaut.
  • Des règles envoient un nom de domaine ou un début de chemin vers un autre pool : /api/ vers api, le reste vers web.

Les machines cibles sont dans un réseau privé avec le répartiteur. Elles n'ont pas besoin d'adresse publique, et leurs pare-feux peuvent fermer 80 et 443 côté Internet : le réseau privé n'est jamais filtré.

2. Créer le répartiteur

Dans la console, sous Répartiteurs, donnez un nom et choisissez le réseau privé de vos machines. La même chose par l'API :

bash
curl -s -X POST https://api.ffxf.net/v1/load-balancers \
     -H "Authorization: Bearer $FFXF_TOKEN" \
     -H "Idempotency-Key: $(uuidgen)" \
     -H "Content-Type: application/json" \
     -d '{"name": "pilote", "vpc": 15}'

{"data":{"id":1,"name":"pilote","status":"pending","billing":{"mode":"hourly","rate":"0.010","currency":"CAD"}}}

Le répartiteur se paie à l'heure, 0,010 CAD, soit environ 7,30 CAD pour un mois complet. Il est prêt en quelques minutes : son statut passe de pending à active, et il reçoit une adresse IPv4 et une adresse IPv6. Pools et ports peuvent se préparer pendant ce temps.

3. Un pool et ses cibles

Pour la démonstration, une seule machine du réseau privé, à l'adresse 10.50.0.2, fait tourner trois petits serveurs HTTP sur les ports 8081, 8082 et 8083. En production, ce seraient des machines distinctes ; le répartiteur les traite de la même façon.

bash
curl -s -X POST https://api.ffxf.net/v1/load-balancers/1/pools \
     -H "Authorization: Bearer $FFXF_TOKEN" -H "Content-Type: application/json" \
     -d '{"name": "web", "protocol": "http", "health_type": "http", "health_path": "/"}'

curl -s -X PUT https://api.ffxf.net/v1/load-balancers/1/pools/1/targets \
     -H "Authorization: Bearer $FFXF_TOKEN" -H "Content-Type: application/json" \
     -d '{"targets": [{"vm": 150, "port": 8081}, {"vm": 150, "port": 8082}]}'

Une machine se désigne par son numéro, celui de la console et de l'API. Le répartiteur vérifie chaque cible toutes les 5 secondes, ici par une requête HTTP sur / : trois échecs la sortent du pool, deux succès l'y remettent. Un second pool, api, vise le port 8083.

4. Un port HTTPS et le DNS

bash
curl -s -X POST https://api.ffxf.net/v1/load-balancers/1/listeners \
     -H "Authorization: Bearer $FFXF_TOKEN" -H "Content-Type: application/json" \
     -d '{"port": 443, "protocol": "https", "default_pool": 1, "redirect_https": true}'

Avec redirect_https, le port 80 redirige vers HTTPS. Pour le certificat, faites pointer votre nom vers le répartiteur : un enregistrement A vers son IPv4, un AAAA vers son IPv6. Dès que le nom pointe au bon endroit, le répartiteur demande son certificat à Let's Encrypt ; sur notre démonstration, il était actif une trentaine de secondes après la création du port.

5. Router par chemin

bash
curl -s -X PUT https://api.ffxf.net/v1/load-balancers/1/listeners/1/rules \
     -H "Authorization: Bearer $FFXF_TOKEN" -H "Content-Type: application/json" \
     -d '{"rules": [
           {"hostname": "app.exemple.com", "pool": 1},
           {"hostname": "app.exemple.com", "path_prefix": "/api/", "pool": 2}
         ]}'

Peu importe l'ordre envoyé : le répartiteur évalue les règles de la plus précise à la plus large (nom et chemin, puis nom seul, puis chemin seul), et la première qui correspond l'emporte. L'onglet Routage de la console les affiche dans cet ordre, suivies de la ligne « Sinon », qui mène au pool par défaut.

6. Vérifier

bash
$ for i in 1 2 3 4; do curl -s https://app.exemple.com/; done
pilote 8081
pilote 8082
pilote 8081
pilote 8082
$ curl -s https://app.exemple.com/api/
pilote 8083
$ curl -s -o /dev/null -w "%{http_code} %{redirect_url}\n" http://app.exemple.com/
301 https://app.exemple.com/

Les requêtes alternent entre les deux cibles du pool web, le chemin /api/ part vers l'autre pool, et le HTTP est redirigé. Côté application, l'adresse du visiteur arrive dans l'en-tête X-Forwarded-For, avec X-Forwarded-Proto et X-Forwarded-Port.

7. Une maintenance sans coupure

Avant de mettre à jour une machine, cliquez sur Drainer à côté d'elle dans l'onglet Pools (ou envoyez {"drain": true} par l'API). Elle ne reçoit plus de nouvelles connexions, celles en cours vont à leur terme, et le changement est en place en une dizaine de secondes. Une fois la mise à jour faite, Remettre la réintègre.

Une cible qui tombe sans prévenir est retirée par les contrôles de santé, et l'onglet Pools la montre en panne. Si toutes les cibles d'un pool tombent, le répartiteur répond 503 plutôt que de laisser les visiteurs attendre.

8. Qui peut se connecter

Seuls 80, 443 et vos ports d'entrée sont ouverts sur l'adresse du répartiteur. Chaque port accepte des sources autorisées : un port TCP 5432 vers un pool de bases de données peut n'accepter que l'adresse de votre bureau. Tant qu'un port HTTPS existe, le 80 reste ouvert à tous, car Let's Encrypt y valide les certificats.

9. Statistiques et consommation

L'onglet Statistiques trace sur 1 heure, 24 heures ou 7 jours les requêtes par classe de réponse, le trafic et les sessions simultanées. La vue d'ensemble donne le coût du mois en cours et l'activité de la dernière minute.

Le trafic qui passe par le répartiteur est compté sur les machines cibles, comme si elles l'avaient servi elles-mêmes : il puise dans leur trafic inclus. Sur la démonstration, deux téléchargements de 10 Mo à travers le répartiteur ont ajouté 20 972 166 octets au compteur de la machine cible.

10. Par un agent IA

Le serveur MCP FFxF expose les mêmes étapes : create_load_balancer, upsert_pool, set_targets, upsert_listener et set_rules. Un agent peut monter le répartiteur complet à partir d'une phrase, et sa consigne lui demande d'annoncer le prix avant de commander, puis de vous indiquer les enregistrements DNS à créer.

Checklist

  • Les machines dans un même réseau privé, avec leur service sur un port connu.
  • Un pool par service, avec un contrôle de santé qui teste vraiment l'application.
  • Un port HTTPS avec redirection depuis le 80.
  • Le DNS pointé, puis le certificat actif dans l'onglet Certificats.
  • Les ports 80 et 443 des cibles fermés côté Internet par leur pare-feu.
  • Drainer avant chaque maintenance.

Le détail de chaque appel est dans la documentation des répartiteurs, et le pare-feu des cibles dans le guide protéger une VM avec le pare-feu cloud.

Une VM IPv6 reliée par une passerelle de traduction à l'Internet IPv4

VPS IPv6 seulement : 2 CAD de moins, l'IPv4 à portée

Pas d'IPv4 publique, 2 CAD de moins par mois, et GitHub reste à portée : démonstration d'un VPS IPv6 seulement, et de la passerelle qui le relie à l'Internet IPv4.

Lire l'article 6 min de lecture

Maillage de nœuds réseau autour d'un bloc d'adresses IPv6

IPv6 sur un VPS : adresses, DNS inverse, pare-feu

L'IPv6 n'est plus optionnelle : elle conditionne la délivrabilité des courriels, l'accès depuis les réseaux mobiles et le référencement. Voici la configuration complète.

Lire l'article 8 min de lecture

Support & discussions

Questions techniques, retours d'incidents ou discussions d'infrastructure, l'équipe est présente sur Discord, Telegram, X, Instagram, Reddit et IRC.