2.1.4 版本中的 Traefik SSL 问题

Traefik SSL Issue in version 2.1.4

我有一个 docker swarm 集群。在该集群中,我需要使用 SSL 入口点配置 Traefik。一旦我将我的配置应用到 traefik 中,它就会出现一些错误。请帮我解决这个问题。

这是我的 .toml 文件,

logLevel = "INFO"

[docker]
  endpoint = "unix:///var/run/docker.sock"
  exposedbydefault = false

[api]
  dashboard =true

[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]
      [[entryPoints.https.tls.certificates]]
      certFile = "/root/ssl/mi-synergy.com.crt"
      keyFile = "/root/ssl/mi-synergy.com.key"

这是我的 Stack 文件

version: "3.7"
services:
  traefik:
    image: traefik:2.1.4
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/traefik.toml:/etc/traefik/traefik.toml
      - /root/ssl:/root/ssl
    networks:
      - webgateway
      - traefik
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    deploy:
      mode: global
      placement:
        constraints:
          - node.role == manager
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure

networks:
  webgateway:
    driver: overlay
  traefik:
    driver: overlay

日志提取是

traefik_traefik.0.yogfftkp2f2n@docker-01.mi-synergy.com    | 2020/02/25 14:29:58 command traefik error: field not found, node: redirect
traefik_traefik.0.2lqrvwlbyrki@docker-01.mi-synergy.com    | 2020/02/25 14:30:06 command traefik error: field not found, node: redirect
traefik_traefik.0.9xor5lo32n2i@docker-01.mi-synergy.com    | 2020/02/25 14:30:14 command traefik error: field not found, node: redirect
traefik_traefik.0.4j6uji7yubsp@docker-01.mi-synergy.com    | 2020/02/25 14:30:22 command traefik error: field not found, node: redirect
traefik_traefik.0.doe8mlbt0xrf@docker-01.mi-synergy.com    | 2020/02/25 14:30:30 command traefik error: field not found, node: redirect
traefik_traefik.0.qjc2kbmq73z3@docker-01.mi-synergy.com    | 2020/02/25 14:30:38 command traefik error: field not found, node: redirect
traefik_traefik.0.m7qlc2tbjosf@docker-01.mi-synergy.com    | 2020/02/25 14:30:46 command traefik error: field not found, node: redirect
traefik_traefik.0.tvlzvywq5fmg@docker-01.mi-synergy.com    | 2020/02/25 14:30:54 command traefik error: field not found, node: redirect
traefik_traefik.0.wed43nnm9k4i@docker-01.mi-synergy.com    | 2020/02/25 14:31:02 command traefik error: field not found, node: redirect
traefik_traefik.0.t8zirtsoxvrn@docker-01.mi-synergy.com    | 2020/02/25 14:31:09 command traefik error: field not found, node: redirect
traefik_traefik.0.pviswukpjspe@docker-01.mi-synergy.com    | 2020/02/25 14:31:17 command traefik error: field not found, node: redirect
traefik_traefik.0.pevarrjo9f2b@docker-01.mi-synergy.com    | 2020/02/25 14:31:25 command traefik error: field not found, node: redirect
traefik_traefik.0.rljmx5gqao2c@docker-01.mi-synergy.com    | 2020/02/25 14:31:33 command traefik error: field not found, node: redirect
traefik_traefik.0.5ewdb1htrliv@docker-01.mi-synergy.com    | 2020/02/25 14:31:41 command traefik error: field not found, node: redirect
traefik_traefik.0.9vwultfvcepk@docker-01.mi-synergy.com    | 2020/02/25 14:31:49 command traefik error: field not found, node: redirect
traefik_traefik.0.uungeb848jbr@docker-01.mi-synergy.com    | 2020/02/25 14:31:57 command traefik error: field not found, node: redirect
traefik_traefik.0.yafuy3fcy0jq@docker-01.mi-synergy.com    | 2020/02/25 14:32:05 command traefik error: field not found, node: redirect

你可以试试下面的docker堆栈

version: "3.7"
services:
  traefik:
    image: traefik:2.1.4
    command:
      - '--providers.docker=true'
      - '--providers.providersThrottleDuration=2s'
      - '--providers.docker.watch=true'
      - '--providers.docker.swarmMode=true'
      - '--providers.docker.swarmModeRefreshSeconds=15s'
      - '--providers.docker.exposedbydefault=false'
      - '--providers.docker.defaultRule=Host("${REPLACE_WITH_YOUR_DOMAIN}")'
      - '--accessLog.bufferingSize=0'
      - '--api=true'
      - '--api.dashboard=true'
      - '--api.insecure=true'
      - '--ping.entryPoint=web'
      - '--providers.file.filename=/run/traefik.toml'
      - '--entryPoints.web.address=:80'
      - '--entryPoints.websecure.address=:443'
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock:ro'
      - '/root/traefik.toml:/run/traefik.toml'
      - '/root/ssl:/root/ssl'
    networks:
      - webgateway
      - traefik
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    deploy:
      labels:
        - traefik.enable=true
        - traefik.docker.network=traefik
        - traefik.http.middlewares.https_redirect.redirectscheme.scheme=https
        - traefik.http.middlewares.https_redirect.redirectscheme.permanent=true
        - traefik.http.routers.http_catchall.rule=HostRegexp(`{any:.+}`)
        - traefik.http.routers.http_catchall.entrypoints=web
        - traefik.http.routers.http_catchall.middlewares=https_redirect
      mode: global
      placement:
        constraints:
          - node.role == manager
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure

networks:
  webgateway:
    driver: overlay
  traefik:
    driver: overlay

traefik.toml

[[tls.certificates]]
  certFile = "/root/ssl/mi-synergy.com.crt"
  keyFile = "/root/ssl/mi-synergy.com.key"

确保 ssl 证书存在于 /root/ssl 下的主机和 /root/traefik.toml 下的 traefik 配置文件,否则容器将无法使用它。 如果你 运行 在多节点群中它应该在每个节点中(不仅是管理器)因为你使用了全局部署模式