场景

多团队在同一个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等技术对不同团队进行资源限制

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