helm默认会安装到kubeops,权限级别为cluster-admin,这样的权限太大了,在实际工作中一些普通程序的发布如果都集中在默认的tiller上会造成不好管理,以及无法放心的释放权限。如果想更合理的分配就需要一个好的权限控制及规划
1,首先在k8s中创建仅限于空间所有权的账号
kubectl create serviceaccount helm-bmsk-admin -n bmsk kubectl create rolebinding helm-bmsk-admin --clusterrole=cluster-admin --serviceaccount=bmsk:helm-bmsk-admin -n bmsk
2,生成kubeconfig权限文件
kubectl config set-cluster kubernetes \ --certificate-authority=/etc/kubernetes/ca.crt \ --embed-certs=true \ --server=https://10.88.10.17:60002 \ --kubeconfig=./helm-bmsk-admin.kubeconfig # 设置客户端认证参数 ADMIN_TOKEN=$(kubectl get secret helm-bmsk-admin-token-jpgzq -n bmsk -o jsonpath={.data.token} |base64 -d) kubectl config set-credentials helm-bmsk-admin \ --token=${ADMIN_TOKEN}\ --namespace=bmsk \ --kubeconfig=./helm-bmsk-admin.kubeconfig # 设置上下文参数 kubectl config set-context helm-bmsk-admin \ --cluster=kubernetes \ --user=helm-bmsk-admin \ --namespace=bmsk \ --kubeconfig=./helm-bmsk-admin.kubeconfig # 设置默认上下文 kubectl config use-context helm-bmsk-admin --kubeconfig=./helm-bmsk-admin.kubeconfig --namespace=bmsk
3,经过上面操作会生成一个helm-bmsk-admin.kubeconfig秘钥,通过这个秘钥我们可以拥有bmsk这个空间的所有权限,下面需要bmsk空间发布一个tiller用于helm与之通信
通过拥有cluster_admin权限的helm,在bmsk空间初始化一个tiller要指定其权限 helm init --service-account helm-bmsk-admin --kubeconfig /root/manifests/role/helm/helm-bmsk-admin.kubeconfig --tiller-namespace=bmsk --upgrade --tiller-image=hub.corp.bm-sk.cn/k8s/tiller:v2.10.0
4,在client端初始化helm
helm init --client-only --stable-repo-url http://mirror.azure.cn/kubernetes/charts/
5,通过指定秘钥+命令行获取当前空间的releases project
[root@bmsk-manage-jenkins-578f5d8bb4-tsr5c /]# helm --kubeconfig /mnt/helm-bmsk-admin.kubeconfig --tiller-namespace bmsk list NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE p-bmsk-cas 13 Thu Aug 13 14:26:33 2020 DEPLOYED deploy-1.0.3 1.0 bmsk p-bmsk-qywx 7 Mon Jun 8 13:31:06 2020 DEPLOYED deploy-1.0.3 1.0 bmsk p-bmsk-z 51 Wed Sep 2 10:47:00 2020 DEPLOYED deploy-1.0.3 1.0 bmsk