cloudflared est le daemon client de Cloudflare Tunnel. Il crée une connexion sortante persistante vers les datacenters Cloudflare, ce qui permet d’exposer des services internes sur internet sans ouvrir de ports entrants sur les serveurs.
Voilà donc comment l’intégrer. proprement dans une stack Docker Swarm.
Table des matières
- Concepts clés
- Intégration dans la stack Swarm
- Configuration des routes
- Monitoring des connecteurs
- Comportement en cas de panne
1. Concepts clés
Tunnel et token
Un tunnel Cloudflare génère un token unique. Ce token peut ainsi être utilisé sur plusieurs instances cloudflared simultanément. Chaque instance qui démarre avec ce token s’enregistre automatiquement comme un connecteur distinct dans l’interface Zero Trust.
Published Application Routes
Les routes définissent quel domaine est redirigé vers quel service interne. Par conséquent, une route est partagée par tous les connecteurs.

2. Intégration dans la stack Swarm
Ajouter cloudflared comme service dans le docker-compose.yml de la stack :
services:
cloudflared:
image: cloudflare/cloudflared:latest
command: tunnel --no-autoupdate run
environment:
- TUNNEL_TOKEN=<TOKEN_DU_TUNNEL>
networks:
- traefik-public
deploy:
replicas: 3
restart_policy:
condition: on-failure
networks:
traefik-public:
external: true
En effet, deux points sont importants :
- Le réseau :
cloudflareddoit être sur le même réseau Docker que Traefik pour que la résolution DNS interne (http://traefik:80) fonctionne. Sans ça, le tunnel ne peut pas joindre Traefik. - De plus, un seul token suffit pour tous les réplicas. Cloudflare distingue les connecteurs automatiquement.
Pour récupérer le token :
Dans l’interface Cloudflare Zero Trust :
Networks → Tunnels → [Votre tunnel] → Add a connector → Docker
Ainsi, le token est affiché
3. Configuration des routes
Les routes se configurent dans :
Networks → Tunnels → [Votre tunnel] → Published application routes
Ensuite, pour ajouter un domaine :
- Cliquer sur + Add a published application route
- Renseigner le domaine ou sous-domaine
- Service :
http://traefik:80(nom du service Docker sur le réseau partagé) - Sauvegarder
Exemple :
| Domaine | Path | Service |
|---|---|---|
monsite.com | * | http://traefik:80 |
app.monsite.com | * | http://traefik:80 |
Autrement dit, les domaines doivent être gérés par Cloudflare. (nameservers actifs).
4. Monitoring des connecteurs
Connecteurs actifs
Networks → Tunnels → [Votre tunnel] → Connectors
Ainsi, chaque réplica apparaît comme un connecteur distinct avec son statut, son uptime et la version de cloudflared.
Logs en temps réel
Networks → Tunnels → [Votre tunnel] → Live logs
Il permet donc de suivre les requêtes HTTP et les événements de connexion par connecteur, utile pour déboguer un problème de routing ou vérifier qu’une route est bien atteinte.
5. Comportement en cas de panne
Avec 3 réplicas Swarm, si un conteneur cloudflared tombe :
- Swarm le redémarre automatiquement (
restart_policy: on-failure) - Cloudflare bascule les requêtes vers les connecteurs restants pendant le redémarrage
- Le service reste accessible sans interruption
