这里有个需求在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