具有扩展权限的 K8s RBAC 服务帐户

K8s RBAC serviceaccount with extended permissions

我正在寻找让 serviceaccount(不是集群管理员)能够创建新命名空间并自动获得管理员权限的选项(同时所有系统命名空间都不能被这个 serviceaccount 编辑)。

目前我绑定到 clusterrole 的 serviceaccount 包含

- apiGroups:
  - ""
  resources:
  - namespaces
  verbs:
  - create

但是它不能对它创建的命名空间做任何事情。 想得到任何建议,建议。

不幸的是,仅使用 RBAC objects 是不可能的。

In the RBAC API, a role contains rules that represent a set of permissions. Permissions are purely additive (there are no “deny” rules).

但是有一个可能的解决方法:

  • 您在集群级别使用具有 create-Roles+RoleBindings-permissions 的服务帐户在内部添加一个带有 Kubernetes python/go/java 客户端的 pod

  • 然后你 运行 一个简单的代码来监视 api-server 的新命名空间并为新命名空间中的 namespace-admin 创建 RoleBinding

  • 这个RoleBinding指的是cluster-admin角色,赋予用户在特定命名空间的所有权限

  • 为了区分新的命名空间和现有的命名空间,脚本还可以在命名空间上放置一个标签:namespace-admin=true 或类似的。

另外,您可以考虑使用 RBAC 管理器。 Dynamic Namespaces and Labels 更具体。

RBAC Definitions can now include namespaceSelectors in place of namespace attributes when specifying Role Binding configuration. This can be incredibly helpful when working with dynamically provisioned namespaces.

如果有帮助,请告诉我。