回答:
これらのコマンドが実行されると:
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
実行された場合、問題は解決されました。
The accepted answer gives full admin access to Helm which is not the best solution security wise
(stackoverflow.com/a/53277281/2777965を参照)。
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
と、次のよう になりますError from server (NotFound): deployments.extensions "tiller-deploy" not found
承認された回答は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
--tiller-namespace tiller-world
かTILLER_NAMESPACE=tiller-world
、環境変数に設定する必要があります。
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:default
、helm list
それでも実行しますError: configmaps is forbidden: User "system:serviceaccount:tiller:default" cannot list configmaps in the namespace "tiller": no RBAC policy matched
デフォルトの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
次に、helmインスタレーションを更新してserviceAccountを使用します。
helm init --service-account tiller --upgrade
AWSのEKSクラスターを使用していて、禁止されている問題に直面している場合(例:forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"
これは私にとってはうまくいきました:
解決:
--clusterrole=cluster-admin
により、アクセス許可の問題は確実に修正されますが、必要な修正ではない場合があります。独自のサービスアカウント、(クラスター)ロール、(クラスター)ロールバインディングを必要な権限で作成することをお勧めします。