GitLab 运行器 kubernetes 执行器需要哪些 kubernetes 权限?

ece*_*ulm 3 gitlab-ci kubernetes gitlab-ci-runner

我已在命名空间下的 kubernetes 集群上安装了 GitLab 运行程序gitlab-runner。像这样

# cat <<EOF | kubectl create -f -
{
  "apiVersion": "v1",
  "kind": "Namespace",
  "metadata": {
    "name": "gitlab-runner",
    "labels": {
      "name": "gitlab-runner"
    }
  }
}

# helm repo add gitlab https://charts.gitlab.io
# cat <<EOF|helm install --namespace gitlab-runner gitlab-runner -f - gitlab/gitlab-runner
gitlabUrl: https://gitlab.mycompany.com
runnerRegistrationToken: "c................Z"
Run Code Online (Sandbox Code Playgroud)

GitLab 运行程序已正确注册到 GitLab 项目,但所有作业都会失败。

快速查看 GitLab 运行程序日志告诉我,GitLab 运行程序使用的服务帐户缺乏适当的权限:

# kubectl logs --namespace gitlabrunner gitlab-runner-gitlab-runner-xxxxxxxxx
ERROR: Job failed (system failure): pods is forbidden: User "system:serviceaccount:gitlabrunner:default" cannot create resource "pods" in API group "" in the namespace "gitlab-runner"  duration=42.095493ms job=37482 project=yyy runner=xxxxxxx
Run Code Online (Sandbox Code Playgroud)

gitlab runner kubernetes执行器需要什么权限?

ece*_*ulm 6

我在GitLab 运行程序文档中找不到权限列表,但我尝试逐一添加权限,并编译了基本功能所需的权限列表。

gitlab 运行程序将使用服务帐户system:serviceaccount:gitlab-runner:default,因此我们需要创建一个角色并将该角色分配给该服务帐户。

# cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: gitlab-runner
  namespace: gitlab-runner
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["list", "get", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["create"]
  - apiGroups: [""]
    resources: ["pods/log"]
    verbs: ["get"]

# kubectl create rolebinding --namespace=gitlab-runner gitlab-runner-binding --role=gitlab-runne r --serviceaccount=gitlab-runner:default
Run Code Online (Sandbox Code Playgroud)

将该角色分配给服务帐户后,GitLab 运行者将能够创建、执行和删除 pod,还可以访问日志。