Helm: Benutzer "system: serviceaccount: kube-system: default" kann keine Namespaces im Namespace "default" abrufen.

Erstellt am 12. Nov. 2017  ·  30Kommentare  ·  Quelle: helm/helm

Bei der Installation eines Helmpakets wurde der folgende Fehler angezeigt:

[root@k8s-master3 ~]# helm install --name nginx stable/nginx-ingress
Error: release nginx failed: namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default"

Hier ist meine Steuerversion:

[root@k8s-master3 ~]# helm version
Client: &version.Version{SemVer:"v2.7.0", GitCommit:"08c1144f5eb3e3b636d9775617287cc26e53dba4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.7.0", GitCommit:"08c1144f5eb3e3b636d9775617287cc26e53dba4", GitTreeState:"clean"}

Und meine Kubectl-Version:

[root@k8s-master3 ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"8+", GitVersion:"v1.8.1-alicloud", GitCommit:"19408ab2a1b736fe97a9d9cf24c6fb228f23f12f", GitTreeState:"clean", BuildDate:"2017-10-19T04:05:24Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.1", GitCommit:"f38e43b221d08850172a9a4ea785a86a3ffa3b3a", GitTreeState:"clean", BuildDate:"2017-10-11T23:16:41Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}

Jede Hilfe wird geschätzt, vielen Dank!

questiosupport

Hilfreichster Kommentar

Das liegt daran, dass Sie nicht über die Berechtigung zum Bereitstellen von Pinne verfügen. Fügen Sie ein Konto dafür hinzu:

kubectl --namespace kube-system create serviceaccount tiller

kubectl create clusterrolebinding tiller-cluster-rule \
 --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

kubectl --namespace kube-system patch deploy tiller-deploy \
 -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' 

Konsolenausgabe:

serviceaccount "tiller" created
clusterrolebinding "tiller-cluster-rule" created
deployment "tiller-deploy" patched

Führen Sie dann den folgenden Befehl aus, um ihn zu überprüfen:

helm list
helm repo update
helm install --name nginx-ingress stable/nginx-ingress

Alle 30 Kommentare

Es scheint, dass Sie auf ein Problem im Zusammenhang mit Berechtigungen gestoßen sind.
Sie können rbac in aktivieren, wenn Sie das Diagramm bereitstellen:

$ helm install --name nginx --set rbac.create=true stable/nginx-ingress

@ flyer103

Es kann immer noch nicht funktionieren.
image

Selbes Problem hier. Das Aktivieren von rbac hilft nicht.

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.3", GitCommit:"f0efb3cb883751c5ffdbe6d515f3cb4fbe7b7acd", GitTreeState:"clean", BuildDate:"2017-11-10T13:17:12Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.2", GitCommit:"bdaeafa71f6c7c04636251031f93464384d54963", GitTreeState:"clean", BuildDate:"2017-10-24T19:38:10Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}

$ helm install --name my-hdfs-namenode hdfs-namenode-k8s
Error: release my-hdfs-namenode failed: namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default"

Hilfe wäre wirklich dankbar!

Sie müssen der Pinne (über das Standarddienstkonto) Zugriff gewähren, um Ressourcen im Standardnamespace zu installieren. Siehe https://github.com/kubernetes/helm/blob/master/docs/service_accounts.md

Hallo, @bacongobbler
Danke für die Hilfe. Ich folge Ihren oben genannten Anweisungen und habe die folgenden Dinge getan:
Zunächst setze ich die Pinne zurück:

helm reset --force

Danach erstelle ich eine RBAC-Yaml-Datei:

[root@k8s-master3 ~]# cat rbac-config.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: default

Und dann meine Pinne einweihen:

helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.7.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

Die Pinne ist jedoch nicht erfolgreich installiert:

[root@k8s-master3 ~]# helm version
Client: &version.Version{SemVer:"v2.7.0", GitCommit:"08c1144f5eb3e3b636d9775617287cc26e53dba4", GitTreeState:"clean"}
Error: cannot connect to Tiller

