web-dev-qa-db-ja.com

私が所有者お​​よび管理者であるにもかかわらず、GKEでクラスターの役割を作成できません

新しいGKEクラスターを作成した後、クラスターロールの作成が失敗し、次のエラーが発生しました。

Error from server (Forbidden): error when creating "./role.yaml":
clusterroles.rbac.authorization.k8s.io "secret-reader" is forbidden: 
attempt to grant extra privileges: [PolicyRule{Resources:["secrets"], 
APIGroups:[""], Verbs:["get"]} PolicyRule{Resources:["secrets"], 
APIGroups:[""], Verbs:["watch"]} PolicyRule{Resources:["secrets"], 
APIGroups:[""], Verbs:["list"]}] user=&{[email protected]  
[system:authenticated] map[authenticator:[GKE]]} ownerrules= . 
[PolicyRule{Resources:["selfsubjectaccessreviews" 
"selfsubjectrulesreviews"], APIGroups:["authorization.k8s.io"], Verbs: 
["create"]} PolicyRule{NonResourceURLs:["/api" "/api/*" "/apis" 
"/apis/*" "/healthz" "/swagger-2.0.0.pb-v1" "/swagger.json" 
"/swaggerapi" "/swaggerapi/*" "/version"], Verbs:["get"]}] 
ruleResolutionErrors=[]

私のアカウントには、IAMで次の権限があります。

KubernetesEngine管理者

KubernetesEngineクラスター管理者

オーナー

これは私の role.yamlKubernetesドキュメント)から

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

GCloudのRBACドキュメント によると、私はする必要があります

追加のRoleまたはClusterRole権限を作成する前に、GoogleIDにcluster-adminロールを与えるRoleBindingを作成します。

だから私は試しました this

export GCP_USER=$(gcloud config get-value account | head -n 1)
kubectl create clusterrolebinding cluster-admin-binding
--clusterrole=cluster-admin --user=$GCP_USER

これは成功しましたが、クラスターの役割を作成するときに同じエラーが発生します。

私が間違っているかもしれないアイデアはありますか?

12

Google Container Engine docs によると、最初に、作成するロールに含まれるすべての権限を付与するRoleBindingを作成する必要があります。

現在のGoogleIDを取得する

$ gcloud info | grep Account

Account: [[email protected]]

現在のIDにcluster-adminを付与します

$ kubectl create clusterrolebinding myname-cluster-admin-binding --clusterrole=cluster-admin [email protected]

Clusterrolebinding "myname-cluster-admin-binding" created

これで、ClusterRoleを問題なく作成できます。

CoreOSで答えを見つけました FAQ /トラブルシューティング 詳細についてはチェックしてください。

@ S.Heutmakerのコメントが私を解決策に導きました。

私にとっての解決策は、電子メールアドレスに正しい大文字と小文字を使用してcluster-admin-bindingを作成することでした。エラーメッセージまたはGoogleCloud ConsoleIAMの大文字小文字を確認してください

$ kubectl create clusterrolebinding myname-cluster-admin-binding --clusterrole=cluster-admin [email protected]
3
RauBan

それが正しい解決策です。取得したGCP_USERは、ロール作成エラーメッセージの[email protected]ユーザー名と同じですか?

1
Jordan Liggitt

大文字と小文字を正しく区別した場合は、両方のgooglemailドメインバリアント(つまり、@gmail.com@googlemail.com)を追加してみてください。私の場合、gcloud info | grep Account<name>@googlemail.comを返しましたが、コマンドを機能させるには、<name>@gmail.comを使用してclusterroleバインディングを作成する必要がありました。

0
lordvlad