在Docker Swarm模式下运行Traefik后面的内部和外部服务

时间:2017-09-05 07:52:20

标签: traefik

我找不到任何方法让我的情况变得可行。我有2个申请:

1:在sub1.domain.com上运行的外部服务Web应用程序。如果我用acme(LetsEncrypt)在traefik后面运行这个应用程序,它运行正常。我还有一些后端服务(api / auth),它们都运行有效的LetsEncrypt证书,并通过traefik将他们的http流量重定向到https

[entryPoints.http.redirect]
  entryPoint = "https"

我必须为此服务提供某种形式的http到https转发。

2:在sub2.domain.com上运行的内部服务Web应用程序。我有一个自签名的可信证书(内部CA),如果我将它设置为默认证书,或者如果我在应用程序本身(在tomcat中)使用它,它在traefik后面可以正常工作。但是,因为它是一个内部服务,如果能解决我的问题,我可以在没有ssl的情况下生活。但是,这不适用于traefik的http到https转发。

我一直试图让这两个服务在同一个traefik实例后面运行,但我能想到的所有可能的情况都不起作用,因为它们要么仍在进行中,要么根本不工作。

方案

1:没有http到https重定向,不要为内部服务打扰https,只需使用http。然后在外部Web服务的后端内部重定向到https。

问题

  • 无法拥有2个traefik转发的traefik端口 将1个单端口转发到另一个proto(因为后端始终是 http或https端口)
  • 使用ACME而不是默认证书

2:在默认证书上使用ACME

其他人thought this was a good idea。它还没有工作。

3:重新使用后端ssl证书。 traefik只是重定向而没有" ssl终止"。我不确定这是否相同,但有一个名为" passTLSCert"的选项。但是,似乎这只能在.toml文件中定义的前端不可行(可能是因为我使用docker作为后端)。

4:使用DNS-01质询为我的内部服务创建SSL证书。 听起来这样可行,所以我现在使用CloudFlare并拥有api密钥。但是,它似乎不适用于子域。我的问题报告没有回复:https://github.com/containous/traefik/issues/1953

编辑:我或许可以解决4中描述的问题,以使其发挥作用。看来内部DNS可能与traefik冲突

1 个答案:

答案 0 :(得分:0)

有人认为我们的内部DNS区域将按子域添加,这意味着SOA请求返回子域名作为名称。由于内部dns区域与cloudflare dns不同,因此cloudflare不能很好用。

将此更改为包含子域记录的主区域可修复此问题(与delayDontCheckDNS选项结合使用)。