使用TLS保护Kubernetes服务

时间:2018-06-17 03:56:37

标签: ssl kubernetes tls1.2 kubernetes-security kubernetes-service

我有一个内部应用程序,只有群集IP服务才能将其暴露给群集上的其他应用程序。其他服务通过DNS(serviceName-namespace.svc.cluster.local)访问此应用程序。此应用程序处理敏感数据,因此尽管所有通信都在集群内,但我希望使用TLS来保护与此应用程序的通信。

我的问题是 - 如何在服务上启用TLS?是否存在某些东西或应该在应用程序代码上处理它?此外,是否已有可在群集上使用的CA,可以为.svc.cluster.local签署证书?

为了澄清,我知道我可以使用入口来实现此目的。唯一的问题是只保留此服务内部 - 因此只有集群内的服务才能访问它。

谢谢, 奥马尔

4 个答案:

答案 0 :(得分:1)

关注来自下面的@vonc评论,我想我有一个解决方案:

  • 为此服务购买公共有效域名(例如something.mycompany.com)。
  • 使用CoreDNS添加覆盖规则,以便something.mycompany.com的所有请求都转到something-namesapce.svc.cluster.local,因为服务不会在外部公开(对于我的用例,也可以使用正常的A记录)。
  • 使用Nginx或其他方式处理带有something.mycompany.com
  • 证书的TLS

这听起来很复杂但可能有用。你觉得怎么样?

答案 1 :(得分:1)

我刚刚发现Kubernetes API可用于生成证书,该证书将由集群上运行的所有Pod信任。此选项可能比其他选项更简单。您可以找到文档here,包括生成证书和使用证书的全部流程。

答案 2 :(得分:0)

检查教程" Secure Kubernetes Services with Ingress, TLS and LetsEncrypt"可以适用于你:

  

Ingress可以通过使用不同的Ingress控制器来支持不同的实现。其中最受欢迎的是Nginx Ingress Controller,但还有其他选项,例如TraefikRancherHAProxy等。每个控制器都应支持基本配置,但甚至可以通过注释公开其他功能(例如重写规则,身份验证模式)。

     

为其指定域名并启用TLS。 LetsEncrypt是免费的TLS证书颁发机构,使用kube-lego控制器,我们可以自动请求和续​​订公共域名的LetsEncrypt证书,只需在Ingress定义中添加几行即可!

     

为了使其正常工作,需要一个公共域名,并且应该有一个A记录指向Nginx服务的外部IP。

虽然限制在群集域内(svc.cluster.local),you might need CoreDNS

答案 3 :(得分:-1)

在Google Cloud上,您可以使内部负载均衡器服务如下:

    annotations = {
      "cloud.google.com/load-balancer-type" = "Internal"
    }