层次结构控制器概览

本文档介绍了层次结构控制器,它是 Kubernetes 控制器动态准入控制器,可为 Kubernetes 命名空间添加层次结构。

分层命名空间

层次结构控制器引入了分层命名空间的概念,它是 Kubernetes 命名空间的扩展,可让您轻松管理共享相同“所有权”概念的命名空间组。它们在由多个“团队”共享的集群中尤其有用,但所有者不必是人。例如,您可能希望将 Operator 设为一组命名空间的所有者。

为了支持多租户用例,除了常规的 Kubernetes 命名空间之外,分层命名空间还具有两个主要行为:

  • 委托命名空间创建。层次结构控制器引入了子命名空间的概念,即使该用户没有集群级层命名空间权限,也可以由现有命名空间下的用户创建。

    例如,您可以在 Git 代码库中为 Anthos Config Management 定义团队的命名空间,然后将子命名空间委托给该团队。这样,该团队就可以在您为其定义的团队级命名空间下创建自己的子命名空间,而无需在 Git 中进行任何修改。

  • 强制执行政策。就像 Anthos Config Management 可以将政策对象从抽象命名空间目录传播到 Kubernetes 命名空间一样,层次结构控制器也可以进一步将这些对象传播到子命名空间。例如,执行此操作可确保应用于团队的根命名空间的政策也会应用于其子命名空间。

    但是,层次结构控制器和 Anthos Config Management 传播政策的方式之间存在一些差异。Anthos Config Management 将抽象命名空间目录中的所有对象复制到其后代 Kubernetes 命名空间。相比之下,层次结构控制器默认仅复制 RBAC 角色和角色绑定,但可以配置为传播任何其他类型的 Kubernetes 对象。

层次结构控制器集成到 Anthos Config Management 版本 1.4.1 及更高版本中。层次结构控制器基于开源项目分层命名空间控制器 (HNC)

分层命名空间与抽象命名空间

层次结构控制器提供的分层命名空间类似于 Anthos Config Management 抽象命名空间。但是,虽然抽象命名空间仅存在于 Anthos Config Management 代码库中,但分层命名空间都是 Kubernetes 命名空间,且存在于集群中。

为避免 Anthos Config Management 抽象命名空间和层次结构控制器命名空间之间的争用,请确保 Anthos Config Management 代码库中未创建非根分层命名空间作为抽象或叶命名空间。

或者,您可以使用非结构化代码库来停用 Anthos Config Management 抽象命名空间,并且仅依靠层次结构控制器来定义层次结构并传播政策。如果您无法使用默认代码库目录结构,但仍想利用分层功能,则此方法可能有用。

如需使用非结构化代码库,请签入子命名空间或完整命名空间。我们建议使用完整命名空间,因为您可以通过修改 HierarchicalConfiguration 对象(也必须签入)来更新其层次关系。相比之下,如果签入子命名空间,请确保在其父项中同时签入命名空间和 SubnamespaceAnchor 对象,但请注意,它们在创建后并不易于修改。

在这两种情况下,请确保将层次结构控制器配置为跨层次结构应用所有所需的 Kubernetes 对象类型。默认情况下,仅应用 RBAC 角色和角色绑定。

后续步骤