在某些托管环境/配置中,pod(应用程序)之间的网络流量可能会遍历公共(public)互联网。因此,我想确保 Pod 之间的通信安全。
例如我有如下结构:
Service_A - 我产品中的边缘服务,通过公共(public) IP 向外部用户提供对我的 API 的访问。
Service_B 和 Service_C - 具有 ClusterIP 的微服务。
据我所知,我可以通过使用带有 ssl 证书的 Ingress Controller 来保护流量用户 <-> Service_A。
但是我应该如何保护 Service_A<->Service_B 通信?创建额外的入口服务来包装微服务?是否有针对此类情况的最佳做法?
一个细节:微服务使用 gRPC 进行通信。
谢谢
最佳答案
我喜欢的一个简单、通用的解决方案是在每个 pod 中运行一个反向代理(例如 nginx)。您所有的应用程序容器都将在本地主机或 unix 套接字上进行监听,并且 ssl 代理将终止外部 HTTPS 连接。这使得审核所有应用程序的 SSL 配置变得容易,因为每个连接都由相同的 nginx 配置终止。
证书分发是这种方法的主要挑战。对于外部服务,您可以使用 LetsEncrypt 生成证书。对于内部服务,您需要一个受您的 ssl 代理信任的私有(private) CA。您可以在运行时将 CA 证书挂载到配置映射中。然后,您将为每个应用程序或每个 pod 生成一个证书,并将其挂载为 ssl-proxy 容器中使用的 Secret。
如果这听起来工作量太大,您可能需要查看 https://github.com/istio/istio ,旨在自动化集群 CA 角色,并提供每个 pod 证书。
关于security - 保护集群中 pod 之间的流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44559754/