- 命名空间适用于所有三个角色、服务帐户和角色绑定。
- 命名空间的角色和服务帐户是否不同都没有关系。您仍然可以创建角色绑定,但服务帐号只能在角色中定义的命名空间中对资源执行动词,并且角色绑定需要在与角色相同的命名空间中创建。
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: mynamespace
name: my-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-serviceac
namespace: default
kubectl create rolebinding my-role-binding --role=my-role --serviceaccount=default:myserviceac -n mynamespace
然后检查服务帐号的权限
kubectl auth can-i get pods -n mynamespace --as=system:serviceaccount:default:myserviceac
yes
kubectl auth can-i watch pods -n mynamespace --as=system:serviceaccount:default:myserviceac
yes
kubectl auth can-i list pods -n mynamespace --as=system:serviceaccount:default:myserviceac
yes
kubectl auth can-i get pods -n default --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i list pods -n default --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i watch pods -n default --as=system:serviceaccount:default:myserviceac
no
正如我们所见,服务帐户有权在 mynamespace 中获取、监视、列出 pod,但在默认命名空间中没有相同的权限,尽管服务帐户位于默认命名空间中。
现在,如果我删除角色绑定并在默认命名空间而不是 mynamespace 中创建它。
kubectl create rolebinding my-role-binding --role=my-role --serviceaccount=default:myserviceac -n default
kubectl auth can-i get pods -n default --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i list pods -n default --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i watch pods -n default --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i get pods -n mynamespace --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i list pods -n mynamespace --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i watch pods -n mynamespace --as=system:serviceaccount:default:myserviceac
no
可以看出权限不再应用了。