与gRPC Trafik和让我们encryption?

我遵循Traefik指南来设置Let's Encrypt和Docker ,现在my-domain.com正确地接受HTTPS,后面跟着一个静态网站。 接下来,我想在my-grpc-server.my-domain.com上运行一个在my-grpc-server.my-domain.com后面运行的gRPC服务器。 查看Traefik与Traefik使用gRPC的Traefik文档,我看到说明是使用自签名证书。 我如何利用已经拥有Let's Encrypt的有效证书的事实?

在我的grpc-server Docker容器中grpc-server一个解决scheme…我可以安装Traefik写的acme.json文件,从该文件读取密钥,并使用它们初始化gRPC服务器。 这需要一些咕噜的工作,这很好,但即使如此,似乎我可能仍然需要一个不同的traefik.tomlconfiguration来说明Traefik和我的grpc-server Docker容器之间的stream量需要SSL的事实。


更新:到目前为止,我一直在尝试没有成功。 为了简单起见,我手动导出了用于testing的极速密钥,以便让Let's Encrypt的东西不在图片中。

这里的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时,在my-grpc-server.my-server.com中出现同样的错误,并在gRPC服务器上出现一个额外的错误: E1112 21:06:37.480636928 8 http_server_filter.c:236] GET request without QUERY我现在想知道为什么stream量在Web浏览器的情况下转发,而不是gRPC客户端的情况下。

要在你的traefik和你的容器之间的https通信,你需要在你的容器上添加标签traefik.protocol = https( https://docs.traefik.io/configuration/backends/docker/#on-containers

而且,在docker后端的时候,traefik会联系你的后台服务器,它会使用容器的IP(与你的域名证书不匹配)。 所以你可以在你的traefikconfiguration中激活InsecureSkipVerifyhttps://docs.traefik.io/configuration/commons/#main-section )。