From 143831def979ad51dece40f16ef70ef5eddd912e Mon Sep 17 00:00:00 2001 From: Quentin Duchemin Date: Fri, 7 Aug 2020 15:54:17 +0200 Subject: [PATCH] [Traefik] Add files for all VMs, configuration and documentation --- pica-traefik/README.md | 42 +++++++++++++++++++++++++++++++++ pica-traefik/docker-compose.yml | 18 ++++++++++++++ pica-traefik/traefik.toml | 35 +++++++++++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 pica-traefik/README.md create mode 100644 pica-traefik/docker-compose.yml create mode 100644 pica-traefik/traefik.toml diff --git a/pica-traefik/README.md b/pica-traefik/README.md new file mode 100644 index 0000000..0544aa4 --- /dev/null +++ b/pica-traefik/README.md @@ -0,0 +1,42 @@ +## Traefik + +Ce dossier contient les ressources nécessaires pour lancer Traefik, un reverse proxy adapté pour Docker. +C'est la pièce la plus importante de l'infrastructure, puisque l'ensemble des communications HTTP(S) passent d'abord par Traefik, et il est aussi utilisé pour [générer des certificats pour les services TCP](../pica-tls-certs-monitor). + +Ce service doit être lancé sur l'ensemble des machines de l'infrastructure. + +### Configuration + +La configuration a lieu dans le fichier [traefik.toml](./traefik.toml). +Notez que toute modification dans ce fichier impactera l'ensemble des machines, puisque le même fichier est utilisé pour l'ensemble des machines. + +À des fins de tests, il peut être modifié localement sur les machines, mais doit toujours rester synchronisé avec ce dépôt à long terme. + +Pour la génération des certificats, Traefik utilise Let's Encrypt. Il n'y a aucune configuration à faire de ce côté. Attention, le nombre de certificats générables est limité à 50 par semaine. + +Si on lance plein de conteneurs de tests, on utilisera temporairement [l'environnement de qualification](https://letsencrypt.org/fr/docs/staging-environment/) de Let's Encrypt, en ajoutant la directive `caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"` sous la section `[acme]`. + +### Lancement + +Assurez-vous que le dossier `/DATA/docker/traefik/certs` existe. +C'est dans ce dossier que seront conservés tous les certificats générés par Traefik. + +### Mise à jour + +Il suffit de mettre à jour le tag de l'image dans Compose. +Attention, Traefik v2 introduit énormément de changements et [nous ne sommes pas certains](https://wiki.picasoft.net/doku.php?id=technique:adminsys:migration-traefik-v2) de la manière d'effectuer la migration. + +Aussi, Traefik v1.6 est utilisé pour tenterd d'éviter un bug introduit dans la 1.7, qui rend certains services redémarrés inaccessibles (voir [cette discussion](https://team.picasoft.net/picasoft/pl/66aorsxhtffrjytyhnecn436wa)). + +Avant toute mise à jour, il faudra discuter avec l'équipe technique et modifier ce README le cas échéant. + +### Todo + +*Voir si on peut passer Traefik en "host" au niveau du réseau pour qu'il ait accès à tous les réseaux* : +https://kanban.picasoft.net/b/7fCn765LCNGraBhxA/team-technique-picasoft/kjvc3iw2pFvszCTcR + +Actuellement, Traefik est dans le réseau `docker_default` sur toutes les machines, et les conteneurs souhaitant être accessibles via Traefik doivent être explicitement dans ce réseau. + +Ceci induit une complexité supplémentaire au niveau des fichiers Compose. + +Il serait peut être bon de permettre à Traefik d'accéder à tous les réseaux et de supprimer énormément de directives "inutiles" dans les Compose. diff --git a/pica-traefik/docker-compose.yml b/pica-traefik/docker-compose.yml new file mode 100644 index 0000000..daaf980 --- /dev/null +++ b/pica-traefik/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3.7' + +services: + traefik: + container_name: traefik + # DO NOT UPGRADE + # SEE THIS BEFORE AND DISCUSS : https://team.picasoft.net/picasoft/pl/66aorsxhtffrjytyhnecn436wa + image: traefik:1.6.6 + ports: + - "80:80" + # Uncomment to expose the web interface. Warning : do not use without setting a password in traefik.toml + #- "8080:8080" + - "443:443" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./traefik.toml:/traefik.toml + - /DATA/docker/traefik/certs:/certs + restart: always diff --git a/pica-traefik/traefik.toml b/pica-traefik/traefik.toml new file mode 100644 index 0000000..3514619 --- /dev/null +++ b/pica-traefik/traefik.toml @@ -0,0 +1,35 @@ +logLevel = "INFO" +debug = true +defaultEntryPoints = ["http", "https"] + +[docker] +endpoint = "unix:///var/run/docker.sock" +watch = true +exposedbydefault = false + +[api] + +[entryPoints] + [entryPoints.http] + address = ":80" + compress = false + [entryPoints.http.redirect] + entryPoint = "https" + [entryPoints.https] + address = ":443" + compress = false + [entryPoints.https.tls] + # Accept only TLS1.1 and 1.2 + MinVersion = "VersionTLS11" + # Accept all ciphers excepting TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA and TLS_RSA_WITH_3DES_EDE_CBC_SHA + # CipherSuites = ["TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256","TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA","TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA","TLS_RSA_WITH_AES_128_GCM_SHA256","TLS_RSA_WITH_AES_256_GCM_SHA384","TLS_RSA_WITH_AES_128_CBC_SHA","TLS_RSA_WITH_AES_256_CBC_SHA" ] + # Keep only ECDHE : + CipherSuites = ["TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256","TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA","TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" ] + +[acme] + email = "picasoft@assos.utc.fr" + storage = "/certs/acme.json" + entryPoint = "https" + onHostRule = true + [acme.httpChallenge] + entryPoint = "http"