【问题标题】:What is the recommended cert strategy for multi-master K8s clusters?多主 K8s 集群推荐的证书策略是什么?
【发布时间】:2019-01-15 02:57:38
【问题描述】:

多主 K8s 集群部署对每个服务、每个控制器节点使用唯一证书是不是很典型?我见过的大多数指南都会为每个服务(API、控制器、调度程序)生成唯一的证书,然后将这些证书用于每个控制器节点上的同名服务。

Kubernetes 是否不允许或不鼓励每个服务、每个节点使用唯一证书?使用 DNS/IP SAN,应该仍然可以让每个服务响应一个单一的集群地址,所以我很好奇这个决定是否是为了更简单的说明,或者它实际上是我缺少的一些要求。

谢谢。

【问题讨论】:

    标签: kubernetes kubernetes-security


    【解决方案1】:

    Kubernetes 是否不允许或不鼓励每个服务的唯一证书,每个 节点?使用 DNS/IP SAN,应该仍然可以拥有每个 服务响应一个单一的集群地址,所以我很好奇这是否 决定是为了更简单的指令,或者如果它是 实际上我缺少一些要求

    当我们运行 Kubernetes 集群时,我们可以拥有数千个私钥和公钥,而不同的组件通常不知道它们是否有效。因此,证书颁发机构是第 3 方实体,它告诉感兴趣的元素“此证书是受信任的”。

    documentation

    每个 Kubernetes 集群都有一个集群根证书颁发机构 (加利福尼亚州)。 CA 通常由集群组件用于验证 API server 的证书,由 API server 验证 kubelet 客户端 证书等

    这实际上表明您可以在每个集群中拥有不同的证书,但这不是必需的,您可以想象您的 CA 的许多不同组合。您可以有一个全局 CA 负责签署所有密钥,或者每个集群一个 CA,一个用于内部通信,一个用于外部通信,等等。

    任何提供由集群 CA 签名的客户端证书的请求都将被视为已通过身份验证。在该身份验证过程中,应该可以从通用名称字段 (CN) 中获取用户名,并从该证书的组织字段中获取组。所以答案是肯定的,您可以为每个服务、节点或集群中的任何组件使用不同的证书,除非它由集群中的证书颁发机构签名。

    为具有多个主节点(HA 集群)的主节点创建证书时,您必须确保负载平衡器 IP 和 DNS 名称是该证书的一部分。否则,每当客户端尝试通过 LB 与 API 服务器通信时,客户端都会抱怨,因为证书上的通用名称将与它想要与之通信的名称不同。

    进一步说,除了主证书之外,每个核心集群组件都有自己的客户端证书,因为它们中的每一个都将对具有不同通用名称的集群具有不同的访问级别。 值得注意的是,kubelet 的证书名称略有不同,因为每个 kubelet 都有不同的身份(运行 kubelet 的主机名将是证书的一部分),它与 NodeAuthorizer 和节点限制准入插件。从最小权限的角度来看,这些特性很重要——它们在另一种情况下限制了 kubelet 对 apiserver 的无限制访问和交互。 使用此功能,您可以将 kubelet 限制为只能修改其节点资源而不是整个集群,因为它只能读取其节点机密而不是集群中的所有机密等。

    编辑 - 以下评论讨论:

    假设您要就为什么更多人不使用多个证书征求意见,我认为这是因为它并没有真正提高重大事项的安全性。由于证书不如 CA 重要 - CA 是实体可以安全地相互交谈的可信保证。因此,您可以制作多个 CA——这样做的原因更多的是一种 HA 方法而不是安全性。当然,如果你有一个受信任的 CA,你就不需要更多的证书种类,因为你实际上并没有通过增加它们的数量来达到任何目标。

    【讨论】:

    • 我很欣赏这个答案,但这不是有效性问题。而是一个问题,例如,三个控制器节点都运行调度程序服务,都使用相同的证书/密钥对,而不是每个调度程序服务都有一个唯一的对,这是否是好的、可接受的,甚至是允许的实践。节点。我了解如何 这样做,但我不确定您是否应该这样做。此外,kubelet 略有不同,因为它是一个有意义的地方,每个服务的证书/密钥对因为它们与上游通信。至少根据 Kelsey 的 K8s 艰难的方式。
    • > 所以答案是肯定的,您可以为每个服务、节点或集群中的任何组件使用不同的证书,除非它由集群中的证书颁发机构签名。谢谢你。我意识到我可以做到这一点,但似乎大多数人出于某种原因做不到。我想知道为什么更多人似乎不喜欢这种方法,而不是跨所有节点的每个服务一个证书/密钥对。
    • Aurelius,我希望您将此作为顶级答案,以便我进行检查。我认为这可能是最有意义的一个。
    • akutz,谢谢 - 我已删除评论并将其添加到答案中。
    猜你喜欢
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多