如何通过群集边缘的SSL终止和客户端证书auth

问题描述

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

我当前的用例是从私有数据中心(仅从那里)访问在GKE中部署的Postgresql服务。但基本上,我对一种无需内置SSL和auth即可用于任何基于TCP的服务的解决方案感兴趣。

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

是否有更好的,更多GKE原生方法来实现它?

解决方法

据我所知,没有GKE原生方法可以完全实现您的需求

如果这仅用于处理基于HTTP的流量,则可以简单地使用GKE Ingress for HTTP(S) Load Balancing,但要考虑以下因素:

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

这不是您的用例。

因此,您可以按照已设置的内容进行操作,因为它似乎可以很好地工作,或者可以使用以下替代方法:

  1. nginx ingress,它与GKE ingress不同,它不仅可以向外部世界公开不仅基于HTTP / HTTPS的流量,而且可以代理TCP连接进入任意端口。

  2. ✅您可以在{{3}之后使用 TLS终止代理作为边车(类似this onethis one) }。由于它不是代理,而是直通LB ,因此它不能提供SSL终止,只能将加密的TCP流量传递到后端{{1} }需要由上述 sidecar 处理的地方。

  3. ❌在External TCP/UDP Network Load Balancer中提供的GCP本机负载平衡解决方案中,只有this table乍一看似乎很有用,因为它可以通过SSL卸载处理TCP流量 ,但它仅支持有限的一组知名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证书将被调配和续订。