在 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
以扩展其权限。
我创建了一个简单的示例来说明它是如何工作的。
首先我创建了red
和blue
Namespaces
和test-sa
ServiceAccount
:
$ 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-red
和 pod-reader-blue
Roles
,它们有权在 red
和 blue
[=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
是否可以将多个角色绑定到一个服务帐户?
这可能有多个 RoleBindings
/ ClusterRoleBindings
那个 link Roles
/ ClusterRoles
到单个 ServiceAccount
.
您应该记住,权限是 相加的 - 您可以向 ServiceAccount
添加另一个 Role
/ ClusterRole
以扩展其权限。
我创建了一个简单的示例来说明它是如何工作的。
首先我创建了red
和blue
Namespaces
和test-sa
ServiceAccount
:
$ 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-red
和 pod-reader-blue
Roles
,它们有权在 red
和 blue
[=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