2

我正在寻找一种向外界公开多个 GKE TCP 服务的通用方法。我想要在集群边缘终止的 SSL。如果可能的话,我也更喜欢基于客户端证书的身份验证。

我当前的用例是从私有数据中心(并且只能从那里)访问部署在 GKE 中的 PostgreSQL 服务。但基本上我对适用于任何基于 TCP 的服务的解决方案感兴趣,而无需内置 SSL 和身份验证。

一种选择是将 nginx 部署为 TCP 服务的反向代理,使用 LoadBalancer 类型的服务(L4,网络负载平衡器)公开 nginx,并使用 SSL 和客户端证书验证配置 nginx。

有没有更好、更 GKE 原生的方式来实现它?

4

1 回答 1

1

据我所知,没有 GKE-native 方式可以完全满足您的需求

如果这仅处理基于 HTTP 的流量,您可以简单地将GKE Ingress 用于 HTTP(S) 负载平衡,但要考虑:

但基本上我对适用于任何基于 TCP 的服务的解决方案感兴趣,而无需内置 SSL 和身份验证。

这不是您的用例。

因此,您可以继续使用已经设置的内容,因为它似乎运行良好,或者作为替代方案,您可以使用:

  1. nginx ingressGKE ingress不同,它不仅能够向外部世界公开基于 HTTP/HTTPS 的流量,还可以代理到达任意端口的TCP 连接。

  2. ✅ 您可以使用TLS 终止代理作为外部 TCP/UDP 网络负载均衡器后面的边车(类似于这个这个) 。由于它不是代理而是直通 LB,它不能提供 SSL 终止,只能将加密的 TCP 流量传递到需要由上述sidecar处理的后端。Pod

  3. ❌ 在此表中提供的 GCP 原生负载平衡解决方案中,仅SSL 代理乍一看似乎很有用,因为它可以处理带有 SSL 卸载的 TCP 流量,但是 ❗<strong>它仅支持有限的一组众所周知的 TCP 端口,并且作为据我了解,您需要能够公开任意 TCP 端口,所以这对您没有多大帮助:

SSL 代理负载平衡支持以下端口: 25、43、110、143、195、443、465、587、700、993、995、1883、3389、5222、5432、5671、5672、5900、5901、6379、 8085、8099、9092、9200 和 9300。当您将 Google 管理的 SSL 证书与 SSL 代理负载平衡一起使用时,流量的前端端口必须为 443,才能启用和续订 Google 管理的 SSL 证书。

于 2020-10-22T14:55:36.153 回答