Und ich nähe die Bereitstellungen im Namespace kube-system wie folgt:

[root@k8s-master3 ~]# kubectl get deployments --all-namespaces
NAMESPACE     NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
ci            jenkins                    1         1         1            1           5d
default       redis-master               1         1         1            0           4d
kube-system   default-http-backend       1         1         1            1           5d
kube-system   heapster                   1         1         1            1           5d
kube-system   kube-dns                   1         1         1            1           5d
kube-system   kubernetes-dashboard       1         1         1            1           5d
kube-system   monitoring-influxdb        1         1         1            1           5d
kube-system   nginx-ingress-controller   1         1         1            1           5d
kube-system   tiller-deploy              1         0         0            0           9m

Irgendwelche Ideen, wie man dieses Problem löst?
Danke im Voraus!

@noprom versuchen Sie dies

Löschen Sie den Einsatz der Pinne manuell

Erstellen Sie diese Rbac-Konfiguration für Pinne

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: ""

Führen Sie delete (yes delete) für diese rbac-Konfiguration aus
Führen Sie create erneut aus
Führen Sie dann helm init --upgrade aus, um es zu ersetzen

Sie sollten keine Fehler mehr haben.

@innovia
Groß! Danke, ich habe dieses Problem gelöst.
Vielen Dank!

Freue mich zu helfen :)

@noprom Bitte überprüfen Sie meinen Beitrag, wie man Helm und Pinne mit rbac pro Namespace einrichtet

@innovia
Fantastischer Beitrag! 😄

Vielen Dank!

das obige funktioniert nicht Immer noch

namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default"

Das liegt daran, dass Sie nicht über die Berechtigung zum Bereitstellen von Pinne verfügen. Fügen Sie ein Konto dafür hinzu:

kubectl --namespace kube-system create serviceaccount tiller

kubectl create clusterrolebinding tiller-cluster-rule \
 --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

kubectl --namespace kube-system patch deploy tiller-deploy \
 -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' 

Konsolenausgabe:

serviceaccount "tiller" created
clusterrolebinding "tiller-cluster-rule" created
deployment "tiller-deploy" patched

Führen Sie dann den folgenden Befehl aus, um ihn zu überprüfen:

helm list
helm repo update
helm install --name nginx-ingress stable/nginx-ingress

@ykfq Vielen Dank, es funktioniert! Aber jedes Mal, wenn wir in einem neuen Cluster bereitstellen, müssen wir dies tun? Was für eine Unannehmlichkeit!

@ antran89
Wenn Sie die offizielle Installationsanleitung für die

  • Erstellen Sie ein Wartungskonto für die Pinne
  • Binden Sie eine Rolle für das oben erstellte ServiceAccout (Cluster-Administratorrolle erforderlich).
  • Erstellen Sie eine ClusterRoleBinding für ServiceAccout
  • Patchen Sie die Bereitstellung, die bei Verwendung von helm init

Es gibt also noch eine andere Möglichkeit, es einfacher zu machen - die Installation über eine Yaml-Datei:

vim tiller.yaml

apiVersion: v1
kind: Service
metadata:
  name: tiller-deploy
  namespace: kube-system
  labels:
    app: helm
    name: tiller
spec:
  ports:
  - name: tiller
    port: 44134
    protocol: TCP
    targetPort: tiller
  selector:
    app: helm
    name: tiller
  type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tiller-deploy
  namespace: kube-system
  labels:
    app: helm
    name: tiller
  annotations:
    deployment.kubernetes.io/revision: "5"
