我按照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的有效证书这一事实?
grab 一个解决方案...在我的 grpc-server
Docker容器中,我可以挂载Traefik写的 acme.json
文件,从该文件读取密钥,并使用它们初始化gRPC服务器 . 那个'd require some grunt work, which is fine, but even then it seems like I' d可能仍然需要一个不同的 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客户端案例 .
1 回答
要在您的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) .