k8s集群基于角色的权限访问——RBAC的使用

      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也无法访问集群级别的资源。

©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页