无法在Kubernetes群集中执行GitLab Runner:无法在名称空间“gitlab”的API组“”中创建资源“secrets”

l3zydbqr  于 2023-01-20  发布在  Kubernetes
关注(0)|答案(6)|浏览(318)

目前我面临的问题是:

  1. ERROR: Job failed (system failure):
  2. prepare environment:
  3. setting up credentials:
  4. secrets is forbidden:
  5. User "system:serviceaccount:default:gitlab-runner" cannot create
  6. resource "secrets" in API group "" in the namespace "gitlab"`
  7. after following the official documentation on how to integrate the GitLab Runner.

我正在使用以下runner-chart-values.yaml

  1. # The GitLab Server URL (with protocol) that want to register the runner against
  2. # ref: https://docs.gitlab.com/runner/commands/README.html#gitlab-runner-register
  3. #
  4. gitlabUrl: http://example.domain/
  5. # The Registration Token for adding new runners to the GitLab Server. This must
  6. # be retrieved from your GitLab instance.
  7. # ref: https://docs.gitlab.com/ce/ci/runners/README.html
  8. #
  9. runnerRegistrationToken: "<token>"
  10. # For RBAC support:
  11. rbac:
  12. create: true
  13. rules:
  14. - apiGroups: ["*"]
  15. # Run all containers with the privileged flag enabled
  16. # This will allow the docker:dind image to run if you need to run Docker
  17. # commands. Please read the docs before turning this on:
  18. # ref: https://docs.gitlab.com/runner/executors/kubernetes.html#using-dockerdind
  19. runners:
  20. privileged: true

有什么线索吗?
非常感谢!

cgh8pdjw

cgh8pdjw1#

对我来说,添加所有必要的角色是唯一真正有帮助的解决方案。
下面是相应的runner-chart-values.yaml文件:

  1. ## GitLab Runner Image
  2. gitlabUrl: http://example.domain/
  3. runnerRegistrationToken: "<token>"
  4. rbac:
  5. create: true
  6. rules:
  7. - apiGroups: [""]
  8. resources: ["pods"]
  9. verbs: ["list", "get", "watch", "create", "delete"]
  10. - apiGroups: [""]
  11. resources: ["pods/exec"]
  12. verbs: ["create"]
  13. - apiGroups: [""]
  14. resources: ["pods/log"]
  15. verbs: ["get"]
  16. - apiGroups: [""]
  17. resources: ["pods/attach"]
  18. verbs: ["list", "get", "create", "delete", "update"]
  19. - apiGroups: [""]
  20. resources: ["secrets"]
  21. verbs: ["list", "get", "create", "delete", "update"]
  22. - apiGroups: [""]
  23. resources: ["configmaps"]
  24. verbs: ["list", "get", "create", "delete", "update"]
  25. runners:
  26. privileged: true
展开查看全部
gupuwyp2

gupuwyp22#

似乎存在命名空间不匹配,但您可以尝试以下选项

  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: Role
  3. metadata:
  4. name: gitlab-runner
  5. namespace: gitlab-runner
  6. rules:
  7. - apiGroups: [""]
  8. resources: ["pods"]
  9. verbs: ["list", "get", "watch", "create", "delete"]
  10. - apiGroups: [""]
  11. resources: ["pods/exec"]
  12. verbs: ["create"]
  13. - apiGroups: [""]
  14. resources: ["pods/log"]
  15. verbs: ["get"]

请确保您正在为正确的命名空间创建角色的服务帐户。
用于创建角色绑定的命令

  1. kubectl create rolebinding --namespace=gitlab-runner gitlab-runner-binding --role=gitlab-runner --serviceaccount=gitlab-runner:default

下面是一些不错文档:https://medium.com/@ruben.laguna/installing-a-gitlab-runner-on-kubernetes-ac386c924bc8

展开查看全部
ebdffaop

ebdffaop3#

这里是一个完整的解决方案使用Helm,我复制了Richardthis answer中提出的权利.
使用以下模板(gitlab-rbac/templates),我们可以使用以下命令修补给定的名称空间:

  1. helm upgrade -i gitlab-rbac-name ./gitlab-rbac \
  2. -n your-namespace-here --create-namespace

安装后,您可以通过以下方式检查当前权限:

  1. kubectl auth can-i create secrets --as=system:serviceaccount:gitlab:default \
  2. -n your-namespace-here

模板gitlab-rbac/templates/rbac.yaml包含以下内容:

  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: Role
  3. metadata:
  4. name: {{ .Release.Namespace }}-admin
  5. namespace: {{ .Release.Namespace }}
  6. rules:
  7. - apiGroups: [""]
  8. resources: ["pods"]
  9. verbs: ["list", "get", "watch", "create", "delete"]
  10. - apiGroups: [""]
  11. resources: ["pods/exec"]
  12. verbs: ["create"]
  13. - apiGroups: [""]
  14. resources: ["pods/log"]
  15. verbs: ["get"]
  16. - apiGroups: [""]
  17. resources: ["pods/attach"]
  18. verbs: ["list", "get", "create", "delete", "update"]
  19. - apiGroups: [""]
  20. resources: ["secrets"]
  21. verbs: ["list", "get", "create", "delete", "update"]
  22. - apiGroups: [""]
  23. resources: ["configmaps"]
  24. verbs: ["list", "get", "create", "delete", "update"]
  25. ---
  26. apiVersion: rbac.authorization.k8s.io/v1
  27. kind: RoleBinding
  28. metadata:
  29. name: gitlab-runner-{{ .Release.Namespace }}-admin
  30. namespace: {{ .Release.Namespace }}
  31. subjects:
  32. - kind: ServiceAccount
  33. name: default
  34. namespace: gitlab
  35. roleRef:
  36. apiGroup: rbac.authorization.k8s.io
  37. kind: Role
  38. name: {{ .Release.Namespace }}-admin

请注意,您可能需要为您的跑步者提供更多权限,您可能需要根据您的管道更新规则。例如,如果您允许模板创建名称空间,则需要为此添加群集范围的角色。这意味着在模板文件中添加以下内容:

  1. # ... Role and RoleBinding templates
  2. ---
  3. apiVersion: rbac.authorization.k8s.io/v1
  4. kind: ClusterRole
  5. metadata:
  6. name: namespace-admin
  7. rules:
  8. - apiGroups: ['']
  9. resources: ['namespaces']
  10. verbs: ['create']
  11. ---
  12. apiVersion: rbac.authorization.k8s.io/v1
  13. kind: ClusterRoleBinding
  14. metadata:
  15. name: gitlab-runner-namespace-admin
  16. subjects:
  17. - kind: ServiceAccount
  18. name: default
  19. namespace: gitlab
  20. roleRef:
  21. apiGroup: rbac.authorization.k8s.io
  22. kind: ClusterRole
  23. name: namespace-admin

在本例中,值(gitlab-rbac/values.yaml)文件为空,因为我们只使用了名称空间参数。

展开查看全部
ccgok5k5

ccgok5k54#

扩展哈什的回答:请确保您正在使用活动的“gitlab-runner”命名空间或使用键--namespace=gitlab-runner。要在活动命名空间之间切换,请使用以下命令:
kubens gitlab-runner
因此,您不必每次都使用--namespace=gitlab-runner
JFYI,我已经完成了文章中关于我的k8s集群的步骤,它对我来说很好用。

quhf5bfb

quhf5bfb5#

我也得到了同样的错误。所以我用了这个方法。它解决了我的错误。

  1. helm install --namespace <NAMESPACE> gitlab-runner -f values.yml --set rbac.create=true gitlab/gitlab-runner
nmpmafwu

nmpmafwu6#

除了其他答案外,这里还有一个官方文档的链接,其中列出了根据所使用的策略需要哪些权限:

文档链接:https://docs.gitlab.com/runner/executors/kubernetes.html

相关问题