Helm: L'utilisateur "system: serviceaccount: kube-system: default" ne peut pas obtenir les espaces de noms dans l'espace de noms "default"

Créé le 12 nov. 2017  ·  30Commentaires  ·  Source: helm/helm

Lors de l'installation d'un package helm, j'ai l'erreur suivante comme celle-ci:

[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"

Voici ma version de la barre:

[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"}

Et ma version kubectl:

[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"}

Toute aide sera appréciée, merci beaucoup!

questiosupport

Commentaire le plus utile

C'est parce que vous n'avez pas l'autorisation de déployer la barre, ajoutez un compte pour cela:

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"}}}}' 

Sortie de la console:

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

Ensuite, exécutez la commande ci-dessous pour le vérifier:

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

Tous les 30 commentaires

Il semble que vous ayez rencontré un problème lié aux privilèges.
Vous pouvez activer rbac lors du déploiement du graphique:

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

@ flyer103

Cela ne peut toujours pas fonctionner.
image

Même problème ici. L'activation de rbac n'aide pas.

$ 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"

Une aide serait vraiment appréciée!

Ce que vous devez faire est d'accorder à tiller (via le compte de service par défaut) l'accès pour installer les ressources dans l'espace de noms par défaut. Voir https://github.com/kubernetes/helm/blob/master/docs/service_accounts.md

Salut, @bacongobbler
Merci pour l'aide. Je suis vos instructions mentionnées ci-dessus et j'ai fait les choses suivantes:
Tout d'abord, je réinitialise le timon:

helm reset --force

Après cela, je crée un fichier yaml RBAC:

[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

Et puis lancez ma barre:

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

Cependant, le timon n'est pas installé avec succès:

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

Et je coud les déploiements dans l'espace kube-system noms

[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

Des idées sur la façon de résoudre ce problème?
Merci d'avance!

@noprom essayez ceci

supprimer le déploiement de la barre manuellement

créer ces config rbac pour tiller

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: ""

exécuter delete (oui supprimer) sur cette configuration rbac
exécuter à nouveau créer
puis exécutez helm init --upgrade pour remplacer

vous ne devriez plus avoir d'erreurs.

@innovia
Génial! Merci, j'ai résolu ce problème.
Merci beaucoup!

Heureux d'aider :)

@noprom s'il vous plaît vérifier mon message sur la façon de configurer la barre et la barre avec rbac par espace de noms

@innovia
Post fantastique! 😄

Merci!

ce qui précède ne fonctionne toujours pas

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

C'est parce que vous n'avez pas l'autorisation de déployer la barre, ajoutez un compte pour cela:

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"}}}}' 

Sortie de la console:

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

Ensuite, exécutez la commande ci-dessous pour le vérifier:

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

@ykfq Merci beaucoup, ça marche! Mais à chaque fois que nous déployons sur un nouveau cluster, nous devons le faire? Quel inconvénient!

@ antran89
Si vous utilisez les instructions d'installation officielles du

  • Créer un compte de service pour la barre franche
  • Lier un rôle pour le ServiceAccout créé ci-dessus (le rôle d'administrateur de cluster est nécessaire)
  • Créer un ClusterRoleBinding pour ServiceAccout
  • Corrigez le déploiement créé lors de l'utilisation de helm init

Donc, il existe un autre moyen de le rendre plus facile - installer via un fichier yaml:

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: ""

Créez ensuite les ressources:

kubectl create -f tiller.yaml

Assurez-vous de vérifier votre service.

le contenu yaml ci-dessus a été exporté à partir d'un cluster en cours d'exécution, à l'aide de la commande:

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

Ce yaml n'a pas encore testé, si vous avez des questions, faites un commentaire.

@ykfq Je n'aime pas l'idée de donner à Tiller les privilèges d'administrateur complets du cluster, mais rien d'autre n'a fonctionné pour moi. J'ai essayé de suivre cet exemple . J'essayais de restreindre Tiller à n'agir que sur les espaces de noms, je l'ai laissé agir.

Mais toujours rencontré ce problème (déployait Concourse):

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"

Des idées sur la façon de faire fonctionner cet exemple spécifique? J'ai changé certains paramètres, tout le YAML avec les RBAC était celui-ci:

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 - tiller de compte de service

@brunoban helm v3 supprimera le motoculteur, donc d'après ce que j'ai compris, les autorisations seront

@innovia Oh ... je ne le savais pas. Je vais essayer de me mettre au courant maintenant. Merci!

puis exécutez helm init --upgrade pour remplacer

@innovia Où mettre le fichier de configuration rbac?

@cjbottaro avez-vous lu le message que j'ai écrit Hwo pour configurer la barre et la barre par espace de noms ?

Je ne suis pas votre question, pouvez-vous s'il vous plaît re-expliquer?

@innovia Nevermind, je l'ai compris. Je devais juste courir

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

cela a fonctionné pour moi:

kubectl --namespace kube-system create serviceaccount tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount = kube- system: tiller
helm init - tiller de compte de service --upgrade

Je suis la documentation officielle de Helm pour "Déployer Tiller dans un espace de noms, limité au déploiement de ressources uniquement dans cet espace de noms". Voici mon script bash:

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"

L'exécution de helm upgrade me donne l'erreur suivante:

Erreur: ECHEC DE LA MISE A NIVEAU: les configmaps sont interdites: l'utilisateur " system: serviceaccount : kube- system: default " ne peut pas lister les configmaps dans l'espace de noms "kube-system"

Y a-t-il un bug dans la documentation officielle? Ai-je mal lu?

Quelle était la commande complète pour helm init ? Pouvez-vous s'il vous plaît ouvrir un ticket séparé pour cela?

@bacongobbler Problème déplacé ici https://github.com/helm/helm/issues/4933

ce qui précède ne fonctionne toujours pas

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

Suivez la commande ci-dessous

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 / graphiques

Ce que vous devez faire est d'accorder à tiller (via le compte de service par défaut) l'accès pour installer les ressources dans l'espace de noms par défaut. Voir https://github.com/kubernetes/helm/blob/master/docs/service_accounts.md

Le nom du fichier est maintenant rbac.md et le lien est à https://github.com/helm/helm/blob/master/docs/rbac.md.

C'est parce que vous n'avez pas l'autorisation de déployer la barre, ajoutez un compte pour cela:

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"}}}}' 

Sortie de la console:

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

Ensuite, exécutez la commande ci-dessous pour le vérifier:

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

Ce serait formidable si les documents d'installation du timon étaient mis à jour avec ces instructions précises
J'ai eu le yaml suivant

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

Si j'ai raison, il me manquait le tiller deployment dans ce yaml?

helm init --upgrade - tiller de compte de service

La commande ci-dessus résout ce problème, recommande vivement cette étape dans un premier temps :)

Cette page vous a été utile?
0 / 5 - 0 notes