user1 和 user2 在 K8s 集群中被分配了"管理员"角色,他们只能在分配给他们的名称中工作。在下面的例子中,ns1 和 ns2 分别
用户 1 -->分配的命名空间 NS1
user2 -->分配的命名空间 ns2
user3 -->分配的命名空间 NS3,并且还分配了命名空间管理员角色。 命名空间管理员角色 (user3( 应该能够在命名空间 ns3 中创建任何资源,以及他在群集中创建的任何新命名空间。此角色应能够动态创建新命名空间。但是用户 3 不应有权访问不是由用户"user3"创建的 ns1 或 ns2 命名空间。
user3 将动态创建新的命名空间并在这些命名空间中部署工作负载。
这能解决吗?这类似于Openshift"项目"概念。
是的,您可以使用将该角色绑定到 user3Role
,限制用户 3 仅在命名空间 ns3 中创建/删除资源。
然后,您可以使用只能访问namespaces
资源的ClusterRole
并允许其create, delete, etc
像这样:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: my-namespace
name: user-namespace-role
rules:
- apiGroups: [""]
resources: ["services", "endpoints", "pods"] # etc...
verbs: ["get", "list", "create"] # etc
然后:
kubectl create rolebinding user-namespace-binding --role=user-namespace-role --user=user3 --namespace=my-namespace
然后:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cluster-role-all-namespaces
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] # etc
然后:
kubectl create clusterrolebinding all-namespaces-binding --clusterrole=cluster-role-all-namespaces --user=user3
对于用户 1 和用户 2,您可以为其唯一的命名空间创建Role
和RoleBinding
。
user3 应该能够在命名空间 ns3 中创建任何资源以及他在集群中创建的任何新命名空间。
要实现动态权限,您需要一个组件在用户创建的命名空间中授予用户 3 个权限(这就是 openshift 项目 API 处理程序所做的(
我看到这篇文章已经有 4 年的历史了,但如果有人偶然发现了这个线程,"分层命名空间"是可以在这种情况下工作的东西。在这种情况下,您将 user3 分配给 ns3 所需的权限,然后用户 3 可以从 ns3 创建"子命名空间",其中所有对象(角色绑定等(都将被继承。