我正在尝试为我的集群内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
- testGitlab能够启动此特定作业的容器,但失败时出现以下错误:
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的服务帐户。此服务帐户通过一个ClusterRole与默认管理ClusterRoleBinding相关联;它还通过RoleBinding资源与角色相关联。该角色的定义如下:
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"在我看来,代理和运行程序都有足够的权限,但是helm命令失败了。有什么想法吗?
发布于 2022-04-14 21:31:01
简而言之,:在gitlab值文件中的,在[runners.kubernetes]下面添加设置service_account = "gitlab"。
解释:执行作业的实际pod不是gitlab运行器,也不是gitlab代理pod。Gitlab的跑步者kubernetes的执行者为每一项工作都培育了一个新的吊舱。设置这些荚的服务帐户名称的位置位于上面的设置中。
上面的错误消息显示运行作业的pod使用了gitlab命名空间的默认服务帐户。此服务帐户不(也不应该)具有所需的权限。
值文件中的runners.config部分,最后在配置运行程序的config.toml文件中结束。以下是有关kubernetes执行程序的config.toml的文档:https://docs.gitlab.com/runner/executors/kubernetes.html#other-configtoml-settings
https://stackoverflow.com/questions/71874147
复制相似问题