elenco timoni: impossibile elencare le mappe di configurazione nello spazio dei nomi "sistema-kube"


108

Ho installato helm 2.6.2 sul cluster Kubernetes 8. helm initha funzionato bene. ma quando lo eseguo helm listdando questo errore.

 helm list
Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system"

Come risolvere questo messaggio di errore RABC?

Risposte:


228

Una volta che questi comandi:

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

sono stati eseguiti, il problema è stato risolto.


10
Nota che questo assegna --clusterrole=cluster-admin, il che risolverà sicuramente i problemi di autorizzazione, ma potrebbe non essere la soluzione che desideri. È meglio creare i propri account di servizio, ruoli (cluster) e rolebind (cluster) con le autorizzazioni esatte di cui si ha bisogno.
Curtis Mattoon

2
The accepted answer gives full admin access to Helm which is not the best solution security wise(vedi stackoverflow.com/a/53277281/2777965 ).
030

1
quando si esegue "init", deve avere "--upgrade", altre domande non lo menzionano.
Heavenwing

Quando corro kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'ottengoError from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick

36

Risposta più sicura

La risposta accettata fornisce l'accesso amministrativo completo a Helm, che non è la migliore soluzione dal punto di vista della sicurezza. Con un po 'più di lavoro, possiamo limitare l'accesso di Helm a un particolare spazio dei nomi. Maggiori dettagli nella documentazione di Helm .

$ kubectl create namespace tiller-world
namespace "tiller-world" created
$ kubectl create serviceaccount tiller --namespace tiller-world
serviceaccount "tiller" created

Definisci un ruolo che consenta a Tiller di gestire tutte le risorse tiller-worldcome in 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: ["*"]

Quindi esegui:

$ kubectl create -f role-tiller.yaml
role "tiller-manager" created

In 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

Quindi esegui:

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

Successivamente puoi eseguire helm initl'installazione di Tiller nello tiller-worldspazio dei nomi.

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

Ora anteponi tutti i comandi --tiller-namespace tiller-worldo impostati TILLER_NAMESPACE=tiller-worldnelle variabili d'ambiente.

Più risposta a prova di futuro

Smetti di usare Tiller. Helm 3 elimina completamente la necessità di Tiller. Se stai usando Helm 2, puoi usare helm templateper generare lo yaml dal tuo grafico Helm e quindi eseguire kubectl applyper applicare gli oggetti al tuo cluster Kubernetes.

helm template --name foo --namespace bar --output-dir ./output ./chart-template
kubectl apply --namespace bar --recursive --filename ./output -o yaml

1
Nota, una volta fatto questo, dovrai anteporre --tiller-namespace tiller-worldo impostare tutti i comandi helm TILLER_NAMESPACE=tiller-worldnelle tue variabili d'ambiente.
spuder

1
Totalmente d'accordo con la risposta a prova di futuro. La gente del timone sembra rendersi conto che la roba RBAC ha reso le cose troppo complesse da gestire. Sono solo in alpha, ma vale la pena dare un'occhiata: Helm 3, alpha 1
Richard

1
D'accordo, RBAC è un po 'troppo su cui mettere le mani all'inizio. Sto ancora lottando con esso, ma sto facendo progressi.
coreyperkins

La creazione dei volumi persistenti è la pratica accettata dal timone? Dovremmo creare anche un altro ruolo di cluster e vincolante per questo caso?
Sawyer

20

Helm viene eseguito con l'account di servizio "predefinito". Dovresti fornire le autorizzazioni ad esso.

Per autorizzazioni di sola lettura:

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

Per l'accesso come amministratore: ad esempio: per installare i pacchetti.

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default

Dopo aver eseguito kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:defaulte poi eseguito, helm listottengo ancoraError: 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

e quindi aggiorna l'installazione del timone per utilizzare serviceAccount:

helm init --service-account tiller --upgrade


0

Ho ricevuto questo errore durante il tentativo di installare tiller in modalità offline, pensavo che l'account di servizio "tiller" non avesse diritti sufficienti, ma si è scoperto che una politica di rete stava bloccando la comunicazione tra tiller e api-server.

La soluzione era creare una politica di rete per tiller che consentisse tutte le comunicazioni in uscita da tiller


0

export TILLER_NAMESPACE=<your-tiller-namespace>risolto per me, se <your-tiller-namespace>non lo è kube-system. Questo indirizza il client Helm allo spazio dei nomi Tiller corretto.


0

Se stai utilizzando un cluster EKS da AWS e stai affrontando il problema proibito ( ad esempio : forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"allora questo ha funzionato per me:

Soluzione:

  1. Assicurati di aver configurato AWS
  2. Assicurati che l'utente configurato disponga dell'autorizzazione per accedere al cluster.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.