Kubernetes中的SSL / TLS证书管理

时间:2019-09-16 16:11:34

标签: ssl kubernetes kubeadm

我们有10个不同的kubernetes Pod,它们在私有VPN中运行,这些Pod是 HTTP 服务端点(不是HTTPS)。但是,该服务将与 HTTPS 服务端点进行交互。从逻辑上讲,要从HTTP服务窗格调用HTTP-S服务端点,需要SSL服务器证书信任。因此,我们决定将SSL证书存储在每个HTTP服务窗格中,以调用HTTPS服务窗格。

我想知道是否有其他方法可以跨Kubernetes集群中的不同Pod管理SSL证书? kubeadm用于K8s证书管理怎么样?有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这更像是一个一般的SSL证书问题,而不是特定于Kubernetes。

如果提供HTTPS终结点的容器/吊舱已经正确配置了SSL,并且您使用的SSL证书是从已知的受信任的CA(例如letencrypt或那里的任何已知的受信任的证书公司)购买/生成的),那么没有理由将其他与HTTPS终结点服务Pod建立连接的容器应用程序存储在其中的任何特殊内容。

唯一的例外是,如果您有自己的专用CA,并且已在内部生成了证书,并将其安装在HTTPS服务容器中。 (或者,如果您正在生成自签名证书)。然后,连接到https端点的吊舱/容器将需要了解CA证书。这是处理这种情况的堆栈溢出问题/答案:

How do I add a CA root certificate inside a docker image?

最后,在容器和容器调度程序(如Kubernetes)中有更好的模式来管理SSL。这一切都取决于您的设计/架构。

一些一般性想法:

  1. 在流量到达您的Pod之前,在负载均衡器上终止SSL。然后,负载均衡器将其自身到Pod的流量作为HTTP处理,并且您的客户端在负载均衡器处终止SSL。 (不过,这实际上并不能解决您的特定用例)
  2. 使用Hashicorp Vault之类的内容作为内部CA,并使用围绕该产品和Kubernetes的自动化来自动管理证书。
  3. 使用jetstack的cert-manager之类的工具来自动在kubernetes环境中管理SSL。它可以连接到多个“提供程序”,例如letencrypt以获得免费的SSL。 https://github.com/jetstack/cert-manager

希望有帮助。