在 Kubernetes 的不同命名空间中,是否可以有超过 1 个角色和 1 个服务帐户?

Is it possible to have more than 1 Role with 1 service account in different namespaces with Kubernetes?

是否可以将多个角色绑定到一个服务帐户?

这可能有多个 RoleBindings / ClusterRoleBindings 那个 link Roles / ClusterRoles 到单个 ServiceAccount.

您应该记住,权限是 相加的 - 您可以向 ServiceAccount 添加另一个 Role / ClusterRole 以扩展其权限。


我创建了一个简单的示例来说明它是如何工作的。

首先我创建了redblueNamespacestest-saServiceAccount:

$ kubectl create namespace red
namespace/red created
$ kubectl create namespace blue
namespace/blue created
$ kubectl create serviceaccount test-sa
serviceaccount/test-sa created

默认情况下,新创建的test-sa ServiceAccount没有任何权限:

$ kubectl auth can-i get pod -n red --as=system:serviceaccount:default:test-sa
no
$ kubectl auth can-i get pod -n blue --as=system:serviceaccount:default:test-sa
no
$ kubectl auth can-i get pod -n default --as=system:serviceaccount:default:test-sa
no

接下来我创建了两个 pod-reader-redpod-reader-blue Roles,它们有权在 redblue [=25] 中获取 Pods =]相应地:

$ kubectl create role pod-reader-red --verb=get --resource=pods -n red
role.rbac.authorization.k8s.io/pod-reader-red created
$ kubectl create role pod-reader-blue --verb=get --resource=pods -n blue
role.rbac.authorization.k8s.io/pod-reader-blue created

然后使用 RoleBinding 我 link 将此 Roles 编辑为 test-sa ServiceAccount:

$ kubectl create rolebinding pod-reader-red --role=pod-reader-red --serviceaccount=default:test-sa -n red
rolebinding.rbac.authorization.k8s.io/pod-reader-red created
$ kubectl create rolebinding pod-reader-blue --role=pod-reader-blue --serviceaccount=default:test-sa -n blue
rolebinding.rbac.authorization.k8s.io/pod-reader-blue created

最后我们可以检查 test-sa ServiceAccount 是否有权使用 pod-reader-red [=20= 在 red Namespace 中获取 Pods ] test-sa ServiceAccount 有权使用 pod-reader-blue Role:

blue Namespace 中获取 Pods
$ kubectl auth can-i get pod -n red --as=system:serviceaccount:default:test-sa
yes
$ kubectl auth can-i get pod -n blue --as=system:serviceaccount:default:test-sa
yes
$ kubectl auth can-i get pod -n default --as=system:serviceaccount:default:test-sa
no