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!
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.
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
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 :)
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:
Konsolenausgabe:
Führen Sie dann den folgenden Befehl aus, um ihn zu überprüfen: