RBAC(Role-Based Access Control,基于角色的访问控制)在Kubernetes v1.5中引入,是kubeadm安装方式下的默认选项。要使用RBAC授权模式,需要在API Server启动参数中加上--authorization-mode=RBAC。
RBAC授权规则是通过四种资源进行配置的,它们可以分成两个组:
Role(角色)和ClusterRole(集群角色),它们指定了在资源上可以执行哪些操作。
RoleBinding(角色绑定)和ClusterRoleBinding(集群角色绑定),它们将上述角色绑定到特定的用户、组或ServiceAccounts上。
可以简单理解:角色定义了可以做什么操作,而绑定定义了谁可以做这些操作。
Role和RoleBinding 是命名空间的资源,而ClusterRole和ClusterRoleBinding是集群级别的资源。
通过实战来了解以上四种资源
一、Role和RoleBinding
1.创建foo和bar命名空间
#创建foo命名空间
$ kubectl create ns foo
#在foo命名空间中创建一个pod
kubectl run test --image=luksa/kubectl-proxy -n foo
#创建bar命名空间
kubectl create ns bar
kubectl run test --image=luksa/kubectl-proxy -n bar
注:kubectl-proxy启动一个代理进行监听localhost:8001,用于获取API资源信息。
$ kubectl exec -it test -n foo -- sh
进入pod中的容器
$ curl localhost:8001/api/v1/namespaces/foo/pods

无法访问该命名空间下的Pods资源
Role的常用模板说明

定义 pod-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: foo
name: pod-reader
rules:
- apiGroups: [""]
verbs: ["get", "list"]
resources: ["pods"]
$ kubectl create -f pod-reader.yaml
创建role资源 pod-reader
创建一个RoleBinding资源来实现将角色绑定到主体
$ kubectl create rolebinding test --role=pod-reader --serviceaccount=foo:default -n foo
将pod-reader角色绑定到命名空间foo中的default ServiceAccount上。
通过命令行创建rolebinding资源的使用说明

资源绑定后我们再次进行访问
$ curl localhost:8001/api/v1/namespaces/foo/pods

绑定role之后我们发现可以访问foo命名空间下的pods资源列表
注:我们也可以通过yaml文件创建rolebinding资源
二、ClusterRole和ClusterRoleBinding
ClusterRole是一种集群级资源,它允许访问没有命名空间的资源和非资源的URL,或者作为单个命名空间内部绑定的公共角色。
创建一个ClusterRole
该ClusterRole用于读取(get和list)pv资源
$ kubectl create clusterrole pv-reader --verb=get,list --resource=persistentvolumes
(kubectl exec -it test -n foo -- sh 在test容器中)
$ curl localhost:8001/api/v1/persistentvolumes

我们发现资源绑定之前,在foo命名空间的容器中因为权限问题无法正常访问pv资源
创建clusterrolebinding资源
$ kubectl create clusterrolebinding pv-test --clusterrole=pv-reader --serviceaccount=foo:default
绑定foo命名空间中的serviceaccount
我们再次访问pv资源
$ curl localhost:8001/api/v1/persistentvolumes

资源绑定之后就可以正常访问pv资源了。
注:一个RoleBinding也可以绑定ClusterRole,但是RoleBinding属于命名空间内资源,即使绑定了一个ClusterRoleBinding也无法访问集群级别的资源。
435



被折叠的 条评论
为什么被折叠?



