• Русский
  • Git-коннектор

    Git-коннектор — это независимый от платформы коннектор, который можно использовать для подключения к любому Git Server, например GitHub, GitLab или Bitbucket.

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

    Кроме того, вы можете централизованно управлять конфигурациями доступа Git в разных namespaces, избегая необходимости повторять настройку Git-учетных данных в каждом namespace.

    В этом документе рассматриваются:

    • Требования к Git-серверам
    • Как создать Git-коннектор на основе Git connectorclass
    • Возможности прокси и конфигурации Git-коннектора

    Требования к Git-серверам

    Git-сервер, к которому выполняется доступ, должен соответствовать следующим условиям:

    1. Он должен поддерживать транспортные протоколы HTTP/HTTPS и совместим только с режимом Git "smart HTTP". Этот режим является стандартной реализацией для современных Git-серверов и поддерживает эффективную передачу данных и механизмы аутентификации.

    Создание Git-коннектора на основе Git ConnectorClass

    Быстрый старт

    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: github-demo
    spec:
      connectorClassName: git
      address: https://github.com
      auth:
        name: basicAuth
        params:
        - name: repository
          value: "kubernetes/website.git"

    spec.connectorClassName

    Константное значение git.

    Описание

    Вы можете добавить информацию с описанием Git-коннектора через поле annotations.

    • cpaas.io/description: Информация с описанием Git-коннектора.

    Например:

    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: github-demo
      annotations:
        cpaas.io/description: "Подключение к GitHub для доступа к общедоступным репозиториям команды"

    Address

    spec.address задает адрес доступа к Git-серверу, например: https://github.com. Важно отметить, что этот адрес используется для клонирования Git-репозиториев, а не для API-адреса Git-сервера.

    Аутентификация

    Git-коннектор поддерживает следующие типы аутентификации:

    • basicAuth: Аутентификация на основе имени пользователя и пароля (необязательно), соответствующий тип Secret: kubernetes.io/basic-auth

    Использование Basic Authentication

    Например:

    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: github-demo
    spec:
      connectorClassName: git
      address: https://github.com
      auth:
        name: basicAuth
        secretRef:
          name: github-secret

    Необходимо создать Secret в том же namespace, например:

    apiVersion: v1
    stringData:
      password: your-password
      username: your-username
    kind: Secret
    metadata:
      name: github-secret
    type: kubernetes.io/basic-auth

    Примечание: Поле password не ограничивается фактическими паролями пользователей. Вы можете использовать другие типы учетных данных, такие как Personal Access Tokens (PAT) или API keys, если они соответствуют требованиям к правам доступа, описанным в разделе Required Credential Permissions.

    Если Git-сервер не требует аутентификации, можно опустить поле secretRef:

    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: github-demo
    spec:
      connectorClassName: git
      address: https://github.com
      auth:
        name: basicAuth

    Необходимые права учетных данных

    Требуемые права для настроенных учетных данных зависят от того, как вы планируете использовать их в Pods/Pipelines. Кроме того, учетные данные должны иметь права на клонирование для аутентифицируемого репозитория, указанного в разделе Authentication Parameters.

    Например:

    • Если в pipelines с использованием этого коннектора вам нужно выполнять и клонирование, и push-операции, учетные данные должны иметь права как на клонирование, так и на push для целевого репозитория. Иными словами, учетные данные должны позволять как клонировать репозиторий, так и отправлять в него изменения.
    • Если в pipelines вам нужно только клонировать репозитории, учетным данным достаточно только прав на клонирование целевого репозитория.

    В целях безопасности мы рекомендуем создавать учетные данные с минимально необходимыми правами. Если требуются более широкие привилегии, создавайте отдельные Connectors с более привилегированным Secret и используйте изоляцию namespace, чтобы контролировать, какие пользователи могут получать доступ к каждому Connector.

    Параметры аутентификации

    Чтобы проверить, являются ли учетные данные действительными, необходимо указать путь к Git-репозиторию. Коннектор будет использовать учетные данные для доступа к этому репозиторию во время выполнения, чтобы определить их корректность.

    Этот параметр аутентификации задается через spec.auth.params.

    • repository: Указывает путь к Git-репозиторию, используемому для проверки аутентификации, например org/repo.git.

    Например:

    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: github-demo
    spec:
      connectorClassName: git
      address: https://github.com
      auth:
        name: basicAuth
        params:
        - name: repository
          value: org/repo.git
        secretRef:
          name: github-secret

    Прокси и конфигурация

    Чтобы предоставить клиентам возможность получать доступ к Git-репозиториям без учетных данных, Git connectorclass предоставляет proxy server для автоматической подстановки информации аутентификации.

    Клиенты, имеющие доступ к коннектору, могут использовать этот proxy server для доступа к Git-репозиториям без необходимости настраивать учетные данные на стороне клиента.

    Для упрощения использования Git connectorclass предоставляет информацию о конфигурации, которую можно монтировать в Pods через CSI. В Pod при выполнении Git-операций proxy service может использоваться автоматически для выполнения Git-операций.

    Адрес прокси

    При создании Git-коннектора система автоматически создаст Service для проксирования доступа к Git-репозиторию.

    Система запишет адрес прокси в поле status.proxy.httpAddress.

    Например:

    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: github-demo
    spec:
      # . . .
    status:
      conditions:
      # . . .
      proxy:
        httpAddress:
          url: http://c-github-demo.default.svc.cluster.local

    Конфигурация

    Git-коннектор, созданный на основе Git connectorclass, предоставляет следующую конфигурацию:

    gitconfig: Информация о конфигурации Git.

    • Предоставляет файл конфигурации .gitconfig, в котором адрес Git-репозитория будет заменен на адрес прокси. В сочетании с connector-csi-driver этот файл конфигурации будет смонтирован в Pod, что позволит получать доступ к Git-репозиторию через прокси без необходимости настраивать учетные данные на стороне клиента.

    Пример файла конфигурации, сгенерированного в Pod:

    [http]
        extraHeader = Authorization: Basic <base64 encoded token of the service account>
    [url "http://c-github-demo.default.svc"]
        insteadOf = https://github.com

    Дополнительные сценарии использования можно посмотреть в Using Git Connector in Clone Job.

    Дополнительно