Steuerliste: Konfigurationskarten können nicht im Namespace "kube-system" aufgelistet werden.


108

Ich habe Helm 2.6.2 auf dem Kubernetes 8-Cluster installiert. helm inithat gut funktioniert. aber wenn ich helm listes starte, gibt es diesen Fehler.

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

Wie behebt man diese RABC-Fehlermeldung?

Antworten:


228

Sobald diese Befehle:

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

ausgeführt wurden, wurde das Problem behoben.


10
Beachten Sie, dass dies Zuweisungen gibt --clusterrole=cluster-admin, die sicherlich Berechtigungsprobleme beheben, aber möglicherweise nicht die gewünschte Lösung sind. Es ist besser, eigene Dienstkonten, (Cluster-) Rollen und (Cluster-) Rollenbindungen mit genau den Berechtigungen zu erstellen, die Sie benötigen.
Curtis Mattoon

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

1
Wenn "init" ausgeführt wird, muss "--upgrade" vorhanden sein, andere Fragen erwähnen dies nicht.
Himmelflügel

Wenn ich renne, kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'bekomme ichError from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick

36

Sicherere Antwort

Die akzeptierte Antwort gibt dem Administrator vollen Zugriff auf Helm, was in Bezug auf die Sicherheit nicht die beste Lösung ist. Mit etwas mehr Arbeit können wir Helms Zugriff auf einen bestimmten Namespace einschränken. Weitere Details in der Helm-Dokumentation .

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

Definieren Sie eine Rolle, mit der Tiller alle Ressourcen tiller-worldwie folgt verwalten kann 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: ["*"]

Dann renne:

$ 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

Dann renne:

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

Anschließend können Sie helm initTiller im tiller-worldNamespace installieren .

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

Stellen Sie nun allen Befehlen Ihre Umgebungsvariablen voran --tiller-namespace tiller-worldoder legen TILLER_NAMESPACE=tiller-worldSie sie fest.

Weitere zukunftssichere Antwort

Verwenden Sie Tiller nicht mehr. Helm 3 macht Tiller komplett überflüssig. Wenn Sie Helm 2 verwenden, können Sie helm templatedas Yaml aus Ihrem Helmdiagramm generieren und dann ausführen kubectl apply, um die Objekte auf Ihren Kubernetes-Cluster anzuwenden.

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

1
Beachten Sie, dass Sie danach allen Steuerbefehlen alle Umgebungsvariablen voranstellen --tiller-namespace tiller-worldoder diese festlegen müssen TILLER_NAMESPACE=tiller-world.
Spuder

1
Stimmen Sie der zukunftssicheren Antwort voll und ganz zu. Die Steuerbeamten scheinen zu erkennen, dass das RBAC-Zeug die Dinge zu komplex gemacht hat, um sie zu verwalten. Sie sind nur bei Alpha, aber einen Blick wert: Helm 3, Alpha 1
Richard

1
Einverstanden, RBAC ist zunächst ein bisschen viel zu tun. Ich kämpfe immer noch damit, mache aber Fortschritte.
Coreyperkins

Ist die Erstellung von Persistent Volumes die Akzeptanzpraxis durch das Ruder? Sollten wir für diesen Fall auch eine andere Clusterrolle und Bindung erstellen?
Sawyer

20

Helm läuft mit "Standard" -Dienstkonto. Sie sollten Berechtigungen dafür bereitstellen.

Für schreibgeschützte Berechtigungen:

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

Für den Administratorzugriff: ZB: um Pakete zu installieren.

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

Nach dem Laufen kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:defaultund dann laufen helm listbekomme ich immer nochError: 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

und aktualisieren Sie dann die Helminstallation, um serviceAccount zu verwenden:

helm init --service-account tiller --upgrade


0

Beim Versuch, Pinne im Offline-Modus zu installieren, ist dieser Fehler aufgetreten. Ich dachte, das Dienstkonto "Pinne" habe nicht genügend Rechte, aber es stellte sich heraus, dass eine Netzwerkrichtlinie die Kommunikation zwischen Pinne und dem API-Server blockierte.

Die Lösung bestand darin, eine Netzwerkrichtlinie für die Pinne zu erstellen, die die gesamte Ausgangskommunikation der Pinne ermöglicht


0

export TILLER_NAMESPACE=<your-tiller-namespace>löste es für mich, wenn <your-tiller-namespace>nicht kube-system. Dies zeigt den Helm-Client auf den richtigen Tiller-Namespace.


0

Wenn Sie einen EKS-Cluster von AWS verwenden und mit dem verbotenen Problem konfrontiert sind ( z. B .: forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"Dann hat dies bei mir funktioniert:

Lösung:

  1. Stellen Sie sicher, dass Sie AWS konfiguriert haben
  2. Stellen Sie sicher, dass der konfigurierte Benutzer über die Berechtigung zum Zugriff auf den Cluster verfügt.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.