k8s不求甚解系列:一种在k8s上创建不同权限的kubeconfig实践
多团队在同一个k8s集群上共同开发,为了隔离不同团队对集群资源的操作能力,通过创建并分发具有不同操作权限的kubeconfig文件,隔离不同业务团队对k8s中资源的操作能力。
·
场景
多团队在同一个k8s集群上共同开发,为了隔离不同团队对集群资源的操作能力,通过创建并分发具有不同操作权限的kubeconfig文件,隔离不同业务团队对k8s中资源的操作能力。
面向人群
集群运维人员
实验操作设置
- 业务团队一:占用的namespace是test1
- 业务团队二:占用的namespace是test2
- 操作机器是在集群的master节点上
实验过程
# 在集群上创建用户
kubectl create sa user1
# 创建user1依赖的namespace命名空间
kubectl create ns test1
# 创建role,配置user1用户可以在test1的命名空间内检索pod
kubectl create role pod-reader --verb=list --resource=pods -n test1
kubectl create rolebinding pod-reader-binding --role=pod-reader --serviceaccount=default:user1 -n test1
# 获取user1的secrets并保存到本地
kubectl get sa user1 -o=jsonpath='{.secrets[0].name}'|xargs kubectl get secret -o=jsonpath='{.data.token}' | base64 -d > user1.token
# 创建kubeconfig
# 这一步需要替换apiserver地址,确保是在master节点执行
kubectl config set-cluster kubernetes --server=https://192.168.139.100:6443 --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true --kubeconfig=user1.kubeconfig
kubectl config set-context user1 --cluster=kubernetes --user=user1 --kubeconfig=user1.kubeconfig
# 这一步依赖前文提到的user1.token文件
kubectl config set-credentials user1 --token=$(cat user1.token) --kubeconfig=user1.kubeconfig
kubectl config use-context user1 --kubeconfig=user1.kubeconfig
实现效果
不同团队可以通过不同权限的kubeconfig文件操作集群
# 现在可以切换kubeconfig了
export KUBECONFIG=user1.kubeconfig
[root@master home]# kubectl get po
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:default:user1" cannot list resource "pods" in
API group "" in the namespace "default"
[root@master home]# kubectl get po -n test1
No resources found in test1 namespace.
后续
集群的运维人员可以根据k8s原生支持的面向namespace的resourceQuota、LimitRange等技术对不同团队进行资源限制
更多推荐
已为社区贡献6条内容
所有评论(0)