1、rbac介绍
Kubernetes中的两个用于配置信息的重要资源对象:ConfigMap和Secret,其实到这里我们基本上学习的内容已经覆盖到Kubernetes中一些重要的资源对象了,来部署一个应用程序是完全没有问题的了。在我们演示一个完整的示例之前,我们还需要给大家讲解一个重要的概念:RBAC - 基于角色的访问控制。
RBAC使用rbac.authorization.k8s.io API Group 来实现授权决策,允许管理员通过 Kubernetes API 动态配置策略,要启用RBAC,需要在 apiserver 中添加参数–authorization-mode=RBAC,如果使用的kubeadm安装的集群,1.6 版本以上的都默认开启了RBAC,可以通过查看 Master 节点上 apiserver 的静态Pod定义文件:
2、 kubernetes 关于空间权限赋予
1、获取并查看
- Role
- ClusterRole
- RoleBinding
- ClusterRoleBinding
1.1、查看kube-system namespace下的所有role
1
kubectl get role -n kube-system
1.2、查看某个role定义的资源权限
1
kubectl get role <role-name> -n kube-system -o yaml
1.3、查看kube-system namespace下所有的rolebinding
1
kubectl get rolebinding -n kube-system
1.4、查看kube-system namespace下的某个rolebinding详细信息(绑定的Role和subject)
1
kubectl get rolebinding <rolebind-name> -n kube-system -o yaml
1.5、查看集群所有的clusterrole
1
kubectl get clusterrole
1.6、查看某个clusterrole定义的资源权限详细信息
1
kubectl get clusterrole <clusterrole-name> -o yaml
1.7、查看所有的clusterrolebinding
1
kubectl get clusterrolebinding
1.8、查看某一clusterrolebinding的详细信息
1
kubectl get clusterrolebinding <clusterrolebinding-name> -o yaml
2、kubectl命令可以用于在命名空间内或者整个集群内授予角色。
在某一特定名字空间内授予Role或者ClusterRole。示例如下:
1
kubectl create rolebinding
在名为”acme”的名字空间中将admin ClusterRole授予用户”bob”:
1
kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=bob --namespace=acme
在名为”acme”的名字空间中将view ClusterRole授予服务账户”myapp”:
1
2kubectl create rolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp --namespace=acme
kubectl create clusterrolebinding
3、在整个集群中授予ClusterRole,包括所有名字空间。示例如下:
在整个集群范围内将cluster-admin ClusterRole授予用户”root”:
1
kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root
在整个集群范围内将system:node ClusterRole授予用户”kubelet”:
1
kubectl create clusterrolebinding kubelet-node-binding --clusterrole=system:node --user=kubelet
在整个集群范围内将view ClusterRole授予名字空间”acme”内的服务账户”myapp”:
1
kubectl create clusterrolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp
4、对某一个namespace赋予jenkins部署权限
查看kube-ops 下面的角色
1
2
3# kubectl get role -n kube-ops
NAME AGE
jenkins2 2d6h查看role定义的资源权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49# kubectl get role jenkins2 -n kube-ops -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: "2019-01-14T03:07:25Z"
name: jenkins2
namespace: kube-ops
resourceVersion: "2389179"
selfLink: /apis/rbac.authorization.k8s.io/v1/namespaces/kube-ops/roles/jenkins2
uid: 84762132-17a9-11e9-8991-fa163e14c5bd
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- ""
resources:
- pods/exec
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- ""
resources:
- pods/log
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- secrets
verbs:
- get创建jenkins2的权限
1
2[root@k8s-zxc-test-3 ~]# kubectl -n kube-system create sa jenkins2
serviceaccount/jenkins2 created授权访问
1
2[root@k8s-zxc-test-3 ~]# kubectl create clusterrolebinding jenkins2 --clusterrole cluster-admin --serviceaccount=kube-ops:jenkins2
clusterrolebinding.rbac.authorization.k8s.io/jenkins2 created