web-dev-qa-db-ja.com

helm list:ネームスペース "kube-system"の設定マップを一覧表示できません

Kubernetes 8クラスタにhelm 2.6.2をインストールしました。 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エラーメッセージを修正する方法?

75
sfgroups

一度これらのコマンド:

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

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

174
sfgroups

より安全な回答

承認された回答は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
21

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
17
suresh Palemoni

デフォルトのserviceaccountにはAPI権限がありません。 Helmにはサービスアカウントを割り当てる必要がある可能性があり、そのサービスアカウントにはAPI権限が与えられます。サービスアカウントに権限を付与する方法については、RBACのマニュアルを参照してください。 https://kubernetes.io/docs/admin/authorization/rbac/#service-account-permissions

3
Jordan Liggitt
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

次に、ヘルムのインストールを更新してserviceAccountを使用します。

helm init --service-account tiller --upgrade