security - 保护集群中 pod 之间的流量

标签 security ssl kubernetes

在某些托管环境/配置中,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/

相关文章:

php - 此 PDO 代码如何防止 SQL 注入(inject)?

javascript 源代码更改检测

php - 如何设计带有访客处理功能的安全购物车?

java - 如何在 JVM 上的 SSL 跟踪中显示客户端的 IP 地址?

Python 3.8 TLSv1.3 套接字关闭导致 ConnectionResetError 或 ConnectionAbortedError

ubuntu - 如何在 Ubuntu 上安装多个版本的 Kubectl?

security - 如何检查是否启用了 Authenticated Origin Pulls?

javascript - socket.io 原始集但无论如何都会出现错误

dns - 将名称服务器添加到 Kubernetes

security - K8S - 使用 Prometheus 以安全的方式监控另一个 prometheus 实例