📝 Traefik 2, utiliser le binaire sans docker

Cet article dĂ©crit l'installation et la configuration de Traefik pour ĂȘtre utilisĂ© en mode binaire, sans docker et sans ĂȘtre un conteneur.

logo traefik
logo traefik

Traefik est un edge routeur et load-balancer conçu à la base pour des infrastructures composées de conteneurs. Néanmoins, il est possible de le faire fonctionner directement via le binaire et de profiter de ses capacités pour des services hors conteneurs.

L'intĂ©rĂȘt d'utiliser le binaire plutĂŽt que le conteneur peut se discuter longuement, mais ce n'est pas l'objectif ici. Pas de prĂ©sentation ni de rĂ©flexion autour de Traefik dans cette documentation, si vous recherchez une prĂ©sentation ça se passe lĂ -bas.

Version Date Commentaires
1 01/2020 Création de l'article
1.1 05/2023 Mise Ă  jour des versions, de la syntaxe et ajout du contexte de test
1.2 08/2023 Mise Ă  jour des versions, reformulations, ajout du fichier acme.json et du dossier "logs", correction du chemin "dynamic"

Objectif : Utiliser Traefik sans docker, directement avec le binaire en Go

Environnement : Debian 12, Traefik 2.10.3.

Contexte d'exécution :

jho@vmi866042:/etc/traefik$ tree
.
├── dynamic
│   ├── general.yml
│   ├── routersservices.yml
├── traefik.yml
├── acme.json
RĂ©sultat de la commande "tree" dans le dossier /etc/traefik
  • dossier oĂč se trouvent tous les fichiers et dossiers pour cet exemple : /etc/traefik/
  • emplacement du fichier de configuration principal de Traefik : /etc/traefik/traefik.yml
  • dossier oĂč se trouvent les configurations de Traefik (fichiers dynamiques) : /etc/traefik/dynamic
  • dossier oĂč se trouvent les journaux d'Ă©vĂ©nements (logs) : /var/logs/

Préparation du systÚme

Commencez par télécharger le binaire depuis le dépÎt GitHub Traefik : https://github.com/containous/traefik/releases. J'utiliserai la version 2.10.3 et une VM ayant comme base une Debian 12.1. Les tests ont aussi été réalisés avec succÚs sur une Ubuntu 22.04.2.

cd /tmp && wget https://github.com/traefik/traefik/releases/download/v2.10.3/traefik_v2.10.3_linux_amd64.tar.gz && tar xzvf traefik_v2.10.3_linux_amd64.tar.gz

Pour tester son fonctionnement rapidement, lancez le binaire et regardez les ports en Ă©coute sur votre machine :

./traefik
ss -ntlp # doit retourner ce genre d'informations :

LISTEN  0       128                  *:80                  *:*      users:(("traefik",pid=450,fd=3))  

Sans fichier de configuration ni autre option, Traefik écoutera par défaut sur le port 80. Il n'y aura ni redirection automatique, pas de gestion du TLS, aucune redirection vers vos services internes, pas d'accÚs au tableau de bord ou autres options... Uniquement une écoute sur le port 80.

Copions le binaire dans l'emplacement systÚme étudié pour, avec les droits d'exécution et le propriétaire "root" :

cp /tmp/traefik /usr/bin/.
chown root: /usr/bin/traefik
chmod 755 /usr/bin/traefik

L'utilisateur root est nĂ©cessaire. En effet, Traefik doit avoir un maximum de privilĂšges systĂšme pour se mettre en Ă©coute sur les ports systĂšme, notamment le 80 et le 443. À l'avenir, j'Ă©tudierai la possibilitĂ© de se passer de l'utilisateur et des droits root.

Tout comme pour la version docker, l'utilisateur est "traefik" et le dossier par défaut /etc/traefik pour ses fichiers de configuration.
AprÚs avoir téléchargé le binaire, il faut recréer cette configuration (dossiers, utilisateur, droits).

groupadd traefik
useradd -g traefik --no-user-group -d /etc/traefik --no-create-home -s /usr/sbin/nologin -r traefik

mkdir -p /etc/traefik/dynamic
chown -R traefik: /etc/traefik/.

touch /var/log/traefik.log && chown traefik: /var/log/traefik.log

Dans mes précédents fichiers de configuration pour Traefik, j'utilise le dossier /etc/traefik/dynamic pour y stocker les configurations dites "dynamiques".

Le fichier de log se situe dans le dossier /var/log, qui est le chemin habituel. La configuration principale de Traefik se trouvera dans le dossier racine (/etc/traefik) et les configurations personnalisées seront dans le dossier /etc/traefik/dynamic.

Préparation pour Traefik

Générons maintenant le fichier de configuration principal, ici le fichier /etc/traefik/traefik.yml.

---
global:
  sendAnonymousUsage: false
  checkNewVersion: false

api:
  dashboard: true

log:
  filePath: "/etc/traefik/applog.log"
  format: json
  level: "ERROR"

providers:
  docker:
    endpoint: unix:///var/run/docker.sock
    exposedByDefault: false
    watch: true
    swarmMode: false
  file:
    directory: "/dynamic"
    watch: true

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
  websecure:
    address: ":443"

J'ai commenté la partie redirection automatique HTTP vers HTTPS, à titre indicatif. Ce bloc n'est pas nécessaire ici pour le premier démarrage.

À prĂ©sent, crĂ©ons le fichier service pour systemd Ă  l'emplacement /lib/systemd/system/. Voici le contenu du nouveau fichier traefik.service :

# /lib/systemd/system/traefik.service
[Unit]
Description=traefik service
After=network-online.target

[Service]
Type=simple
User=root
Group=root
Restart=on-failure
TimeoutStopSec=300
ExecStart=/usr/bin/traefik --configFile=/etc/traefik/traefik.yml

[Install]
WantedBy=multi-user.target

Ajoutons les droits au fichier, mettons Ă  jour la base systemd et lancement !

chown root: /lib/systemd/system/traefik.service && chmod 644 /lib/systemd/system/traefik.service

systemctl daemon-reload && systemctl start traefik.service

À prĂ©sent, Traefik doit ĂȘtre actif et prĂȘt Ă  rediriger vos requĂȘtes. Le fichier de configuration traefik.yml citĂ© plus haut est vraiment basique, mais fonctionnel.

Pour accĂ©der au tableau de bord, ouvrez un navigateur et saisissez l'adresse IP de votre serveur suivi du port 8080. Traefik est dĂ©sormais fonctionnel et prĂȘt Ă  l'emploi. À prĂ©sent, il est temps de configurer quelques routeurs pour accĂ©der Ă  vos services
 !


Bonus — rîle Ansible

Installer manuellement est une chose, pratique pour étudier l'outil et comprendre la mise en place. J'ai créé un rÎle Ansible pour installer Traefik, qui est en fait un résumé de cet article. Tout est récupérable directement dans ce dépÎt GitHub : https://github.com/Mettmett/ansible-traefik