集群权限精细化管理的背景
云容器引擎默认给用户的kubeconfig文件对集群操作的权限相当于root级别,这样的权限级别对于某用户来说过大,很不便于对集群的精细化管理。为了达到对集群精细化管理的目标,我们可以通过kubeconfig设置特定的用户,然后给用户赋予集群的部分操作权限(如:增、查、改)。
注意事项
下面配置步骤操作前,请先确保您的机器上有kubectl工具,若没有请到社区下载与集群版本对应的或者最新的kubectl。
基于Role实现集群权限精细化管理的配置步骤
说明下述示例创建一个用户,并且该用户只能查看default下的Pod,不能查看其他namespace下的Pod且不能删除default下的任何Pod。
- 配置ServiceAccount,名称为test-sa,命名空间为default
kubectl create sa test-sa -n default
- 创建Role,并配置针对不同资源相对应的操作权限
vi addRole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: test-role
namespace: default
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
- apiGroups:
- apps
resources:
- pods
verbs:
- get
- list
- watch
kubectl create -f addRole.yaml
- 配置RoleBinding,将sa绑定到Role上,让sa获取相应权限
vi addRoleBinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: myrolebinding
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: test-role
subjects:
- kind: ServiceAccount
name: test-sa
namespace: default
kubectl create -f addRoleBinding.yaml
- 配置集群访问信息
4.1 通过sa的名称test-sa获取sa对应的密钥,第一列test-sa-token-nttvl即为密钥名
kubectl get secret -n default |grep test-sa
4.2 将密钥中的ca.crt解码后导出
kubectl get secret test-sa-token-d6b4q -n default -oyaml |grep ca.crt: | awk '{print $2}' |base64 -d > ca.crt
4.3 设置集群访问方式,其中dev 为需要访问的集群名称,10.50.208.30为集群ApiServer地址,test.config为配置文件的存放路径
(1)如果通过内部ApiServer地址,执行命令如下:
kubectl config set-cluster dev --server=https://10.50.208.30:6443 --certificate-authority=ca.crt --embed-certs=true --kubeconfig=test.config
(2)如果通过公网ApiServer地址,执行命令如下:
kubectl config set-cluster dev --server=https://10.50.208.30:6443 --kubeconfig=test.config --insecure-skip-tls-verify=true
集群ApiServer地址为内网ApiServer地址,绑定弹性IP后也可为公网ApiServer地址。如下图:
- 配置集群认证信息
5.1 获取集群的token信息
token=$(kubectl describe secret test-sa-token-d6b4q -n default | awk '/token:/{print $2}')
5.2 设置使用集群的用户ui-admin
kubectl config set-credentials ui-admin --token=$token --kubeconfig=test.config
- 配置集群认证访问的上下文信息,ui-admin@test为上下文的名称
kubectl config set-context ui-admin@test --cluster=dev --user=ui-admin --kubeconfig=test.config
- 设置上下文
kubectl config use-context ui-admin@test --kubeconfig=test.config
验证权限
查询default命名空间下的pod资源。
kubectl get pod -n default --kubeconfig=test.config
被拒绝访问其他命名空间的pod资源。
kubectl get pod -n test-rq --kubeconfig=test.config
不可以删除default命名空间下的pod资源。
kubectl delete pod -n default cephfs-provisioner-8689474666-d2gsw --kubeconfig=test.config
基于ClusterRole实现集群权限精细化管理的配置步骤
请参考:集群命名空间RBAC授权