Après la création d'un nouveau cluster GKE, la création d'un rôle de cluster a échoué avec l'erreur suivante:
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=[]
Mon compte dispose des autorisations suivantes dans IAM:
Kubernetes Engine Admin
Administrateur du cluster Kubernetes Engine
Propriétaire
Ceci est mon role.yaml
(des documents Kubernetes) :
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
Selon les documents RBAC de GCloud , je dois
créez un RoleBinding qui attribue à votre identité Google un rôle d'administrateur de cluster avant de tenter de créer des autorisations supplémentaires, à savoir Role ou ClusterRole.
Alors j'ai essayé ceci :
export GCP_USER=$(gcloud config get-value account | head -n 1)
kubectl create clusterrolebinding cluster-admin-binding
--clusterrole=cluster-admin --user=$GCP_USER
qui a réussi, mais je reçois toujours la même erreur lors de la création du rôle de cluster.
Des idées que je pourrais faire mal?
Selon Documents Google Container Engine , vous devez d'abord créer un RoleBinding qui vous octroie toutes les autorisations incluses dans le rôle que vous souhaitez créer.
$ gcloud info | grep Account
Account: [[email protected]]
$ kubectl create clusterrolebinding myname-cluster-admin-binding --clusterrole=cluster-admin [email protected]
Clusterrolebinding "myname-cluster-admin-binding" created
Maintenant, vous pouvez créer votre ClusterRole sans aucun problème.
J'ai trouvé la réponse dans CoreOS FAQ/Dépannage consultez-le pour plus d'informations.
C'est la bonne solution. Est-ce que GCP_USER obtenu est identique au nom d'utilisateur [email protected]
dans le message d'erreur de création de rôle?
Le commentaire de S.Heutmaker m’a amené à la solution.
Pour moi, la solution consistait à créer la liaison admin-cluster avec le casse correct de l'adresse électronique. Vérifiez le boîtier dans le message d'erreur ou la console IAM google cloud
$ kubectl create clusterrolebinding myname-cluster-admin-binding --clusterrole=cluster-admin [email protected]
Si le cas est correct, essayez d’ajouter les deux variantes de domaine googlemail (c.-à-d. @gmail.com
et @googlemail.com
). Pour moi, gcloud info | grep Account
a renvoyé <name>@googlemail.com
, mais je devais créer une liaison clusterrole avec <name>@gmail.com
pour que la commande fonctionne.