{{tag>sysadmin netadmin devops docker traefik todo}}
====== Traefik: notes de configuration ======
Les éléments de configuration de Traefik peuvent être fournis de 3 façons:
* Dans des fichiers textes au format TOML ou YAML
* via les CLI flags à l'invocation ou dans les fichiers docker-compose
* via les variables d'environnement (env vars) cette méthode est cependant déconseillée.
===== Configuration statique =====
Traefik s'appuie sur une configuration en partie statique et en grande partie dynamique.
La configuration statique statique est lue au démarrage de Traefik. Elle contient pour l'essentiel la définition des **entrypoints**, les connexions aux **Providers**, la configuration des systèmes de tracing et des outils de métiques. Toute modification de la configuration statique nécessite un redémarrage de Traefik pour être prise en compte.
Pour définir la configuration statique, une seule source peut être utilisée: soit le fichier, soit les options de lignes de commandes.
La configuration statique ne permet pas de définir les objets de type router, middlewares, services et configuration TLS. Ces objets sont décrits par les éléments de configuration dynamique.
===== Configuration dynamique =====
La configuration dynamique contient l'ensemble des éléments permettant de définir le routage des requêtes. Ces éléments peuvent être fournis via:
* les **files providers**: un ou plusieurs fichiers de configuration au format TOML ou YAML observés en permanence par Traefik avec l'option watch = true).
* les métadonnées des conteneurs (labels, ingress)
* données stockées dans un KV store
Toutes les sources de configurations dynamiques peuvent s'utiliser en parallèle, les modifications apportées sont prises en compte sans avoir besoin de redémarrer Traefik.
Le CLI flag **%%--api.insecure%%** permet de démarrer et d'exposer la webUI sur le port 8080 sans usage du HTTPS.
Traefik s'appuie sur les labels pour identifier les services et router les flux entrants vers les bons services. Par défaut Traefik peut être en mesure de créer des routes vers tous les services/conteneurs qu'il découvre. Il est possible cependant de restreindre la portée de la découverte de services de Traefik:
* via l'option de configuration **exposedByDefault**
* via un mécanisme plus fin basé sur des contraintes.
labels:
- traefik.http.routers.client.rule=Host(`fqdn1.com`, `fqdn2.com`)
- traefik.http.services.client.loadbalancer.port=3000
===== Providers =====
Avec l'option **exposedByDefault = false** définie sur le provider, Traefik n'expose pas les conteneurs conteneurs sauf s'ils contiennent explicitement le label "traefik.enable=true".
Dans l'exemple ci-dessous définit l'option pour sur le Docker Engine local
# Configuration statique
[providers]
[providers.docker]
endpoint = "unix:///var/run/docker.sock"
exposedByDefault = false
Traefik cherchera à établir le routage dynamiquement uniquement vers les conteneur ayant le label "traefik.enable=true"
===== HTTPS et TLS =====
Afin de pouvoir ajouter/supprimer des certificats même lorsque traefik est en cours d’exécution, leur définition peut être ajoutée dans la configuration dynamique, pour cela on ajoute un provider de type fichier dans la configuration statique:
# configuration statique
# Dynamic configuration TOML
[[tls.certificates]]
certFile = "/path/to/fqdn1.cert"
keyFile = "/path/to/fqdn1.key"
[[tls.certificates]]
certFile = "/path/to/fqdn2.cert"
keyFile = "/path/to/fqdn2.key"
Dans Traefik les certificats sont regroupés dans des magasins (store)
# Dynamic configuration
# Définition du magasin 'default'
[tls.stores]
[tls.stores.default]
Traefik peut utiliser un certificat par défaut pour les connexions sans SNI ou sans correspondance de domaine. Le certificat a utiliser par défaut doit être déclaré dans le magasin:
# Dynamic configuration
[tls.stores]
[tls.stores.default]
# Certificat a utiliser par défaut
[tls.stores.default.defaultCertificate]
certFile = "path/to/cert.crt"
keyFile = "path/to/cert.key"
Si aucun certificat par défaut n'est fournit, Traefik génère et utilise un certificat auto-signé.
===== Références =====
* https://computerz.solutions/docker-compose-traefik/
* https://www.benjaminrancourt.ca/a-complete-traefik-configuration/