helm list:名前空間「kube-system」のconfigmapをリストできません


108

helm 2.6.2をkubernetes 8クラスターにインストールしました。helm initうまくいきました。しかし、実行するhelm listとこのエラーが発生します。

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

このRABCエラーメッセージを修正する方法

回答:


228

これらのコマンドが実行されると:

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

実行された場合、問題は解決されました。


10
これはを割り当てることに注意してください。これ--clusterrole=cluster-adminにより、アクセス許可の問題は確実に修正されますが、必要な修正ではない場合があります。独自のサービスアカウント、(クラスター)ロール、(クラスター)ロールバインディングを必要な権限で作成することをお勧めします。
Curtis Mattoon 2018

2
The accepted answer gives full admin access to Helm which is not the best solution security wisestackoverflow.com/a/53277281/2777965を参照)。
030

1
「init」を実行する場合、「-upgrade」が必要ですが、他の質問では言及されていません。
天国で

私が走るkubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'と、次のよう になりますError from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick

36

より安全な回答

承認された回答はHelmへの完全な管理者アクセスを提供しますが、これはセキュリティに関して最良のソリューションではありません。もう少し作業することで、Helmの特定の名前空間へのアクセスを制限できます。詳細については、Helmのドキュメントをご覧ください。

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

Tillerが以下のtiller-worldようにすべてのリソースを管理できるようにするロールを定義します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: ["*"]

次に実行します:

$ kubectl create -f role-tiller.yaml
role "tiller-manager" created

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

次に実行します:

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

その後、実行helm initしてtiller-world名前空間にTillerをインストールできます。

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

すべてのコマンドの前に、--tiller-namespace tiller-worldまたはTILLER_NAMESPACE=tiller-world環境変数で設定します。

より多くの将来の証明の答え

Tillerの使用を停止します。Helm 3はTillerの必要性を完全に排除します。Helm 2を使用している場合は、を使用helm templateしてHelmチャートからyamlを生成し、実行kubectl applyしてオブジェクトをKubernetesクラスターに適用できます。

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

1
これを行ったら、すべてのhelmコマンドにプレフィックスを付ける--tiller-namespace tiller-worldTILLER_NAMESPACE=tiller-world、環境変数に設定する必要があります。
スパー、

1
将来の証明の回答に完全に同意します。実務担当者は、RBACのものが物事を複雑すぎて管理できないことに気づいたようです。アルファ版のみですが、一見の価値があります。ヘルム3、アルファ1
リチャード

1
同意します。RBACは、最初は手に入れるのに少し役立ちます。私はまだそれに苦労していますが、進歩しています。
coreyperkins

Persistent Volumesの作成は、ヘルムによる受け入れプラクティスですか?この場合のために、別のクラスターの役割とバインディングも作成する必要がありますか?
Sawyer

20

Helmは「デフォルト」のサービスアカウントで実行されます。あなたはそれに権限を与える必要があります。

読み取り専用権限の場合:

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

管理者アクセスの場合:例:パッケージをインストールします。

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

を実行した後kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:defaulthelm listそれでも実行しますError: configmaps is forbidden: User "system:serviceaccount:tiller:default" cannot list configmaps in the namespace "tiller": no RBAC policy matched
Magick '22


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

次に、helmインスタレーションを更新してserviceAccountを使用します。

helm init --service-account tiller --upgrade


0

ティラーをオフラインモードでインストールしようとしたときにこのエラーが発生しました。「tiller」サービスアカウントには十分な権限がないと思いましたが、ネットワークポリシーがティラーとapiサーバー間の通信をブロックしていることがわかりました。

解決策は、分げつのすべての下り通信を許可する分げつのネットワークポリシーを作成することでした。


0

export TILLER_NAMESPACE=<your-tiller-namespace>そう<your-tiller-namespace>でない場合、私のためにそれを解決しましたkube-system。これにより、Helmクライアントは正しいTiller名前空間を参照します。


0

AWSのEKSクラスターを使用していて、禁止されている問題に直面している場合(forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"これは私にとってはうまくいきました:

解決:

  1. AWSが構成されていることを確認します
  2. 構成されたユーザーがクラスターにアクセスする権限を持っていることを確認してください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.