【问题标题】:Traefik ACME DNS challenge not working with dockerTraefik ACME DNS 挑战不适用于 docker
【发布时间】:2018-05-29 15:46:39
【问题描述】:

我正在尝试将 Traefik 配置为在 DigitalOcean 服务器上运行的 docker 容器的代理。

这是我的 Traefik 容器配置:

version: '2'

services:
  traefik:
    image: traefik
    restart: always
    command: --docker
    ports:
      - 80:80
      - 443:443
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - $PWD/traefik.toml:/traefik.toml
      - $PWD/acme.json:/acme.json
    container_name: traefik
    environment:
      DO_AUTH_TOKEN: abcd
    labels:
      - traefik.frontend.rule=Host:monitor.example.com
      - traefik.port=8080

networks:
  proxy:
    external: true

还有 traefik.toml,

defaultEntryPoints = ["http", "https"]
[web]
address = ":8080"
  [web.auth.basic]
  users = ["admin:secretpassword"]
[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
      entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]
[acme]
email = "lakshmi@example.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
onDemand = false
  [acme.dnsChallenge]
    provider = "digitalocean"
    delayBeforeCheck = 0

当我尝试访问 https://monitor.example.com 时,我收到此错误:

traefik    | time="2018-05-29T15:35:32Z" level=error msg="Unable to obtain ACME certificate for domains \"monitor.example.com\" detected thanks to rule \"Host:monitor.example.com\" : cannot obtain certificates: acme: Error -> One or more domains had a problem:\n[monitor.example.com] Error presenting token: HTTP 403: forbidden: You do not have access for the attempted action.\n"

我已经提供了一个有效的 DO 令牌并将 monitor.example.com 指向运行 Traefik 的 VM。我是否缺少任何步骤?

【问题讨论】:

    标签: docker lets-encrypt traefik


    【解决方案1】:

    我收到了 403,因为 Traefik 试图使用 read-only 令牌在我的 DigitalOcean 域中为 ACME DNS 质询编写 TXT 条目。我将其更改为 read-write 令牌,它运行良好。

    【讨论】:

    • 嗯,我遇到了同样的问题,但我没有看到改变为读写的方法。我没有看到任何设置。
    • @badri,您能否指出一个资源,该资源显示如何配置 digitalocean DNS 质询?他们网站上的 digitalocean 示例使用 tls challenge。我能找到的docker-compose.yml文件里面没有token,所以不知道放哪里。
    【解决方案2】:

    对于遇到此问题的其他人,请确保 acme.json 具有 600 个权限。不要自己创建或触摸 acme.json。让 Traefik 创建它。创建 pod 后,检查 acme.json 的权限。 我发现的问题是 Traefik 创建 acme.json 并将其设置为 600。运行升级后,acme.json 更改为 660 并开始给出“未知解析器让加密”错误。该修复程序必须取消注释 Traefik Helm 图表中 values.yml 中的“initContainers”行。基本上它在启动前将权限设置为 600。哈克但有效。

    deployment:
      enabled: true
      # Can be either Deployment or DaemonSet
      kind: Deployment
      replicas: 1
      annotations: {}
      labels: {}
      podAnnotations: {}
      podLabels: {}
      additionalContainers: []
      volumeMounts:
        - name: csi-pvc 
      initContainers: 
        - name: volume-permissions
          image: busybox:1.31.1
          command: ["sh", "-c", "chmod -Rv 600 /data/*"]
          volumeMounts:
            - name: csi-pvc
              mountPath: /data
      dnsPolicy: ClusterFirstWithHostNet
      imagePullSecrets: []
    

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 2021-10-13
      • 2021-11-03
      • 1970-01-01
      • 2022-07-12
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多