2017-10-02 2 views
0

J'ai réussi à configurer Traefik pour qu'il fonctionne avec mon essaim de dockers et pour les requêtes HTTP cela fonctionne très bien. Cependant, je ne sais pas comment configurer SSL pour certains de mes conteneurs. Je vais utiliser letsencrypt pour générer des certificats.Comment ajouter des étiquettes correctes dans docker pour SSL?

traefik.toml (partiel)

defaultEntryPoints = ["https","http"] 

[entryPoints] 
    [entryPoints.http] 
    address = ":80" 
    [entryPoints.https] 
    address = ":443" 
    [entryPoints.https.tls] 

[acme] 
email = "[email protected]" 
storage = "acme.json" 
entryPoint = "https" 
onHostRule = true 
caServer = "https://acme-staging.api.letsencrypt.org/directory" 

docker-compose.yml

version: '3' 
services: 
    web: 
    ... 
    deploy: 
     labels: 
     - "traefik.enable=true" 
     - "traefik.frontend.rule=Host:example.com,www.example.com" 
     - "traefik.docker.network=public" 
     - "traefik.frontend.entryPoints=http" 
     - "traefik.backend=service_web" 

Dans cette configuration, ma demande arrive jamais SSL parce que mes conteneurs n'ont pas configuré SSL entryPoint. Si je change "traefik.frontend.entryPoints" en "https", Letsencrypt est appelé (LE donne une erreur à cause de la mise en scène mais cela ne me dérange pas pour le moment).

Mon plus gros problème est que, je ne sais toujours pas comment convertir la configuration de traefik TOML en étiquettes docker-composer. Par exemple, Traefik docs expliquer les entrypoints mais j'ai beaucoup de services qui vivent sous différents domaines. Certains ont SSL, d'autres n'ont pas de SSL; par conséquent, je veux être en mesure de configurer les entryPoints http et https, les redirections http vers https, etc. en utilisant uniquement docker-composer.

De même, une fois que je suis en mesure de définir des entrypoints dans docker-composer, dois-je garder le bloc [entryPoints] dans traefik.toml?

Répondre

0

Ahoi!

Exigences: Plugin Local-persist Volume: https://github.com/CWSpear/local-persist (sinon le pilote du volume doit être changé) Le réseau pour Traefik doit être pré-créé: "réseau docker créer la superposition -d proxy"

(1) Fire Up Traefik:

version: "3" 

services: 
    traefik: 
    image: traefik 
    #command: --consul --consul.endpoint=consul:8500 
    #command: storeconfig --consul --consul.endpoint=consul:8500 
    networks: 
     - proxy 
    ports: 
     - 80:80 
     - 443:443 
     #- 8080:8080 
    volumes: 
     - /var/run/docker.sock:/var/run/docker.sock 
     - traefikdata:/etc/traefik/ 
    deploy: 
     #replicas: 3 
     replicas: 1 
     placement: 
     constraints: [node.role == manager] 
     update_config: 
     parallelism: 1 
     delay: 45s 
     monitor: 15s 
     restart_policy: 
     condition: on-failure 
     delay: 5s 
     max_attempts: 10 
     window: 60s 

volumes: 
    traefikdata: 
    driver: local-persist 
    driver_opts: 
     mountpoint: /data/docker/proxy 

networks: 
    proxy: 
    external: true 

note importante: Lorsque vous utilisez ACME et que vous souhaitez mettre à l'échelle le Traefik (comme ici 3), vous devez utiliser Consul ou ETCD comme "stockage" pour la configuration. Vous n'utilisez pas Consule ou ETCD si vous n'utilisez qu'une instance de Traefik. Avec un certificat normal ETCD & Consul n'est jamais nécessaire.

(2) Mont traefik.toml

logLevel = "WARN" 
debug = false 
defaultEntryPoints = ["http", "https"] 

[entryPoints] 
[entryPoints.http] 
address = ":80" 
compress = false 
    [entryPoints.http.redirect] 
     entryPoint = "https" 
    [entryPoints.https] 
    address = ":443" 
    [entryPoints.https.tls] 

#Letsencrypt 
[acme] 
email = "[email protected]" 
storage = "traefik/acme/account" 
entryPoint = "https" 
onHostRule = true 
onDemand = true 

#[[acme.domains]] 
# main = "yourdomain.at" 
# sans = ["sub1.yourdomain.at", "www.yourdomain.at"] 
#[[acme.domains]] 
# main = "anotherdomain.at" 


#[web] 
#address = ":8080" 

[docker] 
domain = "docker.localhost" 
watch = true 
swarmmode = true 

La partie décommentée n'est pas obligatoire

(3) Démarrez un service

version: '3' 

services: 
    nginx: 
    image: nginx 
    deploy: 
     labels: 
     - "traefik.port=80" 
     - "traefik.docker.network=proxy" 
     - "traefik.frontend.rule=Host:sub1.yourdomain.at" 
     - "traefik.backend=nginx" 
     - "traefik.frontend.entryPoints=http,https" 
     replicas: 1 
    networks: 
     proxy: 
     aliases: 
      - nginx 
    volumes: 
     - html:/usr/share/nginx/html 
    environment: 
     - NGINX_HOST=sub.yourdomain.at 
     - NGINX_PORT=80 
    #command: /bin/bash -c "envsubst </etc/nginx/conf.d/mysite.template> /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" 

networks: 
    proxy: 
    external: true 
    default: 
    driver: overlay 

volumes: 
    html: 
    driver: local-persist 
    driver_opts: 
     mountpoint: /data/docker/html 

Quelques autres exemples: https://github.com/Berndinox/compose-v3-collection