[英]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.