kubernetes - 如何在 Google Kubernetes Engine for KubeIP 中部署 ClusterRoleBinding
问题描述
尝试将KubeIP部署到 GKE时,我看到 RBAC 失败。
我已将问题隔离到KubeIP 基础设施的以下部分:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kubeip-sa
namespace: kube-system
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get","list","watch","patch"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["get","list","watch"]
我从kubectl
GKE 收到以下错误:
来自服务器的错误(禁止):创建“template.yml”时出错:clusterroles.rbac.authorization.k8s.io “kubeip-sa”被禁止:尝试授予额外权限:[{[get] [] [nodes] [ ] []} {[list] [] [nodes] [] []} {[watch] [] [nodes] [] []} {[patch] [] [nodes] [] []} {[get] [] [pods] [] []} {[list] [] [pods] [] []} {[watch] [] [pods] [] []}] user=&{108986779198363313539 [system:authenticated] 地图[user-assertion.cloud.google.com:[AKUJVpldMDXqrDZ2slnJReDbLytxt6P2EEyEBbLNRB90oOATH4vIURo/lIhaBuAj9nnwwyxJDSxj2OdCyjjgBC/s5QxftIJnr8128ToTglCzk+e8Wybt4heIizRHugWnIhKNqkF+B0yiv0pIxgOfakma+SbkzbQbVzJPtgxsmHmak30YfPA58n/xyJ8R7oNVJ5dFUAWDFNsqHf/auolViw0Zd7Cr4aYYDXX4GScw==]]} ownerrules=[{[create] [authorization.k8s.io] [selfsubjectaccessreviews selfsubjectrulesreviews] [] []} {[get] [] [] [] [/api /api/* /apis /apis/* /healthz /openapi /openapi/* /swagger-2.0.0.pb -v1 /swagger.json /swaggerapi /swaggerapi/* /version /version/]}] ruleResolutionErrors=[]
我已经通过发出装箱了适当的 ~/.kube/config
gcloud container clusters get-credentials <cluster> \
--zone <zone> \
--project <project>
我正在使用的 gcloud 服务帐户已在相关 GKE 集群中获得集群管理员权限
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin \
--user $(gcloud config get-value account)
我可以验证我的服务帐户用户是否应该具有 cluster-admin 角色,检查我当前的 gcloud 用户并检查 GKE ClusterRoleBinding
$ gcloud config get-value account
terraform@<project>.iam.gserviceaccount.com
$ kubectl describe clusterrolebinding cluster-admin-binding
Name: cluster-admin-binding
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: cluster-admin
Subjects:
Kind Name Namespace
---- ---- ---------
User terraform@<project>.iam.gserviceaccount.com
根据 kubectl 我应该能够创建 ClusterRoleBindings
$ kubectl auth can-i create clusterrolebinding
yes
有人看到我缺少 GKE RBAC 的哪些元素吗?
解决方案
这个问题的答案“将 ClusterRole 创建为默认计算服务帐户失败并出现额外权限错误”引导我找到了解决方案。
如果您将 ClusterRoleBinding 映射到服务帐户 ID 而不是电子邮件,那么一切都会按预期工作。
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin \
--user $(gcloud iam service-accounts describe <service account email> --format="value(uniqueId)")
推荐阅读
- java - 如何在架构级别监听 kafka 事件
- python - 我想为我的时间序列数据设置一个频率(我的数据以五分钟为单位)
- powershell - 当响应时间(不是名称解析)长于 x 时,有没有办法结束 Invoke-WebRequest?
- javascript - 通过中间件检查多权限
- java - REST 被错误(部分正确)类识别,如何防止这种情况发生?
- c# - 如何使用随机数生成器中的值显示嵌入程序中的图像?
- vue.js - 如何使用 bootstrap-vue 修复模态标题中的图像
- javascript - symfony 列表上的内联编辑元素问题
- text - 生成的 Beautiful Soup txt 文件中的文件编码未知
- typescript - 基于可选泛型的接口强制键