spec:
  replicas: 1
  selector:
    matchLabels:
      app: helm
      name: tiller
  template:
    metadata:
      labels:
        app: helm
        name: tiller
    spec:
      containers:
      - env:
        - name: TILLER_NAMESPACE
          value: kube-system
        - name: TILLER_HISTORY_MAX
          value: "0"
        name: tiller
        image: gcr.io/kubernetes-helm/tiller:v2.8.2
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 44134
          name: tiller
          protocol: TCP
        - containerPort: 44135
          name: http
          protocol: TCP
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /liveness
            port: 44135
            scheme: HTTP
          initialDelaySeconds: 1
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /readiness
            port: 44135
            scheme: HTTP
          initialDelaySeconds: 1
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      serviceAccount: tiller
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-cluster-rule
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: ""

Dann erstellen Sie die Ressourcen:

kubectl create -f tiller.yaml

Stellen Sie sicher, dass Sie Ihren Service überprüfen.

Der obige Yaml-Inhalt wurde mit dem folgenden Befehl aus einem laufenden Cluster exportiert:

kubectl -n kube-system get svc tiller-deploy -o=yaml
kubectl -n kube-system get deploy tiller-deploy -o=yaml
kubectl -n kube-system get sa tiller -o=yaml
kubectl -n kube-system get clusterrolebinding tiller-cluster-rule -o=yaml

Dieses Yaml wurde noch nicht getestet. Wenn Sie Fragen haben, geben Sie einen Kommentar ab.

@ykfq Ich mag die Idee nicht, Tiller volle Cluster-Administratorrechte zu gewähren, aber nichts anderes hat für mich funktioniert. Ich habe versucht, diesem Beispiel zu folgen. Ich habe versucht, Tiller darauf zu beschränken, nur auf Namespaces zu reagieren, die ich zugelassen habe.

Aber immer auf dieses Problem gestoßen (war Concourse bereitstellen):

Error: release concourse failed: namespaces "concourse" is forbidden: User "system:serviceaccount:tiller-system:tiller-user" cannot get namespaces in the namespace "concourse": Unknown user "system:serviceaccount:tiller-system:tiller-user"

Irgendwelche Ideen, wie dieses spezielle Beispiel funktionieren kann? Ich habe einige Parameter geändert, die gesamte YAML mit RBACs war diese:

apiVersion: v1
kind: Namespace
metadata:
  name: tiller-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller-user
  namespace: tiller-system
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-manager
  namespace: tiller-system
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["configmaps"]
  verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-binding
  namespace: tiller-system
subjects:
- kind: ServiceAccount
  name: tiller-user
  namespace: tiller-system
roleRef:
  kind: Role
  name: tiller-manager
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: Namespace
metadata:
  name: concourse
---
apiVersion: v1
kind: Namespace
metadata:
  name: concourse-main
----
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-concourse-role
  namespace: concourse
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-concourse-namespace-role
  namespace: concourse
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["namespaces"]
  verbs: ["*"]
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-concourse-main-role
  namespace: concourse-main
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-concourse-main-role
subjects:
- kind: ServiceAccount
  name: tiller-user
  namespace: tiller-system
roleRef:
  kind: Role
  name: tiller-concourse-main-role
  apiGroup: rbac.authorization.k8s.io
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-concourse-role
subjects:
- kind: ServiceAccount
  name: tiller-user
  namespace: tiller-system
roleRef:
  kind: Role
  name: tiller-concourse-role
  apiGroup: rbac.authorization.k8s.io
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-concourse-namespace-role
subjects:
- kind: ServiceAccount
  name: tiller-user
  namespace: tiller-system
roleRef:
  kind: Role
  name: tiller-concourse-namespace-role
  apiGroup: rbac.authorization.k8s.io

helm init --upgrade --service-account pinne

@brunoban helm v3 entfernt die Pinne, so wie ich es verstanden habe, werden die Berechtigungen von dem Benutzer erteilt, der sie anwendet

@innovia Oh ... das wusste ich nicht. Ich werde jetzt versuchen, mich auf den neuesten Stand zu bringen. Vielen Dank!

