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