• Русский
  • Быстрый старт

    Этот документ поможет вам быстро понять, как создать GitLab Connector и использовать его для безопасного клонирования репозиториев и выполнения операций с GitLab без прямой работы с учетными данными.

    Оценочное время чтения

    15 минут

    Требования

    • Kubernetes кластер с установленной системой Connectors (компоненты ConnectorsCore и ConnectorsGitLab). Подробнее об установке этих компонентов смотрите в Installation Guide.
    • kubectl, настроенный для работы с вашим кластером
    • Репозиторий GitLab с действительным Private Access Token (PAT)
    • Базовые знания ресурсов Kubernetes

    Обзор процесса

    Шаг операцииОписание
    1Создать NamespaceСоздать отдельное пространство имен для демонстрации
    2Создать учетные данные GitLab и ConnectorНастроить учетные данные и коннектор для доступа к GitLab
    3Создать задачу клонированияЗапустить задачу, использующую коннектор для клонирования репозитория
    4Проверить выполнениеУбедиться, что репозиторий успешно клонирован

    Шаги выполнения

    Шаг 1: Создать Namespace

    Создайте отдельное пространство имен для этой демонстрации:

    kubectl create ns gitlab-connector-demo

    Шаг 2: Создать учетные данные GitLab и Connector

    Создайте Secret, содержащий GitLab Private Access Token, и ресурс GitLab Connector. Более подробную информацию о создании и настройке коннекторов смотрите в Connectors Quick Start Guide.

    cat <<EOF | kubectl apply -f -
    kind: Secret
    apiVersion: v1
    metadata:
      name: gitlab-secret
      namespace: gitlab-connector-demo
    type: connectors.cpaas.io/gitlab-pat-auth
    stringData:
      token: glpat-xxxxxxxxxxxxxxxxxxxx  # Замените на ваш GitLab Private Access Token
    ---
    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: gitlab-connector
      namespace: gitlab-connector-demo
    spec:
      connectorClassName: gitlab
      address: https://gitlab.com  # Замените на адрес вашего GitLab сервера
      auth:
        name: patAuth
        secretRef:
          name: gitlab-secret
    EOF

    Важные замечания:

    • Тип секрета должен быть connectors.cpaas.io/gitlab-pat-auth
    • Для GitLab.com используйте https://gitlab.com в качестве адреса
    • Для самохостингового GitLab используйте URL вашего GitLab сервера (например, https://gitlab.example.com)
    • Поле address должно содержать URL GitLab сервера для клонирования репозиториев, а не адрес API

    Проверьте, что коннектор находится в статусе "Ready":

    kubectl get connector gitlab-connector -n gitlab-connector-demo

    Вывод должен быть примерно таким:

    NAME               CLASS    ADDRESS              READY   AGE
    gitlab-connector   gitlab   https://gitlab.com   True    1m

    Шаг 3: Создать задачу клонирования

    Создайте задачу, которая использует коннектор для клонирования репозитория GitLab с помощью Git CLI:

    cat <<EOF | kubectl apply -f -
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: gitlab-git-clone
      namespace: gitlab-connector-demo
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: git
            image: bitnami/git
            imagePullPolicy: IfNotPresent
            command:
            - "sh"
            args:
            - "-c"
            - |
              set -ex
              cp /opt/git/.gitconfig /root/
              chmod 644 /root/.gitconfig
    
              git clone --progress https://<your-gitlab-server>/<your-group>/<your-repo>.git /tmp/demo
              echo "git clone done"
            volumeMounts:
            - name: gitconfig
              mountPath: /opt/git
          volumes:
          - name: gitconfig
            csi:
              readOnly: true
              driver: connectors-csi
              volumeAttributes:
                connector.name: "gitlab-connector"
                configuration.names: "gitconfig"
    EOF

    Замените https://<your-gitlab-server>/<your-group>/<your-repo>.git на URL вашего реального репозитория GitLab.

    Ключевые параметры:

    • connector.name: имя вашего GitLab коннектора
    • configuration.names: установлено в "gitconfig" для монтирования файла конфигурации Git
    • mountPath: монтирует конфигурацию в /opt/git и копирует в /root/ для использования Git

    Шаг 4: Проверить выполнение

    Проверьте логи задачи, чтобы убедиться, что репозиторий успешно клонирован:

    kubectl logs -f job/gitlab-git-clone -n gitlab-connector-demo

    Вы должны увидеть успешное завершение операции клонирования без ошибок аутентификации. В выводе будет примерно следующее:

    + git clone --progress https://<your-gitlab-server>/<your-group>/<your-repo>.git /tmp/demo
    Cloning into '/tmp/demo'...
    remote: Enumerating objects: 123, done.
    remote: Counting objects: 100% (123/123), done.
    remote: Compressing objects: 100% (89/89), done.
    remote: Total 123 (delta 34), reused 123 (delta 34), pack-reused 0
    Receiving objects: 100% (123/123), 45.67 KiB | 1.23 MiB/s, done.
    Resolving deltas: 100% (34/34), done.
    + echo 'git clone done'
    git clone done

    Как это работает

    GitLab Connector работает следующим образом:

    1. Заменяет исходный URL репозитория GitLab на URL прокси-сервиса
    2. Встраивает информацию об аутентификации (K8S API Token) в запросы к прокси-сервису
    3. Прокси-сервис добавляет необходимые учетные данные (Secret коннектора) при пересылке запросов на сервер GitLab
    4. Для операций Git файл .gitconfig содержит правила переписывания URL и заголовки аутентификации

    Чтобы просмотреть сгенерированную конфигурацию:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: inspect-gitlab-config
      namespace: gitlab-connector-demo
    spec:
      restartPolicy: Never
      containers:
      - name: inspect
        image: bitnami/git
        command: ["sleep", "3600"]
        volumeMounts:
        - name: gitconfig
          mountPath: /opt/gitlab
      volumes:
      - name: gitconfig
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "gitlab-connector"
            configuration.names: "gitconfig"
    EOF

    Просмотрите сгенерированную конфигурацию Git:

    kubectl exec -it inspect-gitlab-config -n gitlab-connector-demo -- cat /opt/gitlab/.gitconfig

    Пример вывода:

    [http]
        extraHeader = Authorization: Basic OmV5Smhixxxxxxxxx==
    [url "http://c-gitlab-connector.gitlab-connector-demo.svc"]
        insteadOf = https://gitlab.com

    Эта конфигурация:

    • Добавляет заголовок Authorization с закодированным K8S API Token
    • Переписывает URL GitLab для использования прокси-сервиса

    Устранение неполадок

    Если операция клонирования не удалась, проверьте следующее:

    1. Статус коннектора: Убедитесь, что коннектор находится в состоянии "Ready":

      kubectl describe connector gitlab-connector -n gitlab-connector-demo
    2. Private Access Token: Проверьте, что ваш GitLab PAT имеет необходимые разрешения:

      • Требуется область read_repository для клонирования
    3. Конфигурация задачи:

      • Убедитесь, что путь монтирования тома корректен
      • Проверьте, что URL репозитория соответствует вашему GitLab репозиторию
      • Убедитесь, что файл .gitconfig корректно скопирован в /root/
    4. Сетевое соединение: Убедитесь, что ваш кластер может достучаться до GitLab сервера

    Следующие шаги

    После успешного клонирования первого репозитория с помощью GitLab Connector вы можете:

    • Узнать, как использовать GitLab CLI (glab) с коннектором для взаимодействия с GitLab в Using GitLab CLI Guide
    • Использовать кастомные CLI инструменты, такие как reviewdog, для работы с GitLab в Using Reviewdog CLI Tools Guide
    • Интегрировать этот подход в ваши CI/CD пайплайны в CI/CD Integration Guide
    • Изучить GitLab ConnectorClass Concepts для расширенных вариантов настройки