Open laik opened 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。
通过配置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。