Helm: エラー:インストールエラー:ユーザー "system:anonymous"は名前空間 "kube-system"にdeployments.extensionsを作成できません。: "ポリシーが一致しません。\ n不明なユーザー\" system:anonymous \ ""(postdeployments.extensions)

作成日 2017年07月08日  ·  3コメント  ·  ソース: helm/helm

こんにちは、

持ってる

ヘルム2.5.0
GCPでRBACが有効になっているKubernetes1.6

問題

kubectlとhelmを使用してコンテナで次のコマンドを実行します。

$ kubectl config set-credentials $K8S_USER --username=$K8S_USER --password=$K8S_PASS
$ kubectl config set-cluster test-cluster  --server=https://$K8S_SERVER --insecure-skip-tls- verify=$K8S_INSECURE_SKIP_TLS_VERIFY 
$ kubectl config set-context default-context --cluster=$K8S_CLUSTER_NAME --user=$K8S_USER 
$ kubectl config use-context default-context
$ kubectl cluster-info
Kubernetes master is running at https://****

$ helm init
$HELM_HOME has been configured at /config/.helm.
Error: error installing: User "system:anonymous" cannot create deployments.extensions in the namespace "kube-system".: "No policy matched.\nUnknown user \"system:anonymous\"" (post deployments.extensions)

質問

このエラーを修正するにはどうすればよいですか?

questiosupport

全てのコメント3件

チャートで要求されたオブジェクトをインストールできるようにするには、Tillerポッドのサービスアカウントに十分な権限をバインドする必要があります。 ポッドが実行されているのと同じ名前空間(この場合は「kube-system」)にTillerの新しいサービスアカウントを作成してから、チャートをインストールする名前空間に_Role_を作成するか、_ClusterRole_を作成するのが最善です。複数の名前空間間で定義を共有する場合は、_RoleBinding_または_ClusterRoleBinding_オブジェクトを作成して、前述のTiller固有のサービスアカウントにこれらのアクセス許可を付与します。

サービスアカウントとClusterRoleBinding定義を使用してマニフェストを作成しました

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
secrets:
  - tiller-secret
---
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: kube-system

次に、このサービスユーザーをTillerの仕様に追加しました

kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

次に、パイプラインマニフェストのk8sでauthのコマンドリストを変更しました。

begin_script:
  - echo "$CA" > /ca.crt
  - kubectl config set-cluster k8s-cluster --embed-certs=true --server=https://$K8S_SERVER --certificate-authority=/ca.crt
  - kubectl config set-credentials tiller --token=$USER_TOKEN
  - kubectl config set-context k8s-cluster --cluster=k8s-cluster --user=tiller
  - kubectl config use-context k8s-cluster 

$CA$USER_TOKEN -ca.crtデータとティラーユーザートークンを保存する秘密の変数です。

ca.crtとuser_tokenを取得するには、次のコマンドを使用します。

$ secret=$(kubectl get sa tiller -o json --namaspace=kube-system | jq -r .secrets[].name)
$ kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D # $CA
$ kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D # $USER_TOKEN

_helm init_は、コミット64e9e471838ac44e551c32abcbd19f671c80ecceの時点で--service-accountフラグを尊重することに注意してください。

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