Kubernetes中未指定命名空间的RoleBinding绑定哪个ServiceAccount?
问题解答
这个RoleBinding会绑定与它同命名空间(rolebinding-ns)的default ServiceAccount,具体原因和验证方式如下:
- 你配置的是命名空间级别的RoleBinding(已指定
namespace: rolebinding-ns),Kubernetes RBAC规则明确:当这类RoleBinding引用ServiceAccount类型的subject时,如果没有显式声明namespace字段,会默认使用RoleBinding自身所在的命名空间作为ServiceAccount的所属命名空间。 - ServiceAccount是命名空间隔离的资源,每个命名空间的
defaultServiceAccount都是独立实体,kube-system或其他命名空间的同名资源和rolebinding-ns里的没有关联。
你可以通过以下命令直接验证实际绑定的主体:
kubectl describe rolebinding test -n rolebinding-ns
在输出的Subjects区域,会明确显示该ServiceAccount的命名空间为rolebinding-ns。
也可以通过权限测试进一步确认:
# 测试rolebinding-ns下的default账号权限 kubectl auth can-i get pods -n rolebinding-ns --as=system:serviceaccount:rolebinding-ns:default # 测试kube-system下的default账号权限(对比用) kubectl auth can-i get pods -n rolebinding-ns --as=system:serviceaccount:kube-system:default
前者会返回yes,后者返回no,以此证明绑定的是同命名空间的ServiceAccount。
内容的提问来源于stack exchange,提问作者Roberto
相关产品推荐
相关产品推荐