Führen Sie dann helm init --upgrade aus, um es zu ersetzen

@innovia Wo soll die rbac-Konfigurationsdatei abgelegt werden?

@cjbottaro hast du den Beitrag gelesen, den ich Hwo geschrieben habe, um Helm und Pinne pro Namespace einzurichten ?

Ich folge Ihrer Frage nicht. Können Sie das bitte noch einmal erklären?

@innovia Nevermind, ich habe es herausgefunden. Musste einfach rennen

kubectl create -f tiller.yaml
helm init --upgrade --service-account tiller

das hat bei mir funktioniert:

kubectl --namespace kube-system erstellt serviceaccount tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount = kube- system: tiller
helm init --service-account pinne --upgrade

Ich folge der offiziellen Helm- Dokumentation für "Tiller in einem Namespace bereitstellen, beschränkt auf die Bereitstellung von Ressourcen nur in diesem Namespace". Hier ist mein Bash-Skript:

Namespace="$1"

kubectl create namespace $Namespace
kubectl create serviceaccount "tiller-$Namespace" --namespace $Namespace
kubectl create role "tiller-role-$Namespace" /
    --namespace $Namespace /
    --verb=* /
    --resource=*.,*.apps,*.batch,*.extensions
kubectl create rolebinding "tiller-rolebinding-$Namespace" /
    --namespace $Namespace /
    --role="tiller-role-$Namespace" /
    --serviceaccount="$Namespace:tiller-$Namespace"

Wenn ich helm upgrade ausführe, erhalte ich den folgenden Fehler:

Fehler: UPGRADE FAILED: configmaps ist verboten: Benutzer " system: serviceaccount: kube- system: default " kann configmaps nicht im Namespace "kube-system" auflisten.

Gibt es einen Fehler in der offiziellen Dokumentation? Habe ich es falsch gelesen

Was war der vollständige Befehl für helm init ? Können Sie bitte ein separates Ticket dafür eröffnen?

@bacongobbler Ausgabe hier verschoben https://github.com/helm/helm/issues/4933

das obige funktioniert nicht Immer noch

namespaces "default" is forbidden: User "system:serviceaccount:kube-system:default" cannot get namespaces in the namespace "default"

Befolgen Sie den folgenden Befehl: -

helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/ tiller: v2.14.0 --stable-repo-url https: //kubernetes.oss-cn-hangzhou.aliyuncs .com / Charts

Sie müssen der Pinne (über das Standarddienstkonto) Zugriff gewähren, um Ressourcen im Standardnamespace zu installieren. Siehe https://github.com/kubernetes/helm/blob/master/docs/service_accounts.md

Der Dateiname lautet jetzt rbac.md und der Link befindet sich unter https://github.com/helm/helm/blob/master/docs/rbac.md.

Das liegt daran, dass Sie nicht über die Berechtigung zum Bereitstellen von Pinne verfügen. Fügen Sie ein Konto dafür hinzu:

kubectl --namespace kube-system create serviceaccount tiller

kubectl create clusterrolebinding tiller-cluster-rule \
 --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

kubectl --namespace kube-system patch deploy tiller-deploy \
 -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' 

Konsolenausgabe:

serviceaccount "tiller" created
clusterrolebinding "tiller-cluster-rule" created
deployment "tiller-deploy" patched

Führen Sie dann den folgenden Befehl aus, um ihn zu überprüfen:

helm list
helm repo update
helm install --name nginx-ingress stable/nginx-ingress

Es wäre großartig, wenn die Installationsdokumente für die Pinne mit diesen genauen Anweisungen aktualisiert würden
Ich hatte das folgende Yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: ""
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

Wenn ich richtig bin, habe ich die tiller deployment in diesem Yaml vermisst?

helm init --upgrade --service-account pinne

Der obige Befehl behebt dieses Problem. Ich kann diesen Schritt zunächst nur empfehlen :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen