【问题标题】:Deploying Traefik with LetsEncrypt and multiple Docker backend使用 LetsEncrypt 和多个 Docker 后端部署 Traefik
【发布时间】:2018-08-07 16:14:19
【问题描述】:

我正在考虑将 Apache 替换为我的 Web 项目(Kestrel / .Net Core)的 Traefik。阅读文档后,关于 Traefik 的一些事情我仍然不清楚:

1/ Traefik 是自动处理 LetsEncrypt 证书更新还是需要手动或通过外部脚本完成?从文档中说这是在添加新主机或重启时执行的,但是在 Traefik 运行 3 个月而没有添加任何重启/新主机后会发生什么?

2/ 当 Docker 后端无法访问时,如何提供自定义静态 HTML 页面?我可以从文档中看到如何设置特定的错误页面,但是当给定的后端不可用时,我看不到如何将流量重定向到它。

3/ 当需要更新 Docker 后端时,在执行 Docker 停止/重启之前,是否需要在 Traefik 上执行一些步骤?

4/ 似乎我无法同时运行 2 个 docker 后端,请参阅下面的配置文件,如果我取消注释第二个后端 (api.mydomain.io),那么第一个变得不可用了。我在这里遗漏了什么吗?

version: '3'

services:
  reverse-proxy:
    image: traefik # The official Traefik docker image
    command: --docker # Enables the web UI and tells Træfik to listen to docker
    ports:
      - "80:80"     # The HTTP port
      - "443:443"     # The HTTPS port
      - "8080:8080" # The Web UI (enabled by --api)
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 
      - $PWD/traefik.toml:/etc/traefik/traefik.toml
      - $PWD/acme.json:/acme.json
      - /root/mydomain_prod/cert/:/certs/
      - /root/mydomain_prod/503.html:/503.html
    container_name: traefik-reverse-proxy

  ##############################
  # Front - www.mydomain.io
  ##############################
  mydomain-front:
    image: mydomain-front
    labels:
      - traefik.enable=true
      - traefik.backend=mydomain-front
      - traefik.frontend.rule=Host:traefik.mydomain.io
      - traefik.port=8084
    networks:
      - internal
      - proxy
    container_name: mydomain-front


  ##############################
  # API - api.mydomain.io
  # Note: If I uncomment this one, then www.mydomain.io won't work anymore
  ##############################
  #mydomain-api:
  #  image: mydomain-api
  #  labels:
  #    - traefik.enable=true
  #    - traefik.backend=mydomain-api
  #    - traefik.frontend.rule=Host:api.mydomain.io
  #    - traefik.port=8082
  #  networks:
  #    - internal
  #    - proxy
  #  container_name: mydomain-api

非常感谢,

弗洛

【问题讨论】:

    标签: traefik kestrel-http-server


    【解决方案1】:

    1/ Traefik 可以处理 LetsEncrypt 证书更新。只需记住创建一个 Volume 来存储 acme.json 文件。当证书到期时,Traefik 会在不询问的情况下进行续订。

    2/ 我不知道这是否可能。如果您找到解决方案,请分享。

    3/ 当您需要更新 Docker 时,只需更新它即可。 Traefik 将从该更改中触发,并且更新是自己的配置。

    4/ 您可能不得不同时运行后端。下面你可以看到一个 docker-compose.yml 配置:

    version: '3'
    services:
      two-backend-service:
        restart: always
        image: ……..
        labels:
          - traefik.enable=true
          - traefik.service1.frontend.rule=Host:service1.exemple.com
          - traefik.service1.frontend.passHostHeader=true
          - traefik.service1.port=8082
          - traefik.Service2.backend=service2
          - traefik.Service2.frontend.rule=Host:service2.exemple.com
          - traefik.Service2.frontend.passHostHeader=true
          - traefik.Service2.port=8081
    
      traefik:
        build:
          context: ./traefik
          dockerfile: Dockerfile
        restart: always
        ports:
          - 80:80
          - 443:443
        labels:
          - traefik.enable=false
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock:ro
          - traefik_letsencrypt:/etc/traefik/acme/
    
    volumes:
      traefik_letsencrypt:
          driver: local
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多