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エラーメッセージを修正する方法?
一度これらのコマンド:
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
実行された、問題は解決されました。
承認された回答は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
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
デフォルトのserviceaccountにはAPI権限がありません。 Helmにはサービスアカウントを割り当てる必要がある可能性があり、そのサービスアカウントにはAPI権限が与えられます。サービスアカウントに権限を付与する方法については、RBACのマニュアルを参照してください。 https://kubernetes.io/docs/admin/authorization/rbac/#service-account-permissions
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