保护集群中Pod之间的流量

max*_*ndr 3 security ssl kubernetes

在某些托管环境/配置中,pod(应用程序)之间的网络流量可能会遍历公共Internet。因此,我想确保Pod之间的通信安全。

例如,我具有以下结构:

Service_A-产品中的边缘服务,并通过公共IP向外部用户提供对我的API的访问。

Service_B和Service_C-具有ClusterIP的微服务。

据我了解,我可以使用带有ssl证书的Ingress控制器来保护流量用户<-> Service_A。

但是我应该如何确保Service_A <-> Service_B通信的安全?创建其他入口服务来包装微服务?是否有针对此类情况的最佳做法?

一个细节:微服务使用gRPC进行通信。

谢谢

Sym*_*ric 5

我喜欢的一个简单的通用解决方案是在每个Pod中运行反向代理(例如nginx)。您所有的应用程序容器都将在localhost或unix套接字上侦听,并且ssl代理将终止外部HTTPS连接。由于每个连接均由相同的nginx配置终止,因此可以轻松审核所有应用程序中的SSL配置。

证书分发是使用此方法的主要挑战。对于外部服务,可以使用LetsEncrypt生成证书。对于内部服务,您需要一个受ssl-proxy信任的专用CA。您可以在运行时将CA证书安装在配置映射中。然后,您将为每个应用程序或每个Pod生成一个证书,并将其安装为ssl-proxy容器中使用的Secret。

如果这听起来工作量太大,则可能需要查看https://github.com/istio/istio,其目的是使群集CA角色自动化,并提供按Pod证书。

  • Istio 听起来很适合解决这个问题 (2认同)