我想通过将serviceaccount授权关联到clusterRole来设置服务帐户授权,但是使用角色绑定将其限制为命名空间。
我声明了一个clusterrole,并在指向该clusterrole的命名空间中配置了角色绑定。
但是,当我使用在角色绑定中定义的serviceaccount令牌访问群集时,我不仅限于名称空间。
另一方面,当我使用“用户”证书访问群集时,这是可行的。我只能访问名称空间。
Kubernetes v1.13.5
我定义的角色绑定:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: exploitant
namespace: myNamespace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- kind: ServiceAccount
name: default
namespace: myNamespace
- apiGroup: rbac.authorization.k8s.io
kind: User
name: myUser
这就是我得到的:
kubectl auth can-i --token=XXXXXXXX get po -n myNamespace
yes
->符合预期
kubectl auth can-i --token=XXXXXXXX get po -n kube-system
yes
->没想到!!!
答案 0 :(得分:1)
解决方案是创建一个特定的ServiceAccount。不应使用“默认” serviceAccount。默认情况下,所有Pod均使用默认服务帐户运行(如果未指定)。因此,默认服务帐户存在于所有命名空间中,因此默认服务帐户可以读取所有命名空间中的Pod。