【发布时间】:2020-06-27 02:21:03
【问题描述】:
我有一个 VM0,其中 Traefik 作为 docker 运行,还有两个目标系统 VM1 和 VM2,它们都运行了一个网络服务器。
所有 domainA.com 请求都应该通过 TCP 路由器和 tls 直通发送到 VM1,因为此 Web 服务自己处理证书。
所有 domainB.com 请求都应该通过 http 路由器发送到 VM2,Traefik 应该为这个域生成 tls 证书。
我现在的问题是,一旦我将任何 tls 配置添加到 http 路由器,tcp passthrough 似乎不再起作用了。在日志中,我看到以下消息:
time="2020-03-15T21:46:18Z" level=debug msg="为请求提供默认证书:\"subdomain.DomainA.com\"" time="2020-03-15T21:46:18Z" level=debug msg="http: 来自 192.168.1.116:55103 的 TLS 握手错误:远程错误:tls:未知证书" time="2020-03-15T21:46:18Z" level=debug msg="为请求提供默认证书:\"subdomain.DomainA.com\"" time="2020-03-15T21:46:18Z" level=debug msg="http: 来自 192.168.1.116:55104 的 TLS 握手错误:远程错误:tls:未知证书"
如果我通过 Traefik 访问该网站,它会显示来自 Traefik 的自签名证书。
如果我删除了 http 路由器下的所有 tls 设置,则直通再次起作用。
我的动态文件:
http:
routers:
HTTProuter0:
rule: "HostRegexp(`{subdomain:[a-z]+}.domainA.com`)"
service: "domainA"
entryPoints:
- "websecure"
tls:
certResolver: "myresolver"
domains:
- main: "domainA.com"
sans:
- "*.domainA.com"
services:
domainA:
loadBalancer:
servers:
- url: "https://192.168.1.13:4433"
tcp:
routers:
TCProuter0:
rule: "HostSNI(`*`)"
service: "domainB"
entryPoints:
- "websecure"
tls:
passthrough: true
services:
domainB:
loadBalancer:
servers:
- address: "192.168.1.11:443"
我的静态文件:
serversTransport:
insecureSkipVerify: true
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
spain:
address: ":4443"
certificatesResolvers:
myresolver:
acme:
email: email@email.com
storage: /etc/traefik/acme/acme.json
dnsChallenge:
provider: cloudflare
delayBeforeCheck: 60
resolvers:
- "1.1.1.1:53"
- "8.8.8.8:53"
api:
insecure: true
dashboard: true
providers:
docker: {}
file:
directory: /etc/traefik/config
watch: true
log:
filePath: /etc/traefik/traefik.log
level: DEBUG
我已经被这个问题困扰了好几个小时。我不确定这是一个错误还是我做错了什么?
任何帮助将不胜感激!
非常感谢
【问题讨论】: