Merge branch 'traefik-v2' into 'master'
Migrate to Traefik v2 See merge request picasoft/projets/dockerfiles!53
This commit is contained in:
commit
2f6c10011e
|
@ -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)).
|
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).
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
|
@ -1,18 +1,22 @@
|
||||||
version: '3.7'
|
version: '3.7'
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
name: 'proxy'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
traefik:
|
traefik:
|
||||||
|
image: traefik:2.3
|
||||||
container_name: 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:
|
ports:
|
||||||
- "80:80"
|
- 80:80
|
||||||
# Uncomment to expose the web interface. Warning : do not use without setting a password in traefik.toml
|
- 443:443
|
||||||
#- "8080:8080"
|
|
||||||
- "443:443"
|
|
||||||
volumes:
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- ./traefik.toml:/traefik.toml
|
- ./traefik.toml:/traefik.toml
|
||||||
|
- ./traefik_dynamic.toml:/traefik_dynamic.toml
|
||||||
- /DATA/docker/traefik/certs:/certs
|
- /DATA/docker/traefik/certs:/certs
|
||||||
restart: always
|
networks:
|
||||||
|
- proxy
|
||||||
|
restart: unless-stopped
|
||||||
|
|
|
@ -1,35 +1,40 @@
|
||||||
logLevel = "INFO"
|
[global]
|
||||||
debug = true
|
sendAnonymousUsage = false
|
||||||
defaultEntryPoints = ["http", "https"]
|
checkNewVersion = true
|
||||||
|
|
||||||
[docker]
|
|
||||||
endpoint = "unix:///var/run/docker.sock"
|
|
||||||
watch = true
|
|
||||||
exposedbydefault = false
|
|
||||||
|
|
||||||
[api]
|
|
||||||
|
|
||||||
[entryPoints]
|
[entryPoints]
|
||||||
[entryPoints.http]
|
[entryPoints.web]
|
||||||
address = ":80"
|
address = ":80"
|
||||||
compress = false
|
[entryPoints.web.http.redirections.entryPoint]
|
||||||
[entryPoints.http.redirect]
|
to = "websecure"
|
||||||
entryPoint = "https"
|
scheme = "https"
|
||||||
[entryPoints.https]
|
[entryPoints.websecure]
|
||||||
address = ":443"
|
address = ":443"
|
||||||
compress = false
|
[entryPoints.websecure.http]
|
||||||
[entryPoints.https.tls]
|
middlewares = ["hardening@file", "compression@file"]
|
||||||
# Accept only TLS1.1 and 1.2
|
[entryPoints.websecure.http.tls]
|
||||||
MinVersion = "VersionTLS11"
|
certResolver = "letsencrypt"
|
||||||
# Accept all ciphers excepting TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA and TLS_RSA_WITH_3DES_EDE_CBC_SHA
|
options = "tls12@file"
|
||||||
# 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]
|
|
||||||
|
[providers]
|
||||||
|
providersThrottleDuration = "2s"
|
||||||
|
[providers.docker]
|
||||||
|
watch = true
|
||||||
|
endpoint = "unix:///var/run/docker.sock"
|
||||||
|
exposedByDefault = false
|
||||||
|
network = "proxy"
|
||||||
|
[providers.file]
|
||||||
|
filename = "/traefik_dynamic.toml"
|
||||||
|
watch = true
|
||||||
|
|
||||||
|
[log]
|
||||||
|
level = "INFO"
|
||||||
|
|
||||||
|
[certificatesResolvers]
|
||||||
|
[certificatesResolvers.letsencrypt]
|
||||||
|
[certificatesResolvers.letsencrypt.acme]
|
||||||
email = "picasoft@assos.utc.fr"
|
email = "picasoft@assos.utc.fr"
|
||||||
storage = "/certs/acme.json"
|
storage = "/certs/acme.json"
|
||||||
entryPoint = "https"
|
[certificatesResolvers.letsencrypt.acme.httpChallenge]
|
||||||
onHostRule = true
|
entryPoint = "web"
|
||||||
[acme.httpChallenge]
|
|
||||||
entryPoint = "http"
|
|
||||||
|
|
28
pica-traefik/traefik_dynamic.toml
Normal file
28
pica-traefik/traefik_dynamic.toml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
[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"]
|
Loading…
Reference in New Issue
Block a user