Connecting to the kubernetes API for Kubernetes Executor in Gitlab

12/5/2017

According to https://docs.gitlab.com/runner/executors/kubernetes.html#connecting-to-the-kubernetes-api, I can connect to another K8s cluster from my current Gitlab runner, but the thing is that they do not provide any information of what do you do or where do you need to specify these options.

EDIT: Finally managed to specify these options in the config.toml, but now any time my Gitlab-runner gets a job it fails as it follows:

ERROR: Job failed (system failure): User "system:serviceaccount:test-djg:default" cannot create secrets in project "gitlab" job=17304 project=3128 runner=c36ccf98

Any idea?

-- djuarez
executor
gitlab
gitlab-ci
gitlab-ci-runner
kubernetes

1 Answer

2/8/2018

You get this error because executor pod doesn't have necessary permissions to run when RBAC is enabled in cluster. You should create a Role and RoleBinding and maybe a ServiceAccount based on your setup.

There is a pending merge request in gitlab-runner project that documents necessary permission and some other info about RBAC.

But for now if you want a quick setup it's possible to allow full access to namespace with following snippet. Note that you're gonna need to modifications to match you setup.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  namespace: gitlab
  name: gitlab-admin
rules:
  - apiGroups: [""] # The API group "" indicates the core API Group.
    resources: ["*"]
    verbs: ["*"]

---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: gitlab-admin
  namespace: gitlab
subjects:
  - kind: ServiceAccount # May be "User", "Group" or "ServiceAccount"
    name: default
    namespace: gitlab
roleRef:
  kind: Role
  name: gitlab-admin
  apiGroup: rbac.authorization.k8s.io
-- Keyvan Hedayati
Source: StackOverflow