Answers:
一旦这些命令:
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
helm init --service-account tiller --upgrade
被运行,问题已经解决。
The accepted answer gives full admin access to Helm which is not the best solution security wise
(请参阅stackoverflow.com/a/53277281/2777965)。
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
我得到Error from server (NotFound): deployments.extensions "tiller-deploy" not found
接受的答案允许管理员完全控制Helm,这不是最佳的解决方案安全性。通过更多的工作,我们可以限制Helm对特定名称空间的访问。有关Helm文档的更多详细信息。
$ kubectl create namespace tiller-world
namespace "tiller-world" created
$ kubectl create serviceaccount tiller --namespace tiller-world
serviceaccount "tiller" created
定义一个角色,该角色允许Tiller以tiller-world
类似方式管理所有资源role-tiller.yaml
:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: tiller-manager
namespace: tiller-world
rules:
- apiGroups: ["", "batch", "extensions", "apps"]
resources: ["*"]
verbs: ["*"]
然后运行:
$ kubectl create -f role-tiller.yaml
role "tiller-manager" created
在rolebinding-tiller.yaml
,
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: tiller-binding
namespace: tiller-world
subjects:
- kind: ServiceAccount
name: tiller
namespace: tiller-world
roleRef:
kind: Role
name: tiller-manager
apiGroup: rbac.authorization.k8s.io
然后运行:
$ kubectl create -f rolebinding-tiller.yaml
rolebinding "tiller-binding" created
之后,您可以运行helm init
在tiller-world
名称空间中安装Tiller 。
$ helm init --service-account tiller --tiller-namespace tiller-world
现在,为所有命令加上环境变量--tiller-namespace tiller-world
或TILLER_NAMESPACE=tiller-world
在环境变量中设置前缀。
停止使用分iller。头盔3完全不需要蒂勒。如果使用的是Helm 2,则可以使用helm template
Helm图表生成yaml,然后运行kubectl apply
以将对象应用于Kubernetes集群。
helm template --name foo --namespace bar --output-dir ./output ./chart-template
kubectl apply --namespace bar --recursive --filename ./output -o yaml
--tiller-namespace tiller-world
或TILLER_NAMESPACE=tiller-world
在环境变量中设置。
Helm使用“默认”服务帐户运行。您应该为其提供权限。
对于只读权限:
kubectl create rolebinding default-view --clusterrole=view --serviceaccount=kube-system:default --namespace=kube-system
对于管理员访问权限:例如:安装软件包。
kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
,然后运行,helm list
我仍然得到Error: configmaps is forbidden: User "system:serviceaccount:tiller:default" cannot list configmaps in the namespace "tiller": no RBAC policy matched
默认的serviceaccount没有API权限。可能需要为Helm分配一个服务帐户,并且该服务帐户具有API权限。请参阅RBAC文档以授予服务帐户权限:https : //kubernetes.io/docs/admin/authorization/rbac/#service-account-permissions
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
kubectl apply -f your-config-file-name.yaml
然后更新头盔安装以使用serviceAccount:
helm init --service-account tiller --upgrade
如果您使用的是来自AWS的EKS集群并且遇到了禁止的问题( 例如:forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"
那么这对我有用:
解:
--clusterrole=cluster-admin
,这肯定会解决权限问题,但可能不是您想要的解决方案。最好使用您需要的权限来创建自己的服务帐户,(群集)角色和(群集)角色绑定。