GitLab Runner Kubernetes执行器需要哪些Kubernetes权限?

3

我已经在 Kubernetes 集群上的命名空间 gitlab-runner 下安装了 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"

GitLab Runner已经与GitLab项目正确注册,但是所有作业均失败。
快速查看GitLab Runner日志告诉我,GitLab Runner使用的服务帐户缺少适当的权限。
# 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

GitLab Runner Kubernetes执行程序需要哪些权限?

3个回答

5
我无法在GitLab Runner文档中找到权限列表,但我尝试逐个添加权限,并编制了一个基本功能所需的权限列表。
gitlab runner将使用服务账户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

该服务帐户被分配了这个角色,GitLab Runner 将能够创建、执行和删除 Pod,并访问日志。


+1 确认官方文档没有说明这一点,只需根据需要逐个添加即可。在我的情况下,我不得不添加一些权限(请参见单独的答案)。 - MoRe

2
不幸的是,我也像@RubenLaguna一样在官方文档中找不到这个。然而,kubernetes gitlab runner helm chart的默认values.yaml可以让你很好地定义这些RBAC规则,并列出了一些示例,我就是从这些示例开始的。
在我的情况下,我需要添加一些规则,我选择了以下内容:
rbac:
  create: true
  rules:
    - apiGroups: [""]
      resources: ["pods", "secrets", "configmaps"]
      verbs: ["get", "list", "watch", "create", "patch", "delete", "update"]
    - apiGroups: [""]
      resources: ["pods/exec", "pods/attach"]
      verbs: ["create", "patch", "delete"]
    - apiGroups: [""]
      resources: ["pods/log"]
      verbs: ["get"]

0
如果您使用helm chart安装gitlab runners,则gitlab runners不会使用由helm chart创建的服务帐户,而是使用默认服务帐户。这与一个错误有关。https://gitlab.com/gitlab-org/charts/gitlab-runner/-/issues/353为了解决这个问题,我们创建了以下ClusterRoleBinding。
kind: ClusterRoleBinding
metadata:
  name: gitlab-runner-role-default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: <helm-created-cluster-role-here>
subjects:
- kind: ServiceAccount
  name: default
  namespace: gitlab-runner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接