使用Docker与Traefik进行加密时无法获取证书

时间:2019-05-28 21:45:43

标签: docker-compose traefik

我已经用Docker及其背后的服务设置了Traefik。基本设置有效。我可以使用重定向到https的域名浏览到端口80,然后看到“无效的证书”,因为我们的加密部分已损坏。

[路由器] <-:80 /:443-> [linux / docker [Traefik:80 /:443] [Service:8080]]

这是日志(已编辑域)中的条目。

日志

  

acme:错误->一个或多个域出现问题:\ n [xyz.example.net] acme:错误:400 :: urn:ietf:params:acme:error:connection ::获取   http://xyz.example.net/.well-known/acme-challenge/eIAFZqaGMHMWaBjINjzk4m8PuWiYfuCHCTnSU9M:   获取验证数据时出错,URL:\ n“

该错误消息是准确的,我无法浏览到该URL。我注意到我可以使用内部IP http://10.0.0.21/.well-known/acme-challenge/key转到该URL,Traefik在日志中对此进行响应:

  

traefik | time =“ 2019-05-28T21:20:52Z” level = error msg =“在542.914495ms内重试令牌时遇到错误”

我怀疑问题是域名重定向设置。我的服务位于xyz.example.net(Traefik也是如此)。我怀疑问题是Traefik将xyz.example.net:80/:443上传入的所有流量重定向到该服务,而不是处理./well-known/acme-challenge本身。我需要给网关本身起个名字吗? (例如zzz.example.net是Traefik,xyz.example.net是服务吗?)

我该如何解决?

我的TOML文件:

debug = false

logLevel = "ERROR" #DEBUG, INFO, WARN, ERROR, FATAL, PANIC
InsecureSkipVerify = true
defaultEntryPoints = ["https", "http"]

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

[retry]

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "example.net"
watch = true
exposedbydefault = false

[acme]
email = "me@example.net"
storage = "acme.json"
entryPoint = "https"
onDemand = false 

onHostRule = true
[acme.httpChallenge]
entryPoint = "http"

1 个答案:

答案 0 :(得分:0)

我注意到,尽管内部IP 192.xxx有效,但外部IP没有起作用。当然,我想说的是,这似乎是一个防火墙问题-但是-防火墙可以让流量恰好适合我正在测试的服务,所以我很困惑。

解决方案? 端口80未在防火墙上转发,端口443已转发。因此,当我尝试使用curl / browser进行测试时,我输入了https://xyz.example.com-可以正常工作。