3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GKE上にデプロイしたkube-legoの"attempt to grant extra privileges"エラーに対処する

Posted at

kube-legoとは

KubernetesのIngressを利用して、Let's Encryptの証明書の自動適用を行うことができます。
これを用いることで、サービス側のファイルや設定にほぼ手を加えずにHTTPS化を行うことができます。

Unknown userエラー

クラスターのバージョンを上げた影響で発生するようになりました。
私は1.9.4-gke.1を使用しましたが、おそらく1.8系くらいから発生するようになっていると思います。

デプロイの詳細は省きます(公式リポジトリを参照)が、クラスタを立ち上げた直後にデプロイを行おうとすると以下のエラーが表示され、ClusterRoleリソースがデプロイできませんでした。

$ kubectl apply -f stage.yaml
... created
... created
ingress "kube-lego-ingress" created
clusterrolebinding "kube-lego" created
configmap "kube-lego" created
deployment "kube-lego" created
serviceaccount "kube-lego" created
Error from server (Forbidden): error when creating "stage.yaml": clusterroles.rbac.authorization.k8s.io "kube-lego" is forbidden: attempt to grant extra privileges: [PolicyRule{Resources:["pods"], APIGroups:[""], Verbs:["get"]} PolicyRule{Resources:["pods"], APIGroups:[""], Verbs:["list"]} PolicyRule{Resources:["services"], APIGroups:[""], Verbs:["create"]} PolicyRule{Resources:["services"], APIGroups:[""], Verbs:["get"]} PolicyRule{Resources:["services"], APIGroups:[""], Verbs:["delete"]} PolicyRule{Resources:["services"], APIGroups:[""], Verbs:["update"]} PolicyRule{Resources:["endpoints"], APIGroups:[""], Verbs:["create"]} PolicyRule{Resources:["endpoints"], APIGroups:[""], Verbs:["get"]} PolicyRule{Resources:["endpoints"], APIGroups:[""], Verbs:["delete"]} PolicyRule{Resources:["endpoints"], APIGroups:[""], Verbs:["update"]} PolicyRule{Resources:["ingresses"], APIGroups:["extensions"], Verbs:["get"]} PolicyRule{Resources:["ingresses"], APIGroups:["extensions"], Verbs:["update"]} PolicyRule{Resources:["ingresses"], APIGroups:["extensions"], Verbs:["create"]} PolicyRule{Resources:["ingresses"], APIGroups:["extensions"], Verbs:["list"]} PolicyRule{Resources:["ingresses"], APIGroups:["extensions"], Verbs:["patch"]} PolicyRule{Resources:["ingresses"], APIGroups:["extensions"], Verbs:["delete"]} PolicyRule{Resources:["ingresses"], APIGroups:["extensions"], Verbs:["watch"]} PolicyRule{Resources:["endpoints"], APIGroups:[""], Verbs:["get"]} PolicyRule{Resources:["endpoints"], APIGroups:[""], Verbs:["create"]} PolicyRule{Resources:["endpoints"], APIGroups:[""], Verbs:["update"]} PolicyRule{Resources:["secrets"], APIGroups:[""], Verbs:["get"]} PolicyRule{Resources:["secrets"], APIGroups:[""], Verbs:["create"]} PolicyRule{Resources:["secrets"], APIGroups:[""], Verbs:["update"]}] user=&{h.sakano@world-bit.co.jp  [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=[]

対応方法

現在ログイン中のユーザーに適切な権限を与えることで解決します。

.sh
# gcloud container clusters get-credentialsは実行済の前提
$ gcloud info | grep Account
Account: [user@example.com]
$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=user@example.com

再実行することで解決することを確認します。

$ kubectl apply -f stage.yaml
... created
... created
ingress "kube-lego-ingress" created
clusterrolebinding "kube-lego" created
clusterrole "kube-lego" created
configmap "kube-lego" created
deployment "kube-lego" created
serviceaccount "kube-lego" created
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?