江小南

V1

2022/10/23阅读:24主题:默认主题

【CKA、CKS篇】CKA真题解析—RBAC权限控制扩展

扩展

对于题目中涉及到的知识点,我进一步补充说明。

1. RBAC授权模型

RBAC是Role Based Access Control的英文缩写,意思是基于角色的访问控制。

其中涉及到了下面几个概念:

  • 对象:User、Groups、 ServiceAccount
  • 角色:代表着一组定义在资源上的可操作动作(权限)的集合
  • 绑定:将定义好的角色跟对象主体绑定在一起

通过RBAC授权模型,我们可以实现如下的操作:

看到这个图片,相信对于IT人员来说已经明白是什么含义了,这里只做扩展,不展开讲解,有兴趣的小伙伴可以自行学习一下。

2. 角色类型

集群内角色有两种类型:Role和ClusterRole,Role是命名空间级别的,只对当前名称空间有效。ClusterRole是集群级别的,对集群内所有的名称空间有效。

3. 主体类型

集群内有三种主体:User(用户),Group(用户组),服务账号(ServiceAccount)。

4. 角色绑定类型

集群内有两种角色绑定类型:RoleBinding和 ClusterRoleBinding。RoleBinding是命名空间级别的,只对当前名称空间有效。ClusterRoleBinding是集群级别的,对集群内所有的名称空间有效。

注意:clusterbinding不能绑定role,只能绑定clusterrole,而rolebinding既能绑定role又能绑定clusterrole,当rolebinding绑定clusterrole时会使clusterrole降级。

5. yaml说明

clusterrole

candidate@node01:~$ kubectl get clusterrole deployment-clusterrole -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  creationTimestamp: "2022-08-12T13:29:58Z"
  name: deployment-clusterrole
  resourceVersion: "80642"
  uid: abfc1af7-bd5a-492b-97e1-211d0fd4ffbe
rules:
- apiGroups:
  - apps
  resources:
  - deployments
  - statefulsets
  - daemonsets
  verbs:
  - create
candidate@node01:~$

rules中的参数说明:

  • apiGroups:支持的API组列表
"","apps","autoscaling", "batch"
  • resources:支持的资源对象列表
"services","endpoints","pods","secrets","configmaps","crontabs" ,"deployments","jobs","nodes" , "rolebindings","clusterroles", " daemonsets" ,"replicasets" ,"statefulsets","horizontalpodautoscalers" ,"replicationcontrollers" , "cronjobs"
  • verbs:对资源对象的操作方法列表
"get","list", "watch", "create", "update", "patch", "delete", "exec"

6. Clusterrole和role的yaml创建方法

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: deployment-clusterrole
rules:
- apiGroups:
  - apps
  resources:
  - deployments
  - statefulsets
  - daemonsets
  verbs:
  - create
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: deployment-role
  namespace: app-team1
rules:
- apiGroups:
  - apps
  resources:
  - deployments
  - statefulsets
  - daemonsets
  verbs:
  - create

说明:clusterrole和role的创建方式基本相同,需要注意的是role需要指定名称空间,因为它是名称空间级别的,而clusterrole不需要指定,因为它是集群级别的。

7. 绑定不同的主体方法

上面我们说到了三种主体,绑定方法基本相同,区别主要在于subjects的不同,如下所示:

# 绑定user
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: rolebinding-user
  namespace: app-team1
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: deployment-clusterrole
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: sams
# 绑定group
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: rolebinding-group
  namespace: app-team1
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: deployment-clusterrole
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: edsp
# 绑定serviceaccount
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: rolebinding-serviceaccount
  namespace: app-team1
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: deployment-clusterrole
subjects:
- kind: ServiceAccount
  name: cicd-token
  namespace: app-team1

说明:在绑定的时候一定要注意需要有规则(role),同时也要有主体(subjects)才能进行绑定。

分类:

后端

标签:

后端

作者介绍

江小南
V1