我按照Traefik指南设置Let's Encrypt and Docker,现在my-domain.com
正确接受HTTPS,后面有静态网站。接下来我想在my-grpc-server.my-domain.com
处找到一个在Traefik后面运行的gRPC服务器。查看使用gRPC with Traefik的Traefik文档,我看到说明是使用自签名证书。我如何利用我已经拥有Let's Encrypt的有效证书这一事实?
在我的grpc-server
Docker容器中尝试解决方案...我可以挂载Traefik写的acme.json
文件,从该文件中读取密钥,并使用它们来初始化gRPC服务器。这需要一些笨拙的工作,这很好,但即使这样,我似乎仍然需要一个不同的traefik.toml
配置来解释Traefik和我的grpc-server
Docker之间的流量这一事实容器需要SSL。
更新:到目前为止,我一直试着尝试一下但没有成功。为了简单起见,我手动导出了极限键进行测试,以便将Let的加密内容从图片中删除。
这是gRPC客户端错误:
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.CANCELLED, Received http2 header with status: 500)>
Traefik错误:
level=warning msg="Error forwarding to https://172.18.0.2:443, err: stream error: stream ID 1; INTERNAL_ERROR"
奇怪的是,当我连接gRPC客户端时,gRPC服务器上没有消息。但是,当我在 Web浏览器中点击my-grpc-server.my-server.com
时,我在Traefik中遇到相同的错误,并在gRPC服务器上出现其他错误:
E1112 21:06:37.480636928 8 http_server_filter.c:236] GET request without QUERY
我现在想知道为什么流量会在Web浏览器案例中转发,而不是gRPC客户端案例。
答案 0 :(得分:0)
要在您的traefik和容器之间以https进行通信,您需要在容器上添加标签traefik.protocol = https(https://docs.traefik.io/configuration/backends/docker/#on-containers)
此外,当traefik将联系您的后端服务器时,使用docker后端,它将使用容器的IP(并且它与您的域证书不匹配)。因此,您可以在traefik配置中激活InsecureSkipVerify
(https://docs.traefik.io/configuration/commons/#main-section)。