在群集中的pod之间保护流量

时间:2017-06-15 06:05:23

标签: security ssl kubernetes

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

例如,我有以下结构:

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

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

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

但我应该如何保护Service_A< - > Service_B通信?创建额外的入口服务来包装微服务?这类案件是否有最佳做法?

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

由于

2 个答案:

答案 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.

  1. Create restricted user on SSH server.
  2. 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.