Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
technique:tech_team:traefik [2021/10/17 03:45] – créée qduchemi | technique:tech_team:traefik [2023/01/08 22:12] (Version actuelle) – pourquoi ajouter docker-socket-proxy ? ppom | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
{{indexmenu_n> | {{indexmenu_n> | ||
## C'est quoi Traefik ? | ## C'est quoi Traefik ? | ||
+ | |||
+ | Une des pièces centrales de l' | ||
+ | |||
+ | Comme on l'a vu dans les pages précédentes, | ||
+ | |||
+ | Dans cette page, on va voir en illustration le problème avec les ports, et comment le résoudre grâce à Traefik. =) | ||
+ | |||
+ | ## 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, et permet de trouver la machine qui correspond à l'URL. | ||
+ | |||
+ | Chaque service tourne dans un conteneur Docker. En prenant pour exemple Mattermost et Etherpad, la situation est la suivante : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | 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. | ||
+ | |||
+ | < | ||
+ | |||
+ | ### Point sécurité : réduction de la surface d' | ||
+ | |||
+ | 1. Traefik est un service critique pour la sécurité de nos services : c'est un des seuls services qui est accessible en première ligne depuis Internet. | ||
+ | De tous nos services, c'est un de ceux qui peut être le plus plausiblement compromis. | ||
+ | |||
+ | 2. Pour avoir la liste des autres conteneurs Docker, Traefik se connecte normalement via la socket d' | ||
+ | C'est une permission accordée que très exceptionnellement à un conteneur, car elle donne tous les droits sur Docker, et donc les droits `root` par extension. | ||
+ | |||
+ | Pour éviter de donner trop de permissions à Traefik, on utilise un [intermédiaire](https:// | ||
+ | Cet intermédiaire n'est pas accessible depuis le monde extérieur, donc difficile à compromettre. | ||
+ | Il ne va autoriser que les requêtes légitimes de Traefik (lister les conteneurs) et interdire toute autre tentative de connexion (créer ou supprimer un conteneur, un volume, etc). | ||
+ | |||
+ | ### Et plus concrètement ? | ||
+ | |||
+ | C'est parti pour un peu plus de pratique sur la [[technique: |