Gitlab runner 无法执行 helm list 命令
Gitlab runner not able to execute helm list command
我正在尝试为我的集群内 CICD 管道设置一个 gitlab kubernetes 代理和运行程序。
我的 gitlab.ci 是这样的:
stages:
- deploy
deploy-new-images:
stage: deploy
image:
name: alpine/helm:3.7.1
entrypoint: [""]
script:
- helm list --all-namespaces
tags:
- staging
- test
Gitlab 能够为此特定作业启动容器,但失败并出现以下错误:
Error: list: failed to list: secrets is forbidden: User "system:serviceaccount:gitlab:default" cannot list resource "secrets" in API group "" at the cluster scope
我的代理部署有一个名为 gitlab
的服务帐户。此服务帐户通过 ClusterRoleBinding 关联到默认的管理员 ClusterRole;它还通过 RoleBinding 资源与 Role 相关联。
该角色具有以下定义:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: "2022-04-14T15:27:27Z"
labels:
app: gitlab-agent
name: gitlab-agent
namespace: gitlab
resourceVersion: "44732"
uid: 0b09cabe-826f-4c7c-a864-3192e0c9ea42
rules:
- apiGroups:
- ""
resources:
- '*'
verbs:
- '*'
另一方面,gitlab runner 是通过 Helm 使用以下值部署的:
image: "gitlab/gitlab-runner:alpine-v14.9.0"
imagePullPolicy: "Always"
replicas: 5
gitlabUrl: https://gitlab.com
runnerRegistrationToken: "{{ vault_gitlab_runner_registration_token }}"
unregisterRunners: true
logLevel: "debug"
rbac:
create: true
rules:
- resources: ["*"]
verbs: ["*"]
- apiGroups: [""]
resources: ["*"]
verbs: ["*"]
clusterWideAccess: true
metrics:
enabled: false
runners:
executor: kubernetes
locked: false
tags: "staging,test"
name: "test-staging-gitlab-runner"
runUntagged: false
config: |
[[runners]]
[runners.kubernetes]
namespace = "gitlab"
image = "ubuntu:20.04"
在我看来,agent 和 runner 都有足够的权限,但是 helm list 命令失败了。有什么想法吗?
简而言之: 在您的 gitlab-runner 值文件中,在 [runners.kubernetes]
下添加设置 service_account = "gitlab"
。
解释:实际执行job的pod不是gitlab-runnerpod,也不是gitlab agent pod。 Gitlab runner kubernetes executor 为每个作业生成一个新的 pod。这些pods设置服务账号名的地方在上面的设置
上面的错误消息显示 pod 运行 作业正在使用 gitlab
命名空间的默认服务帐户。此服务帐户没有(也不应该)具有所需的权限。
值文件中的 runners.config
部分最终出现在配置运行器的 config.toml 文件中。这是有关 kubernetes 执行程序 config.toml 的文档:https://docs.gitlab.com/runner/executors/kubernetes.html#other-configtoml-settings
我正在尝试为我的集群内 CICD 管道设置一个 gitlab kubernetes 代理和运行程序。 我的 gitlab.ci 是这样的:
stages:
- deploy
deploy-new-images:
stage: deploy
image:
name: alpine/helm:3.7.1
entrypoint: [""]
script:
- helm list --all-namespaces
tags:
- staging
- test
Gitlab 能够为此特定作业启动容器,但失败并出现以下错误:
Error: list: failed to list: secrets is forbidden: User "system:serviceaccount:gitlab:default" cannot list resource "secrets" in API group "" at the cluster scope
我的代理部署有一个名为 gitlab
的服务帐户。此服务帐户通过 ClusterRoleBinding 关联到默认的管理员 ClusterRole;它还通过 RoleBinding 资源与 Role 相关联。
该角色具有以下定义:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: "2022-04-14T15:27:27Z"
labels:
app: gitlab-agent
name: gitlab-agent
namespace: gitlab
resourceVersion: "44732"
uid: 0b09cabe-826f-4c7c-a864-3192e0c9ea42
rules:
- apiGroups:
- ""
resources:
- '*'
verbs:
- '*'
另一方面,gitlab runner 是通过 Helm 使用以下值部署的:
image: "gitlab/gitlab-runner:alpine-v14.9.0"
imagePullPolicy: "Always"
replicas: 5
gitlabUrl: https://gitlab.com
runnerRegistrationToken: "{{ vault_gitlab_runner_registration_token }}"
unregisterRunners: true
logLevel: "debug"
rbac:
create: true
rules:
- resources: ["*"]
verbs: ["*"]
- apiGroups: [""]
resources: ["*"]
verbs: ["*"]
clusterWideAccess: true
metrics:
enabled: false
runners:
executor: kubernetes
locked: false
tags: "staging,test"
name: "test-staging-gitlab-runner"
runUntagged: false
config: |
[[runners]]
[runners.kubernetes]
namespace = "gitlab"
image = "ubuntu:20.04"
在我看来,agent 和 runner 都有足够的权限,但是 helm list 命令失败了。有什么想法吗?
简而言之: 在您的 gitlab-runner 值文件中,在 [runners.kubernetes]
下添加设置 service_account = "gitlab"
。
解释:实际执行job的pod不是gitlab-runnerpod,也不是gitlab agent pod。 Gitlab runner kubernetes executor 为每个作业生成一个新的 pod。这些pods设置服务账号名的地方在上面的设置
上面的错误消息显示 pod 运行 作业正在使用 gitlab
命名空间的默认服务帐户。此服务帐户没有(也不应该)具有所需的权限。
值文件中的 runners.config
部分最终出现在配置运行器的 config.toml 文件中。这是有关 kubernetes 执行程序 config.toml 的文档:https://docs.gitlab.com/runner/executors/kubernetes.html#other-configtoml-settings