J'ai installé helm 2.6.2 sur le cluster kubernetes 8. helm init
a bien fonctionné. mais quand je lance helm list
il donne cette erreur.
helm list
Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system"
Comment réparer ce message d'erreur RABC?
Une fois ces commandes:
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
ont été exécutés, le problème a été résolu.
La réponse acceptée donne un accès administrateur complet à Helm, ce qui n’est pas la meilleure solution en termes de sécurité. Avec un peu plus de travail, nous pouvons restreindre l'accès de Helm à un espace de noms particulier. Plus de détails dans le Helm documentation .
$ kubectl create namespace tiller-world
namespace "tiller-world" created
$ kubectl create serviceaccount tiller --namespace tiller-world
serviceaccount "tiller" created
Définissez un rôle qui permet à Tiller de gérer toutes les ressources dans tiller-world
comme dans 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: ["*"]
Puis lancez:
$ kubectl create -f role-tiller.yaml
role "tiller-manager" created
Dans 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
Puis lancez:
$ kubectl create -f rolebinding-tiller.yaml
rolebinding "tiller-binding" created
Ensuite, vous pouvez exécuter helm init
pour installer Tiller dans l’espace de noms tiller-world
.
$ helm init --service-account tiller --tiller-namespace tiller-world
Maintenant, préfixez toutes les commandes avec --tiller-namespace tiller-world
ou définissez TILLER_NAMESPACE=tiller-world
dans vos variables d'environnement.
Arrêtez d'utiliser Tiller. Helm 3 supprime complètement le besoin de Tiller. Si vous utilisez Helm 2, vous pouvez utiliser helm template
pour générer le yaml à partir de votre diagramme de Helm, puis exécutez kubectl apply
pour appliquer les objets à votre cluster Kubernetes.
helm template --name foo --namespace bar --output-dir ./output ./chart-template
kubectl apply --namespace bar --recursive --filename ./output -o yaml
Helm fonctionne avec un compte de service "par défaut". Vous devriez lui donner des permissions.
Pour les autorisations en lecture seule:
kubectl create rolebinding default-view --clusterrole=view --serviceaccount=kube-system:default --namespace=kube-system
Pour un accès administrateur: par exemple: pour installer des packages.
kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
Le compte de service par défaut ne dispose pas d'autorisations d'API. Helm doit probablement se voir attribuer un compte de service, et ce compte de service dispose des autorisations API. Consultez la documentation RBAC pour l'octroi d'autorisations aux comptes de service: 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
puis mettez à jour instalation de la barre pour utiliser serviceAccount:
helm init --service-account tiller --upgrade