在某些托管环境/配置中,pod(应用程序)之间的网络流量可能会遍历公共Internet。因此,我想确保pod之间的通信。
例如,我有以下结构:
Service_A - 我的产品中的边缘服务,并通过公共IP向外部用户提供对我的API的访问。
Service_B和Service_C - 具有ClusterIP的微服务。
据我了解,我可以保护流量用户< - >使用带有ssl证书的Ingress控制器的Service_A。
但我应该如何保护Service_A< - > Service_B通信?创建额外的入口服务来包装微服务?这类案件是否有最佳做法?
一个细节:微服务使用gRPC进行通信。
由于
答案 0 :(得分:5)
我喜欢的简单通用解决方案是在每个pod中运行反向代理(例如nginx)。您的所有应用容器都将侦听localhost或unix套接字,而ssl代理将终止外部HTTPS连接。这使您可以轻松地在所有应用程序中审核SSL配置,因为每个连接都由相同的nginx配置终止。
证书分发是此方法的主要挑战。对于外部服务,您可以使用LetsEncrypt生成证书。对于内部服务,您需要一个受ssl-proxy信任的私有CA.您可以在运行时将CA证书挂载到配置映射中。然后,您将为每个应用程序或每个pod生成一个证书,并将其作为密码安装在ssl-proxy容器中。
如果这听起来太多了,您可能需要查看https://github.com/istio/istio,其目的是自动化群集CA角色,以及提供每个pod证书。
答案 1 :(得分:0)
If you need to secure some communication between servers then just use SSH tunneling. You open port on a localhost
and connect it to another port on a remote server. Now, your microservices can communicate with remote application through local port. All underlying communication is encrypted.
Tunnel your traffic like this:
ssh -L 9000:localhost:8080 user@1.2.3.4
In this example you tunnel all traffic from your local port 9000
to local port 8080
of your SSH server with IP 1.2.3.4
.
Check this article for more examples.