这里有个需求在jenins做cd的时候需要用helm进行发布,但是默认的权限比较大,可以控制整个集群如果将默认权限配置到jenkins上,那么jenkins将拥有全部的集群权限,而jenkins的管理员又并非仅掌握在自己手里,这样就会有很大的漏洞,如果有人蓄意破坏的话,可以瞬间搞挂整个集群,所以这里创建了仅用于单个namespace环境的kubeconfig权限,供jenkins使用,这样可以将损失降低
1,创建一个sa账户
kubectl create serviceaccount helm-test-bmsk-admin -n test-bmsk
2,通过rolebinding给账户绑定一个admin的权限
kubectl create rolebinding helm-test-bmsk-admin --clusterrole=admin --serviceaccount=test-bmsk:helm-test-bmsk-admin -n test-bmsk
3,创建集群认证的kubeconfig文件
设置集群参数 export KUBE_APISERVER="https://10.88.10.17:60002" kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/ca.crt \ --embed-certs=true \ --server=https://10.88.10.17:60002 \ --kubeconfig=./helm-test-bmsk-admin.kubeconfig 设置客户端认证参数 ADMIN_TOKEN=$(kubectl get secret helm-test-bmsk-admin-token-84gd6 -n test-bmsk -o jsonpath={.data.token} |base64 -d) kubectl config set-credentials helm-test-bmsk-admin \ --token= ${ADMIN_TOKEN}\ --kubeconfig=./helm-test-bmsk-admin.kubeconfig 设置上下文参数 kubectl config set-context helm-test-bmsk-admin \ --cluster=kubernetes \ --user=helm-test-bmsk-admin \ --namespace=test-bmsk \ --kubeconfig=./helm-test-bmsk-admin.kubeconfig 设置默认上下文 kubectl config use-context helm-test-bmsk-admin --kubeconfig=./helm-test-bmsk-admin.kubeconfig
4,测试kubeconfig,会发现仅能看到自己权限以内的pod信息
kubectl --kubeconfig helm-test-bmsk-admin.kubeconfig get pod