Skip to content
Snippets Groups Projects
Commit 2f6c1001 authored by Quentin Duchemin's avatar Quentin Duchemin
Browse files

Merge branch 'traefik-v2' into 'master'

Migrate to Traefik v2

See merge request picasoft/projets/dockerfiles!53
parents 143831de ba14ba2d
No related branches found
No related tags found
No related merge requests found
...@@ -7,36 +7,28 @@ Ce service doit être lancé sur l'ensemble des machines de l'infrastructure. ...@@ -7,36 +7,28 @@ Ce service doit être lancé sur l'ensemble des machines de l'infrastructure.
### Configuration ### Configuration
La configuration a lieu dans le fichier [traefik.toml](./traefik.toml). La configuration a lieu dans les fichiers [traefik.toml](./traefik.toml) et [traefik_dynamic.toml](./traefik_dynamic.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. 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. À 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. 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]`. 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 `[certificatesResolvers.letsencrypt.acme]`.
### Lancement ### Lancement
Assurez-vous que le dossier `/DATA/docker/traefik/certs` existe. Au premier lancement, assurez-vous que :
C'est dans ce dossier que seront conservés tous les certificats générés par Traefik. * Le dossier `/DATA/docker/traefik/certs` existe
* Créez un fichier `acme.json` à l'intérieur
* Changez son propriétaire à `root`
* Changez ses permissions à `600`
C'est dans ce fichier que seront conservés tous les certificats générés par Traefik.
### Mise à jour ### Mise à jour
Il suffit de mettre à jour le tag de l'image dans Compose. 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. Lire la documentation [sur les mises à jour mineures](https://docs.traefik.io/v2.2/migration/v2/) pour voir s'il y a des opérations à effectuer ou des options dépréciées.
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. La mise à jour vers Traefik v2 a été effectuée ; quelques détails sont à consulter [sur le wiki](https://wiki.picasoft.net/doku.php?id=technique:adminsys:migration-traefik-v2).
version: '3.7' version: '3.7'
networks:
proxy:
name: 'proxy'
services: services:
traefik: traefik:
container_name: traefik image: traefik:2.3
# DO NOT UPGRADE container_name: traefik
# SEE THIS BEFORE AND DISCUSS : https://team.picasoft.net/picasoft/pl/66aorsxhtffrjytyhnecn436wa ports:
image: traefik:1.6.6 - 80:80
ports: - 443:443
- "80:80" volumes:
# Uncomment to expose the web interface. Warning : do not use without setting a password in traefik.toml - /etc/localtime:/etc/localtime:ro
#- "8080:8080" - /var/run/docker.sock:/var/run/docker.sock
- "443:443" - ./traefik.toml:/traefik.toml
volumes: - ./traefik_dynamic.toml:/traefik_dynamic.toml
- /var/run/docker.sock:/var/run/docker.sock - /DATA/docker/traefik/certs:/certs
- ./traefik.toml:/traefik.toml networks:
- /DATA/docker/traefik/certs:/certs - proxy
restart: always restart: unless-stopped
logLevel = "INFO" [global]
debug = true sendAnonymousUsage = false
defaultEntryPoints = ["http", "https"] checkNewVersion = true
[docker] [entryPoints]
endpoint = "unix:///var/run/docker.sock" [entryPoints.web]
watch = true address = ":80"
exposedbydefault = false [entryPoints.web.http.redirections.entryPoint]
to = "websecure"
scheme = "https"
[entryPoints.websecure]
address = ":443"
[entryPoints.websecure.http]
middlewares = ["hardening@file", "compression@file"]
[entryPoints.websecure.http.tls]
certResolver = "letsencrypt"
options = "tls12@file"
[api]
[entryPoints] [providers]
[entryPoints.http] providersThrottleDuration = "2s"
address = ":80" [providers.docker]
compress = false watch = true
[entryPoints.http.redirect] endpoint = "unix:///var/run/docker.sock"
entryPoint = "https" exposedByDefault = false
[entryPoints.https] network = "proxy"
address = ":443" [providers.file]
compress = false filename = "/traefik_dynamic.toml"
[entryPoints.https.tls] watch = true
# Accept only TLS1.1 and 1.2
MinVersion = "VersionTLS11" [log]
# Accept all ciphers excepting TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA and TLS_RSA_WITH_3DES_EDE_CBC_SHA level = "INFO"
# 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] [certificatesResolvers]
email = "picasoft@assos.utc.fr" [certificatesResolvers.letsencrypt]
storage = "/certs/acme.json" [certificatesResolvers.letsencrypt.acme]
entryPoint = "https" email = "picasoft@assos.utc.fr"
onHostRule = true storage = "/certs/acme.json"
[acme.httpChallenge] [certificatesResolvers.letsencrypt.acme.httpChallenge]
entryPoint = "http" entryPoint = "web"
[tls.options]
[tls.options.tls12]
minVersion = "VersionTLS12"
cipherSuites = [
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
"TLS_AES_256_GCM_SHA384",
"TLS_CHACHA20_POLY1305_SHA256"
]
curvePreferences = ["CurveP521","CurveP384"]
[http]
[http.middlewares.hardening.headers]
addVaryHeader = true
browserXssFilter = true
contentTypeNosniff = true
forceSTSHeader = true
frameDeny = true
stsIncludeSubdomains = true
stsPreload = true
customFrameOptionsValue = "SAMEORIGIN"
referrerPolicy = "same-origin"
featurePolicy = "vibrate 'self'"
stsSeconds = 315360000
[http.middlewares.compression.compress]
excludedContentTypes = ["text/event-stream"]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment