簡體   English   中英

GitLab runner kubernetes executor 需要哪些 kubernetes 權限?

[英]What kubernetes permissions does GitLab runner kubernetes executor need?

我已經在命名空間gitlab-runner下的 kubernetes 集群上安裝了 GitLab 運行器。 像這樣

# 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 運行程序正確注冊到 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

gitlab runner kubernetes executor需要什么權限?

我在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

將該角色分配給服務帳戶后,GitLab 運行器將能夠創建、執行和刪除 pod 並訪問日志。

不幸的是,我在官方文檔中也找不到這個,就像@RubenLaguna所說的那樣。 但是,kubernetes gitlab runner helm 圖表的默認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"]

如果您使用 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM