多主机K8s集群部署在每个服务、每个控制器节点使用唯一证书是否非典型?我看到的大多数指南都会为每个服务(API、Controller、Scheduler(生成唯一的证书,然后将这些证书用于每个Controller节点上的同名服务。
Kubernetes是否不允许或不鼓励每个服务、每个节点的唯一证书?有了DNS/IP SAN,应该仍然可以让每个服务响应一个单一的群集地址,所以我很好奇这个决定是为了更简单的指令,还是实际上是我遗漏的一些要求。
谢谢。
Kubernetes是否不允许或不鼓励每个服务、节点?有了DNS/IP SAN,应该仍然可以服务响应一个单一的集群地址,所以我很好奇这是否决策是为了更简单的指令,或者如果实际上有些要求我错过了
当我们运行Kubernetes cluster/s时,我们可以拥有数千个私钥和公钥,而不同的组件通常不知道它们是否有效。因此,有一个证书颁发机构,它是一个第三方实体,告诉感兴趣的元素"这个证书是可信的"。
文档:
每个Kubernetes集群都有一个集群根证书颁发机构(CA(。CA通常由集群组件用于验证API服务器的证书,由API服务器验证kubelet客户端证书等
这实际上表明,你可以在每个集群中拥有不同的证书,但这不是一个要求,你可以想象你的CA的许多不同组合。你可以有一个全局CA负责对所有密钥进行签名,或者每个集群有一个CA,一个用于内部通信,另一个用于外部通信,等等。
任何提供由集群CA签名的客户端证书的请求都将被视为已通过身份验证。在该认证过程中,应该可以从证书的"通用名称"字段(CN(中获得用户名,从该证书的"组织"字段中获得组。所以答案是肯定的,您可以为集群中的每个服务、节点或任何组件使用不同的证书,除非它由集群中的证书颁发机构签名。
为具有多个主机(HA群集(的主机创建证书时,必须确保负载平衡器IP和DNS名称是该证书的一部分。否则,每当客户端试图通过LB通过API服务器进行通信时,客户端都会抱怨,因为证书上的通用名称与其想要通信的名称不同。
进一步说,除了主证书之外,每个核心集群组件都有自己的客户端证书,因为它们中的每一个都有不同的访问级别,可以使用不同的通用名称访问集群。值得注意的是,kubelet有一个稍微不同的证书名称,因为每个kublet都有不同的身份(运行kubelet的主机名将是证书的一部分(,它与其他功能有关,如NodeAuthorizer和Node Restriction Admission Plugin。从最低权限的角度来看,这些功能很重要——在另一种情况下,它们限制了kubelet对apiserver的无限制访问和交互。使用此功能,您可以将kubelet限制为只能修改其节点资源,而不能修改整个集群,因为它将只能读取其节点机密,而不能读取集群中的所有机密,等等
编辑-以下评论讨论:
假设你在询问为什么更多的人不使用多个证书的意见,我认为这是因为它并没有真正提高重大事件的安全性。由于证书不如CA重要,CA是实体之间可以安全地进行通信的可靠保证人。因此,您可以创建多个CA,这更多的是因为HA方法而不是安全性。当然,如果你有一个受信任的CA,你不需要更多的证书种类,因为你实际上并没有通过增加它们的数量来达到任何目标。