web-dev-qa-db-fra.com

helm list: impossible de lister les cartes de configuration dans l'espace de noms "kube-system"

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?

83
sfgroups

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.

192
sfgroups

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 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.

Plus de réponse future preuve

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
31

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
18
suresh Palemoni

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

3
Jordan Liggitt
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