helm list: impossible de lister les configmaps dans l'espace de noms «kube-system»

108

J'ai installé helm 2.6.2 sur le cluster kubernetes 8. helm inita bien fonctionné. mais quand je l'exécute helm listen donnant 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?

sfgroups
la source

Réponses:

228

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.

sfgroups
la source
10
Notez que cela attribue --clusterrole=cluster-admin, ce qui résoudra certainement les problèmes d'autorisations, mais pourrait ne pas être le correctif souhaité. Il est préférable de créer vos propres comptes de service, rôles (cluster) et liaisons de rôle (cluster) avec les autorisations exactes dont vous avez besoin.
Curtis Mattoon
2
The accepted answer gives full admin access to Helm which is not the best solution security wise(voir stackoverflow.com/a/53277281/2777965 ).
030 le
1
lors de l'exécution de "init", doit avoir "--upgrade", les autres questions ne le mentionnent pas.
Heavenwing
Quand je cours, kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'je reçoisError from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick
36

Réponse plus sécurisée

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 la documentation Helm .

$ 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 tiller-worldcomme 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 exécutez:

$ 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 exécutez:

$ kubectl create -f rolebinding-tiller.yaml
rolebinding "tiller-binding" created

Ensuite, vous pouvez exécuter helm initpour installer Tiller dans l' tiller-worldespace de noms.

$ helm init --service-account tiller --tiller-namespace tiller-world

Maintenant, préfixez toutes les commandes avec --tiller-namespace tiller-worldou définies TILLER_NAMESPACE=tiller-worlddans vos variables d'environnement.

Plus de réponses à l'épreuve du futur

Arrêtez d'utiliser Tiller. Helm 3 supprime complètement le besoin de Tiller. Si vous utilisez Helm 2, vous pouvez utiliser helm templatepour générer le yaml à partir de votre graphique Helm, puis exécuter kubectl applypour 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
Muhammad Rehan Saeed
la source
1
Notez qu'une fois que vous faites cela, vous devrez préfixer toutes les commandes de barre avec --tiller-namespace tiller-worldou définir TILLER_NAMESPACE=tiller-worlddans vos variables d'environnement.
spuder
1
Totalement d'accord avec la réponse future preuve. Les gens de barre semblent se rendre compte que les trucs RBAC rendaient les choses trop complexes à gérer. Ils ne sont qu'à alpha, mais valent le coup d'œil: Helm 3, alpha 1
Richard
1
D'accord, RBAC est un peu difficile à mettre la main au début. J'ai encore du mal avec ça mais je progresse.
coreyperkins
La création de volumes persistants est-elle la pratique acceptée par la barre? Devrions-nous créer également un autre rôle de cluster et une liaison pour ce cas?
Sawyer
20

Helm fonctionne avec le compte de service "par défaut". Vous devez lui fournir des autorisations.

Pour les autorisations en lecture seule:

kubectl create rolebinding default-view --clusterrole=view --serviceaccount=kube-system:default --namespace=kube-system

Pour l'accès administrateur: Par exemple: pour installer des packages.

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
suresh Palemoni
la source
Après avoir couru kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default, puis couru, helm listje reçois toujoursError: configmaps is forbidden: User "system:serviceaccount:tiller:default" cannot list configmaps in the namespace "tiller": no RBAC policy matched
Magick
0
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 l'installation de barre pour utiliser serviceAccount:

helm init --service-account tiller --upgrade

Elieser Jose Pereira Reyes
la source
0

J'ai eu cette erreur en essayant d'installer le motoculteur en mode hors ligne, je pensais que le compte de service `` timon '' n'avait pas assez de droits, mais il s'avère qu'une politique réseau bloquait la communication entre le timon et le serveur api.

La solution était de créer une politique de réseau pour le timon permettant toutes les communications de sortie du timon

Jorge P.
la source
0

export TILLER_NAMESPACE=<your-tiller-namespace>résolu pour moi, si ce <your-tiller-namespace>n'est pas le cas kube-system. Cela pointe le client Helm vers le bon espace de noms Tiller.

bczoma
la source
0

Si vous utilisez un cluster EKS AWS et sont confrontés à la question interdit ( par exemple : forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"alors cela a fonctionné pour moi:

Solution:

  1. Assurez-vous d'avoir configuré AWS
  2. Assurez-vous que l'utilisateur configuré a l'autorisation d'accéder au cluster.
Kiruthika Kanagarajan
la source