Helm: ユーザー「system:serviceaccount:kube-system:default」は、名前空間「default」の名前空間を取得できません

作成日 2017年11月12日  ·  30コメント  ·  ソース: helm/helm

ヘルムパッケージをインストールすると、次のようなエラーが発生しました。

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

これが私の舵のバージョンです:

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

そして私の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"}

どんな助けでもありがたいです、どうもありがとう!

questiosupport

最も参考になるコメント

これは、耕うん機を展開する権限がないためです。そのためのアカウントを追加してください。

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

コンソール出力:

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

次に、以下のコマンドを実行して確認します。

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

全てのコメント30件

特権に関連する問題が発生したようです。
チャートを展開するときに、でrbacを有効にすることができます。

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

@ flyer103

それでも動作しません。
image

ここでも同じ問題があります。 rbacを有効にしても役に立ちません。

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

助けていただければ幸いです!

あなたがする必要があるのは、デフォルトの名前空間にリソースをインストールするためのアクセス権を(デフォルトのサービスアカウントを介して)ティラーに付与することです。 https://github.com/kubernetes/helm/blob/master/docs/service_accounts.mdを参照して

こんにちは、@ bacongobbler
手伝ってくれてありがとう。 私は上記のあなたの指示に従います、そして私は以下のことをしました:
まず、ティラーをリセットします。

helm reset --force

これを行った後、RBACyamlファイルを作成します。

[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

そして、私の耕うん機を初期化します:

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

ただし、耕うん機は正常にインストールされていません。

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

そして、 kube-system名前空間でのデプロイメントは次のように縫います:

[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

この問題を解決する方法について何かアイデアはありますか?
前もって感謝します!

@nopromこれを試してください

耕うん機の展開を手動で削除する

耕うん機用にこれらのrbac構成を作成します

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

そのrbac構成でdelete(yes delete)を実行します
もう一度作成を実行します
次に、helm init--upgradeを実行して置き換えます

これ以上エラーは発生しないはずです。

@innovia
すごい! おかげで、私はこの問題を解決しました。
どうもありがとう!

お力になれて、嬉しいです :)

@innovia
素晴らしい投稿です!😄

ありがとう!

上記は機能しません

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

これは、耕うん機を展開する権限がないためです。そのためのアカウントを追加してください。

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

コンソール出力:

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

次に、以下のコマンドを実行して確認します。

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

@ykfqトンありがとう、それは動作します! しかし、新しいクラスターにデプロイするたびに、これを行う必要がありますか? なんて不便!

@ antran89
公式の耕うん機の設置手順を使用する場合は、次の

  • 耕うん機のサービスアカウントを作成する
  • 上で作成したServiceAccoutのロールをバインドします(cluster-adminロールが必要です)
  • ServiceAccoutのClusterRoleBindingを作成します
  • helm initを使用するときに作成されたデプロイメントにパッチを適用します

したがって、それを簡単にする別の方法があります-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: ""

次に、リソースを作成します。

kubectl create -f tiller.yaml

必ずサービスを確認してください。

上記のyamlコンテンツは、次のコマンドを使用して、実行中のクラスターからエクスポートされました。

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

このyamlはまだテストされていません。質問がある場合は、コメントしてください。

@ykfq Tillerに完全なクラスター管理者権限を与えるというアイデアは好きではありませんが、他に何も機能しませんでした。 この例に従って

しかし、常にこの問題に遭遇しました(コンコースを展開していました):

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"

その特定の例を機能させる方法についてのアイデアはありますか? いくつかのパラメーターを変更しました。RBACを使用したYAML全体は次のとおりです。

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-accounttiler

@brunoban helm v3はティラーを削除するので、私が理解したことから、パーミッションはそれを適用するユーザーによってなります

@innoviaああ...私はそれを知りませんでした。 それでは、今すぐスピードを上げようとします。 ありがとう!

次に、helm init--upgradeを実行して置き換えます

@innovia rbac設定ファイルをどこに置くか?

@cjbottaro名前空間ごとにヘルムとティラーを設定するためにHwoを書いた投稿を読みましたか?

私はあなたの質問に従わない、あなたは再説明してもらえますか?

@innovia Nevermind、私はそれを理解しました。 ただ走らなければならなかった

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

これは私のために働いた:

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

「名前空間にTillerをデプロイし、その名前空間にのみリソースをデプロイするように制限する」の公式Helmドキュメントに従っています。 これが私の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"

helm upgradeを実行すると、次のエラーが発生します。

エラー:アップグレードに失敗しました:configmapsは禁止されています:ユーザー " system:serviceaccount :kube- system:default "は名前空間 "kube-system"のconfigmapsを一覧表示できません

公式ドキュメントにバグはありますか? 私はそれを間違って読んだことがありますか?

helm initの完全なコマンドは何でしたか? 別のチケットを開いていただけませんか?

@bacongobbler問題をここに移動https://github.com/helm/helm/issues/4933

上記は機能しません

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

以下のコマンドに従ってください

helm init --service-account tiller --upgrade -i Registry.cn-hangzhou.aliyuncs.com/google_containers/ tiller https://kubernetes.oss-cn-hangzhou.aliyuncs .com / charts

あなたがする必要があるのは、デフォルトの名前空間にリソースをインストールするためのアクセス権を(デフォルトのサービスアカウントを介して)ティラーに付与することです。 https://github.com/kubernetes/helm/blob/master/docs/service_accounts.mdを参照して

ファイル名はrbac.mdなり、リンクはhttps://github.com/helm/helm/blob/master/docs/rbac.mdにあります。

これは、耕うん機を展開する権限がないためです。そのためのアカウントを追加してください。

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

コンソール出力:

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

次に、以下のコマンドを実行して確認します。

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

耕うん機の設置ドキュメントがこれらの正確な手順で更新されれば素晴らしいでしょう
私は次の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

私が正しければ、このyamlにtiller deploymentがありませんでしたか?

helm init --upgrade --service-accounttiler

上記のコマンドはこの問題を修正します。最初はこの手順を強くお勧めします:)

このページは役に立ちましたか?
0 / 5 - 0 評価