繁体   English   中英

使用TLS保护Kubernetes服务

[英]Securing Kubernetes Service with TLS

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

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

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

谢谢,奥梅尔

我刚刚发现Kubernetes API可用于生成一个证书,该证书将受到群集上运行的所有pod的信任。 此选项可能比替代选项更简单。 您可以在此处找到文档,包括生成证书和使用它的完整流程。

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

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

这听起来很复杂但可能有效。 你怎么看?

检查教程“ 使用Ingress,TLS和LetsEncrypt安全Kubernetes服务 ”是否适用于您:

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

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

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

要限制到集群域内部( svc.cluster.local ), 您可能需要CoreDNS

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM