laik / demo

2 stars 0 forks source link

通过配置kubeconfig文件实现集群权限精细化管理 #13

Open laik opened 3 years ago

laik commented 3 years ago

通过配置kubeconfig文件实现集群权限精细化管理

问题场景 CCE默认的给用户的kubeconfig文件为cluster-admin角色的用户,相当于root权限,对于一些用户来说权限太大,不方便精细化管理。

目标 对集群资源进行精细化管理,让特定用户只能拥有部分权限(如:增、查、改)。

注意事项 确保您的机器上有kubectl工具,若没有请到kubernetes版本发布页面下载与集群版本对应的或者最新的kubectl。

配置方法 说明: 下述示例配置只能查看和添加test空间下面的Pod和Deployment,不能删除。

配置sa,名称为my-sa,命名空间为test。 kubectl create sa my-sa -n test

配置role规则表,赋予不同资源相应的操作权限。 vi role-test.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" labels: kubernetes.io/bootstrapping: rbac-defaults name: myrole namespace: test rules:

kubectl create -f role-test.yaml

配置rolebinding,将sa绑定到role上,让sa获取相应的权限。 vi myrolebinding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: myrolebinding namespace: test roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: myrole subjects:

kubectl create -f myrolebinding.yaml

此时,用户信息配置完成,继续执行步骤4~步骤6将用户信息写入到配置文件中。

配置集群访问信息。 通过sa的名称my-sa获取sa对应的密钥,第一列的my-sa-token-z4967即为密钥名: kubectl get secret -n test |grep my-sa

点击放大

将密钥中的ca.crt解码后导出备用: kubectl get secret my-sa-token-5gpl4 -n test -oyaml |grep ca.crt:|awk '{print $2}' |base64 -d > /home/ca.crt

设置集群访问方式,其中test-arm为需要访问的集群,10.0.1.100为集群apiserver地址(获取方法参见图1),/home/test.config为配置文件的存放路径。 如果通过内部apiserver地址,执行如下命令: kubectl config set-cluster test-arm --server=https://10.0.1.100:5443 --certificate-authority=/home/ca.crt --embed-certs=true --kubeconfig=/home/test.config

如果通过公网apiserver地址,执行如下命令: kubectl config set-cluster test-arm --server=https://10.0.1.100:5443 --kubeconfig=/home/test.config --insecure-skip-tls-verify=true

点击放大

说明: 若在集群内节点上执行操作或者最后使用该配置的节点为集群节点,不要将kubeconfig的路径设为/root/.kube/config。

集群apiserver地址为内网apiserver地址,绑定弹性IP后也可为公网apiserver地址,获取方式如下:

图1 获取内网或外网apiserver地址 点击放大 配置集群认证信息。 获取集群的token信息(这里如果是get获取需要based64 -d解码)。 token=$(kubectl describe secret my-sa-token-5gpl4 -n test | awk '/token:/{print $2}')

设置使用集群的用户ui-admin。 kubectl config set-credentials ui-admin --token=$token --kubeconfig=/home/test.config

点击放大

配置集群认证访问的上下文信息,ui-admin@test为上下文的名称。 kubectl config set-context ui-admin@test --cluster=test-arm --user=ui-admin --kubeconfig=/home/test.config

点击放大

设置上下文,设置完成后使用方式见验证权限。 kubectl config use-context ui-admin@test --kubeconfig=/home/test.config

点击放大

说明: 若需授予其他用户操作该集群并限制为上述权限,在步骤6结束后将生成的配置文件/home/test.config提供给该用户,由该用户置于自己机器上(用户机器须保证能访问集群apiserver地址),在该机器上执行步骤7使用kubectl时kubeconfig参数须指定为配置文件所在路径。

验证权限 可以查询test命名空间下的pod资源,被拒绝访问其他命名空间的Pod资源。 kubectl get pod -n test --kubeconfig=/home/test.config

点击放大

不可删除test命名空间下的Pod资源。 点击放大

延伸阅读 更多Kubernetes中的用户与身份认证授权内容,请参见Authenticating。