Gitlab CI Pipeline: невозможно создать модули в пространстве имен - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть кластер kubernetes (rancherOS и RKE), в котором запущен модуль запуска gitlab.Соединение с моим экземпляром GitLab работает нормально.

Если я активирую конвейер, он напрямую завершается с ошибкой:

Running with gitlab-runner 11.4.2 (cf91d5e1)
  on Kubernetes Runner e5e25776
Using Kubernetes namespace: gitlab-managed-apps
Using Kubernetes executor with image ubuntu:latest ...
ERROR: Job failed (system failure): pods is forbidden: User "system:serviceaccount:gitlab-managed-apps:default" cannot create pods in the namespace "gitlab-managed-apps"

Вот мой yaml для развертывания gitlab-runner:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: gitlab-runner
  namespace: gitlab-managed-apps
spec:
  replicas: 1
  selector:
    matchLabels:
      name: gitlab-runner
  template:
    metadata:
      labels:
        name: gitlab-runner
    spec:
      containers:
      - args:
        - run
        image: gitlab/gitlab-runner:latest
        imagePullPolicy: Always
        name: gitlab-runner
        securityContext:
          privileged: true
        volumeMounts:
        - mountPath: /etc/gitlab-runner
          name: config
        - mountPath: /etc/ssl/certs
          name: cacerts
          readOnly: true
      restartPolicy: Always
      volumes:
      - configMap:
          name: gitlab-runner
        name: config
      - hostPath:
          path: /usr/share/ca-certificates/mozilla
        name: cacerts
      hostNetwork: true

Я пытался добавить контекст безопасности с параметром "privileged: true", но это не помогает ..

Кто-нибудь знает, как предоставить развертыванию gitlab-runner право доступа ксоздавать другие модули в пространстве имен "gitlab-managed-apps"?

Большое спасибо:)

1 Ответ

0 голосов
/ 20 ноября 2018

В вашем развертывании yaml вы не добавили spec.template.spec.serviceAccountName, что означает, что он использует учетную запись по умолчанию с именем default в вашем пространстве имен развертывания с именем gitlab-managed-apps.И у него нет правила rbac для создания модулей в соответствии с указанной ошибкой.

Подробнее см. https://kubernetes.io/docs/reference/access-authn-authz/rbac/.

Существует несколько способов решения этой проблемы.Вот один из них:

Сначала создайте правило rbac и свяжите его с учетной записью службы.Ниже приведен пример сильфона:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: gitlab
  namespace: gitlab-managed-apps
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: gitlab-managed-apps
  name: gitlab
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["create"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: gitlab
  namespace: gitlab-managed-apps
subjects:
- kind: ServiceAccount
  name: gitlab # Name is case sensitive
  apiGroup: ""
roleRef:
  kind: Role #this must be Role or ClusterRole
  name: gitlab # this must match the name of the Role or ClusterRole you wish to bind to
  apiGroup: rbac.authorization.k8s.io

Затем отредактируйте ваш yaml для развертывания, добавив serviceaccount:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: gitlab-runner
  namespace: gitlab-managed-apps
spec:
  replicas: 1
  selector:
    matchLabels:
      name: gitlab-runner
  template:
    metadata:
      labels:
        name: gitlab-runner
    spec:
      serviceAccountName: gitlab
      containers:
      - args:
        - run
        image: gitlab/gitlab-runner:latest
        imagePullPolicy: Always
        name: gitlab-runner
        securityContext:
          privileged: true
        volumeMounts:
        - mountPath: /etc/gitlab-runner
          name: config
        - mountPath: /etc/ssl/certs
          name: cacerts
          readOnly: true
      restartPolicy: Always
      volumes:
      - configMap:
          name: gitlab-runner
        name: config
      - hostPath:
          path: /usr/share/ca-certificates/mozilla
        name: cacerts
      hostNetwork: true

Затем разверните экземпляры gitlab и другие нужные вам вещи.

...