k8s RBAC 一个角色绑定多个namespace

k8s中的角色有两种角色 Role和ClusterRole,其中Role是namespace基本,肯定不可以跨namespace,而ClusterRole是没有namespace限制的,即便在ClusterRole定义的时候指定了namespace也会被忽略。

k8s RBAC 一个角色绑定多个namespace

我们首先在default空间下面创建一个sa

apiVersion: v1
kind: ServiceAccount
metadata:
  name: sa
  namespace: default

然后创建一个ClusterRole,设置它具有cronjobs的create、delete、get等权限,如下所示:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: job-master
rules:
- apiGroups:
  - batch
  resources:
  - cronjobs
  verbs:
  - create
  - delete
  - deletecollection
  - get
  - list
  - patch
  - update
  - watch

接下来就可以绑定权限了

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: job-master-1
  namespace: namespace1 #授权namespace1
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: job-master
subjects:
- kind: ServiceAccount
  name: sa
  namespace: default  #上面创建的default空间下面sa
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: job-master-2
  namespace: namespace2 #授权namespace2
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: job-master
subjects:
- kind: ServiceAccount
  name: sa
  namespace: default

经过上面的授权,default空间下面的sa就具有了管理 namespace1和namespace2空间下面cronjob的权利了。接下来我们通过命令行验证一下:

kubectl auth can-i get cronjobs -n namespace1 --as system:serviceaccount:default:sa 
#yes
kubectl auth can-i delete cronjobs -n namespace2 --as system:serviceaccount:default:sa
#yes
kubectl auth can-i get cronjobs -n namespace3 --as system:serviceaccount:default:sa 
#no
kubectl auth can-i get pod -n namespace2 --as system:serviceaccount:default:sa 
#no

其中第三条和第四条不符合RBAC的授权,分别是因为namespace和资源类型不匹配。这是通过绑定sa所以as 后面是 system:serviceaccount:default:sa ,如果是绑定的user 便可以在as后面直接追加用户名。

展开阅读全文

页面更新:2024-03-12

标签:绑定   角色   资源类型   用户名   权限   权利   定义   科技   空间

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top