Traefik est un reverse proxy conçu à la base pour des infrastructures ayant des conteneurs (avec du Docker ou Kubernetes). Néanmoins il est possible de le faire fonctionner directement via le binaire et de profiter de ses capacités des machines n’ayant pas de conteneurisation.

L’intérêt d’utiliser le mode binaire plutôt que le conteneur peut se discuter longuement, mais ce ne sera pas le thème 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 – CZS.

traefik architecture

Préparation 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.5.3 et une VM ayant comme base une Debian 10.9. Les tests ont aussi été réalisés avec succès sur une Ubuntu 20.04.2.

cd /tmp && wget https://github.com/traefik/traefik/releases/download/v2.5.3/traefik_v2.5.3_linux_amd64.tar.gz && tar xzvf traefik_v2.5.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. A l’avenir, j’étudierai la possibilité de se passer de l’utilisateur et des droits root.

Tout comme la version docker, Traefik utilise l’utilisateur « 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 » (rappel à cette adresse). Je continue d’utiliser cette procédure ici avec le binaire.

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 dynamic.

Préparation pour Traefik

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

---
global:
  sendAnonymousUsage: true
  checkNewVersion: false

api:
  insecure: true # utilisé pour afficher le tableau de bord via HTTP
  dashboard: true

pilot:
  dashboard: false

log:
  filePath: "/var/log/traefik.log"
  format: json
  level: "ERROR"

providers:
  file:
    directory: "/etc/traefik/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.

A présent, créeons 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 feu !

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

systemctl daemon-reload && systemctl start traefik.service

A 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. Vous pourrez retrouver quelques exemples plus poussés dans le dépôt GitHub de Julien ici > https://github.com/Mettmett/docker-compose.

Pour accéder au tableau de bord, ouvrez un navigateur et saisissez l’adresse de votre serveur, suivi du port 8080.

traefik dashboard 248

Traefik est maintenant fonctionnel et prêt à l’emploi. Maintenant, il est temps de configurer quelques routers pour accéder à vos services..!


Bonus – Ansible

Installer manuellement est une chose, pratique pour « se faire la main » 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

Auteur

Bercé par l'informatique depuis mon plus jeune âge, je transforme ma passion en expertise.

2 commentaires

    • Julien

      Parfait !! Merci pour le partage, je modifierai le code de mon dépôt.

Écrire un commentaire