Kubernetes中GitLab Runner用ClusterRole部署Deployment报权限错误如何解决?
问题排查及解决方案
问题根因
- 你创建ClusterRole时未指定Deployment所属的
appsAPI组,Kubernetes RBAC规则要求资源必须匹配对应的API组才会生效,你当前的配置仅匹配无API组/旧extensions组下的deployments资源,无法匹配报错中提到的apps组下的deployments资源。
修复步骤
- 删除原有错误配置:
kubectl delete clusterrolebinding deployment-test-binding kubectl delete clusterrole deployment-test
- 重新创建带正确API组的ClusterRole:
# 写法1:直接指定带API组后缀的资源 kubectl create clusterrole deployment-test --verb=* --resource=deployments.apps # 写法2:单独指定API组参数,效果和写法1一致 # kubectl create clusterrole deployment-test --verb=* --resource=deployments --api-group=apps
- 重新创建ClusterRoleBinding(原有绑定逻辑正确,直接复用即可):
kubectl create clusterrolebinding deployment-test-binding --clusterrole=deployment-test --serviceaccount=gitlab-runner:gitlab-ci
配置验证
执行以下命令验证权限是否生效,返回yes即为配置正确:
kubectl auth can-i get deployments.apps --as=system:serviceaccount:gitlab-runner:gitlab-ci -n gitlab-runner
额外注意
如果后续流水线部署过程中出现其他资源权限报错,可按照相同逻辑在ClusterRole中补充对应资源及API组配置即可。
内容的提问来源于stack exchange,提问作者Ben Stuk
相关产品推荐
相关产品推荐

