Google Cloud TCP 外部负载平衡器和 TLS 不是自签名的
Google Cloud TCP external load balancer and TLS not self signed
是否可以使用 public 证书直接公开 L4 负载均衡器后面的服务器?
此服务器位于 Kubernetes pod 内。它前面有一个创建外部 L4 LB 的 TCP 负载均衡器服务。
我的问题是 TLS 流量没有到达 pod 内的容器。所以如果你用类似的配置成功了,我很想知道。
更新
我没说流量是GRPC
这是我所做的:我有一个域和相应的官方证书。我想保护 grpc 连接。
我尝试了两种方法:
- 使用google ESP 容器,我将证书作为nginx 机密,将其传递给容器,设置ssl 端口。在同一个 pod 的 ESP 后面,我有我的 grpc 服务器
在这种情况下,我在客户端收到这样的消息:
D0610 14:38:46.246248584 32401 security_handshaker.cc:176] Security
handshake failed:
{"created":"@1591792726.246234613","description":"Handshake
failed","file":"../deps/grpc/src/core/lib/security/transport/security_handshaker.cc","file_line":291,"tsi_code":10,"tsi_error":"TSI_PROTOCOL_FAILURE"}
我看到一些与 wireshark 的 TLS 交换,但没有登录,尤其是。
- 没有 ESP,我将证书放在我的 GRPC 服务器中。 GRPC 服务器出现如下错误:
error:1408F10B:SSL routines:ssl3_get_record:wrong version number
在 google ESP documentation 中,我看到我必须证明该域属于我并上传证书(但在哪里)?
更新 2
到今天为止,我没有看到任何证据表明它是可行的。
IMO,主要问题是L4有证书域名对应的IP。因此 pods 没有正确的 IP 来证明他们可以使用证书,因此他们对根的请求被拒绝(我没有证据,因为我无法从 ESP 中的 nginx 获取调试信息。不过,我已经看到了使用纯 GRPC 服务器解决方案的请求。
问题出在 TLS 交换中。
通过在 ESP 中安装证书,它可以在 Web 浏览器上正常工作并且证书被指示为有效,而对于 GRPC 客户端,TLS 握手失败。添加额外的跟踪信息有帮助。
通过检查我的证书(不是自签名但附加到我的域),我发现它提供了一个中间证书。我将它与域证书(在同一个 crt 文件中)一起安装,然后就可以使用了。
我不知道为什么会这样,但可能是因为 grpc 客户端库中的 root_cert 文件太旧了。
顺便说一下,对于域证书,对于证书的 CN 和 subjectAltName 没有特定要求。没有它它也能工作。所以它必须只适用于我在其他地方看到的自签名证书。
我还有一个问题打扰了我的任务:注意不要将 L4 负载均衡器的服务端口命名为 'http2' 。我有一些副作用,因此导致另一个部署失败。事实上,当你做 https 的时候,不要把 http2 放在名字里。
无论如何,它现在正在运行并响应赏金请求。感谢所有试图提供帮助的人:)
是否可以使用 public 证书直接公开 L4 负载均衡器后面的服务器?
此服务器位于 Kubernetes pod 内。它前面有一个创建外部 L4 LB 的 TCP 负载均衡器服务。
我的问题是 TLS 流量没有到达 pod 内的容器。所以如果你用类似的配置成功了,我很想知道。
更新
我没说流量是GRPC
这是我所做的:我有一个域和相应的官方证书。我想保护 grpc 连接。
我尝试了两种方法:
- 使用google ESP 容器,我将证书作为nginx 机密,将其传递给容器,设置ssl 端口。在同一个 pod 的 ESP 后面,我有我的 grpc 服务器
在这种情况下,我在客户端收到这样的消息:
D0610 14:38:46.246248584 32401 security_handshaker.cc:176] Security handshake failed: {"created":"@1591792726.246234613","description":"Handshake failed","file":"../deps/grpc/src/core/lib/security/transport/security_handshaker.cc","file_line":291,"tsi_code":10,"tsi_error":"TSI_PROTOCOL_FAILURE"}
我看到一些与 wireshark 的 TLS 交换,但没有登录,尤其是。
- 没有 ESP,我将证书放在我的 GRPC 服务器中。 GRPC 服务器出现如下错误:
error:1408F10B:SSL routines:ssl3_get_record:wrong version number
在 google ESP documentation 中,我看到我必须证明该域属于我并上传证书(但在哪里)?
更新 2
到今天为止,我没有看到任何证据表明它是可行的。
IMO,主要问题是L4有证书域名对应的IP。因此 pods 没有正确的 IP 来证明他们可以使用证书,因此他们对根的请求被拒绝(我没有证据,因为我无法从 ESP 中的 nginx 获取调试信息。不过,我已经看到了使用纯 GRPC 服务器解决方案的请求。
问题出在 TLS 交换中。
通过在 ESP 中安装证书,它可以在 Web 浏览器上正常工作并且证书被指示为有效,而对于 GRPC 客户端,TLS 握手失败。添加额外的跟踪信息有帮助。
通过检查我的证书(不是自签名但附加到我的域),我发现它提供了一个中间证书。我将它与域证书(在同一个 crt 文件中)一起安装,然后就可以使用了。
我不知道为什么会这样,但可能是因为 grpc 客户端库中的 root_cert 文件太旧了。
顺便说一下,对于域证书,对于证书的 CN 和 subjectAltName 没有特定要求。没有它它也能工作。所以它必须只适用于我在其他地方看到的自签名证书。
我还有一个问题打扰了我的任务:注意不要将 L4 负载均衡器的服务端口命名为 'http2' 。我有一些副作用,因此导致另一个部署失败。事实上,当你做 https 的时候,不要把 http2 放在名字里。
无论如何,它现在正在运行并响应赏金请求。感谢所有试图提供帮助的人:)