我有一个内部应用程序,只有群集IP服务才能将其暴露给群集上的其他应用程序。其他服务通过DNS(serviceName-namespace.svc.cluster.local
)访问此应用程序。此应用程序处理敏感数据,因此尽管所有通信都在集群内,但我希望使用TLS来保护与此应用程序的通信。
我的问题是 - 如何在服务上启用TLS?是否存在某些东西或应该在应用程序代码上处理它?此外,是否已有可在群集上使用的CA,可以为.svc.cluster.local
签署证书?
为了澄清,我知道我可以使用入口来实现此目的。唯一的问题是只保留此服务内部 - 因此只有集群内的服务才能访问它。
谢谢, 奥马尔
答案 0 :(得分:1)
关注来自下面的@vonc评论,我想我有一个解决方案:
something.mycompany.com
)。something.mycompany.com
的所有请求都转到something-namesapce.svc.cluster.local
,因为服务不会在外部公开(对于我的用例,也可以使用正常的A记录)。 something.mycompany.com
。这听起来很复杂但可能有用。你觉得怎么样?
答案 1 :(得分:1)
我刚刚发现Kubernetes API可用于生成证书,该证书将由集群上运行的所有Pod信任。此选项可能比其他选项更简单。您可以找到文档here,包括生成证书和使用证书的全部流程。
答案 2 :(得分:0)
检查教程" Secure Kubernetes Services with Ingress, TLS and LetsEncrypt"可以适用于你:
Ingress可以通过使用不同的Ingress控制器来支持不同的实现。其中最受欢迎的是Nginx Ingress Controller,但还有其他选项,例如Traefik,Rancher,HAProxy等。每个控制器都应支持基本配置,但甚至可以通过注释公开其他功能(例如重写规则,身份验证模式)。
为其指定域名并启用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"
}