Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
technique:docker:general:traefik [2021/10/17 02:45] – [Configuration] qduchemi | technique:docker:general:traefik [2021/11/16 00:45] (Version actuelle) – supprimée qduchemi | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{indexmenu_n> | ||
- | # Traefik, un reverse-proxy pour Docker | ||
- | Une des pièces centrales de l' | ||
- | |||
- | < | ||
- | * La documentation officielle peut être retrouvée ici : https:// | ||
- | * La configuration spécifique pour Picasoft est versionnée ici : https:// | ||
- | </ | ||
- | |||
- | ## Problématique | ||
- | |||
- | Sur chaque machine, Picasoft héberge plusieurs services web accessibles via une URL. Lors de la consultation sur un navigateur web, cette URL est traduite en adresse IP (grâce au DNS), et permet de trouver la machine qui correspond à l'URL. | ||
- | |||
- | Chaque service tourne dans un conteneur Docker. En prenant un exemple, la situation est la suivante : | ||
- | |||
- | {{ : | ||
- | |||
- | Le navigateur contacte naturellement le port `443` car l'URL est en HTTPS, dans cet exemple. | ||
- | |||
- | < | ||
- | |||
- | En réalité, elle n'a **aucun moyen de le savoir**. | ||
- | |||
- | < | ||
- | |||
- | ## Utiliser les ports | ||
- | |||
- | Une technique traditionnelle, | ||
- | |||
- | {{ : | ||
- | |||
- | Ainsi, chaque conteneur écoute sur un port spécifique : | ||
- | |||
- | * `team.picasoft.net: | ||
- | * `pad.picasoft.net: | ||
- | |||
- | < | ||
- | |||
- | C'est une solution simple, néanmoins elle nécessite d' | ||
- | |||
- | ## Utiliser un reverse proxy | ||
- | |||
- | L' | ||
- | |||
- | * Un *proxy* est un serveur vers lequel sont redirigées toutes les requêtes qui **sortent** d'un ordinateur (par exemple, dans une entreprise, une université...) | ||
- | * Un *reverse proxy* est un serveur vers lequel sont redirigées toutes les requêtes qui **entrent** vers un ordinateur. | ||
- | |||
- | L' | ||
- | |||
- | < | ||
- | |||
- | Il y a plusieurs solutions. `nginx` peut tout à faire être [utilisé comme reverse proxy](https:// | ||
- | |||
- | C'est pourquoi nous utilisons Traefik, un outil clé en main pour Docker. Traefik fonctionne comme un reverse proxy traditionnel, | ||
- | |||
- | {{ : | ||
- | |||
- | * L' | ||
- | * Traefik découvre automatiquement les nouveaux services en " | ||
- | * Traefik gère automatiquement la création et le renouvellement des certificats des services | ||
- | * Comme tout reverse-proxy, | ||
- | |||
- | En somme, pour ajouter un nouveau service accessible depuis internet via HTTPS, il suffit d' | ||
- | |||
- | ## Configuration | ||
- | |||
- | < | ||
- | |||
- | On ne présente pas ici la manière de configurer Traefik, qui évolue au fil du temps, mais les choix qui ont été faits et les points de vigilance. | ||
- | |||
- | ### Sécurisation | ||
- | |||
- | Traefik permet de sécuriser les services web en établissant une connexion TLS (HTTPS) entre les clients et lui. Il communique ensuite avec les conteneurs sur le réseau privé Docker, en clair (HTTP). Il est donc fondamental qu'il soit bien sécurisé. En particulier, | ||
- | |||
- | * Forcer à rediriger les requêtes HTTP vers HTTPS. | ||
- | * Utilisation de Let's Encrypt pour créer et renouveller automatiquement les certificats des services. | ||
- | * Restriction de la version de TLS minimale (actuellement, | ||
- | * Restriction des algorithmes de chiffrement utilisés (*ciphers*), | ||
- | * Injection de *headers* de sécurité dans toutes les requêtes et réponses, permettant de limiter les risques d' | ||
- | |||
- | ### Performance | ||
- | |||
- | Traefik est aussi configuré pour compresser l' | ||
- | |||
- | ### Docker | ||
- | |||
- | Traefik se trouve dans le réseau Docker appelé `proxy`. Il inspecte tous les conteneurs de ce réseau et décide s'il doit router vers ces conteneurs, en fonction de leurs labels. | ||
- | |||
- | < |