多主 K8s 集群的推荐证书策略是什么?
What is the recommended cert strategy for multi-master K8s clusters?
多主 K8s 集群部署对每个服务、每个控制器节点使用唯一的证书是否不典型?我见过的大多数指南都会为每个服务(API、控制器、调度程序)生成唯一的证书,然后将这些证书用于每个控制器节点上的同名服务。
Kubernetes 是否不允许或不鼓励每个服务、每个节点使用唯一证书?使用 DNS/IP SAN,应该仍然可以让每个服务响应一个单一的集群地址,所以我很好奇这个决定是否是为了更简单的指令,或者如果它实际上是我遗漏的一些要求.
谢谢。
Does Kubernetes disallow or discourage unique certs per service, per
node? With DNS/IP SANs it should be possible to still have each
service respond to a singular cluster address, so I'm curious if this
decision is one for the sake of simpler instructions, or if it's
actually some requirement I'm missing
当我们拥有 运行 Kubernetes cluster/s 时,我们可以拥有数以千计的私钥和 public 密钥,不同的组件通常不知道它们是否有效。因此,证书颁发机构是第 3 方实体,它告诉感兴趣的元素 "this certificate is trusted"。
Every Kubernetes cluster has a cluster root Certificate Authority
(CA). The CA is generally used by cluster components to validate the
API server’s certificate, by the API server to validate kubelet client
certificates, etc.
这实际上表明你可以在每个集群中拥有不同的证书,但这不是必需的,你可以想象你的 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,你不需要更多的证书种类,因为你实际上不会通过增加它们的数量来达到任何目标。
多主 K8s 集群部署对每个服务、每个控制器节点使用唯一的证书是否不典型?我见过的大多数指南都会为每个服务(API、控制器、调度程序)生成唯一的证书,然后将这些证书用于每个控制器节点上的同名服务。
Kubernetes 是否不允许或不鼓励每个服务、每个节点使用唯一证书?使用 DNS/IP SAN,应该仍然可以让每个服务响应一个单一的集群地址,所以我很好奇这个决定是否是为了更简单的指令,或者如果它实际上是我遗漏的一些要求.
谢谢。
Does Kubernetes disallow or discourage unique certs per service, per node? With DNS/IP SANs it should be possible to still have each service respond to a singular cluster address, so I'm curious if this decision is one for the sake of simpler instructions, or if it's actually some requirement I'm missing
当我们拥有 运行 Kubernetes cluster/s 时,我们可以拥有数以千计的私钥和 public 密钥,不同的组件通常不知道它们是否有效。因此,证书颁发机构是第 3 方实体,它告诉感兴趣的元素 "this certificate is trusted"。
Every Kubernetes cluster has a cluster root Certificate Authority (CA). The CA is generally used by cluster components to validate the API server’s certificate, by the API server to validate kubelet client certificates, etc.
这实际上表明你可以在每个集群中拥有不同的证书,但这不是必需的,你可以想象你的 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,你不需要更多的证书种类,因为你实际上不会通过增加它们的数量来达到任何目标。