10. [CKA]考试之基于角色的访问控制-RBAC
10.1 认识RBAC
Kubernetes中完成授权工作的就是RBAC机制,RBAC授权规则是通过四种资源来进行配置。
- Role:角色,其实是定义一组对Kubernetes资源(命名空间级别)的访问规则。
- RoleBinding:角色绑定,定义了用户和角色的关系。
- ClusterRole:集群角色,其实是定义一组对Kubernetes资源(集群级别,包含全部命名空间)的访问规则。
- ClusterRoleBinding:集群角色绑定,定义了用户和集群角色的关系。
Role和ClusterRole指定了可以对哪些资源做哪些动作,RoleBinding和ClusterRoleBinding将角色绑定到特定的用户、用户组或ServiceAccount上
10.2 题目要求
创建一个名为 deployment-clusterrole 的 clusterrole, 该 clusterrole 只允许创建Deployment、Daemonset、 Statefulset 的 create 操作;
在名字为 app-team1 的 namespace 下创建一个名为 cicd-token 的 serviceAccount,并且将上一步创建 clusterrole 的权限绑定到该 serviceAccount。
10.3 官网位置
打开官网搜索:rbac 找到:使用 RBAC 鉴权
https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/
10.4 操作步骤
10.4.1 创建ClusterRole
我们先创建一个名为deployment-clusterrole的clusterrole,该clusterrole只允许对Deployment、Daemonset、Statefulset具有create权限
- 方法一:命令行
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets
- 方法二:yaml方式
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# "namespace" 被忽略,因为 ClusterRoles 不受名字空间限制
name: deployment-clusterrole
rules:
- apiGroups: [""]
resources: ["deployments","statefulsets","daemonsets"]
verbs: ["create"]
kubectl create -f dp-clusterrole.yaml
10.4.2 创建ServiceAccount
接下来在 namespace 命名空间app-team1中创建一个名为cicd-token的新 ServiceAccount
kubectl create sa cicd-token -n app-team1
10.4.3 绑定权限RoleBinding
最后操作在namespace app-team1中,将新的ClusterRole deployment-clusterrole绑定到新的 ServiceAccount cicd-token。
- 方式1:命令行
kubectl create rolebinding deployment-rolebinding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -n app-team1
- 方式2:yaml方式
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: deployment-rolebinding
namespace: app-team1
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: deployment-clusterrole
subjects:
- kind: ServiceAccount
name: cicd-token
namespace: app-team1