Traefik 2, configuration et utilisation du HTTP/3
Depuis la version 2.5 de Traefik, vous pouvez désormais mettre en place/utiliser le protocole HTTP/3 (QUIC ). Retenez toutefois qu’il s’agit encore d’une version au stade expérimentale pour Traefik, que des instabilités sont à prévoir.
Objectif: Permettre à Traefik d’écouter/répondre aux requêtes HTTP/3 (QUIC)
Environnement : Debian 12, Docker 24.x, docker compose (plugin) 2.20.x, Traefik 2.10.
Contexte d’exécution :
jho@vmi866042:/opt/docker/dc$ tree
.
├── conf
│ ├── acme.json
│ ├── traefik.yml
│ ├── traefikdynamic
│ │ ├── dynamic.yml
├── docker-compose.yml
└── logs
├── traefikAccess.log
├── traefik.logRésultat de la commande “tree” dans le dossier /opt/docker/dc
- dossier où se trouvent tous les fichiers et dossiers pour cet exemple :
/opt/docker/dc - emplacement du fichier de configuration principal de Traefik :
/opt/docker/dc/conf/traefik.yml - dossier où se trouvent les configurations de Traefik (fichiers dynamiques) :
/opt/docker/dc/conf/traefikdynamic - emplacement du fichier comportant tous les certificats générés par let’s encrypt (ou autre) :
/opt/docker/dc/conf/acme.json - dossier où se trouvent les journaux d’événements (logs) :
/opt/docker/dc/logs/
Principes et prérequis#
HTTP/3 est un nouveau protocole standardisé visant à améliorer la vitesse de navigation sur le web. Sans rentrer dans de nombreux détails, HTTP/3 est un protocole de transport pour distribuer des requêtes HTTP plus rapidement qu’avec HTTP/2 (TCP), notamment en utilisant l’UDP.
HTTP/3 QUIC - image récupérée depuis le blog CloudFlarePour plus d’informations, je vous suggère ces sites :
Configuration de Traefik#
Avant de vous lancer dans la configuration du HTTP/3, sachez qu’il n’est pas possible de faire écouter Traefik sur un port UDP ayant le même numéro de port qu’un port TCP. De plus, l’entrypoint utilisé pour HTTP/3 doit être celui avec lequel vous avez activé la partie TLS pour vos routeurs.
La configuration est assez simple dans l’ensemble : ajoutez le bloc “experimental” et modifier l’entrypoint servant le HTTPS :
experimental:
http3: true
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
http3:
advertisedPort: "443"Vous devez redémarrer Traefik pour valider les changements. Avec cette configuration, tous vos routeurs configurés avec l’entrypoint “websecure” (selon l’exemple) seront accessibles en HTTP/2 et HTTP/3.
Configuration du fichier docker-compose.yml#
Vous devez faire écouter Traefik sur le port 443/UDP pour qu’il puisse écouter/distribuer en HTTP/3. Ainsi, modifiez le service dans le fichier docker-compose comme tel :
---
services:
traefik:
image: traefik:saintmarcelin
container_name: traefik
restart: unless-stopped
ports:
- target : 80
published : 80
protocol: tcp
mode : host
### BEGIN dashboad
- target : 8080
published : 8080
protocol: tcp
mode : host
### END dashboard
- target : 443
published : 443
protocol: tcp
mode : host
# HTTP/3 QUIC
- target : 443
published : 443
protocol: udp
mode : host
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./conf/traefikdynamic:/dynamic
- ./conf/traefik.yml:/etc/traefik/traefik.yml:ro
- ./conf/acme.json:/etc/traefik/acme.json
- ./logs/traefik.log:/etc/traefik/applog.log
environment:
TZ: Europe/ParisPour tester, vous pouvez utiliser l’outil disponible chez Domsignal :
HTTP/3 Test | Ensure Your Website’s Speed and CompatibilityFind out if your site supports the latest H3 protocol for better performance. Domsignal H3 tool use cURL for the testingDomsignalLorsque votre configuration fonctionne, vous devez avoir ce résultat :