• Русский
  • Подготовка Git Credential

    В этом руководстве показано, как создать секрет git credential, который поможет вам запускать ваши Tekton Tasks и Pipelines.

    В этом документе в качестве примера используется конфигурация задачи git-clone. Если вы используете другую задачу, вы можете ориентироваться на приведённые здесь шаги и изменить taskRef.name и workspaces в соответствии с определениями в вашей задаче.

    Предварительные требования

    • Установлен и настроен kubectl для доступа к кластеру.
    • Права на чтение и запись Secrets.

    Шаги

    Опционально 1: Использование ssh Credentials

    Эта задача поддерживает получение доступа к приватным репозиториям. Существует три способа аутентификации:

    1. Самый простой способ — привязать workspace ssh-directory к этой задаче. В workspace должны содержаться приватные ключи (например, id_rsa), файлы config и known_hosts — всё, что необходимо для взаимодействия с вашим git-удалённым сервером через SSH. Настоятельно рекомендуется использовать Kubernetes Secrets для хранения ваших учётных данных и привязывать их к этому workspace.

      В TaskRun это будет выглядеть примерно так:

      kind: TaskRun
      spec:
        workspaces:
        - name: ssh-directory
          secret:
            secretName: my-ssh-credentials

      А в Pipeline и PipelineRun это будет выглядеть так:

      kind: Pipeline
      spec:
        workspaces:
        - name: ssh-creds
        # ...
        tasks:
        - name: fetch-source
          taskRef:
            name: git-clone
          workspaces:
          - name: ssh-directory
            workspace: ssh-creds
        # ...
      ---
      kind: PipelineRun
      spec:
        workspaces:
        - name: ssh-creds
          secret:
            secretName: my-ssh-credentials
        # ...

      Secret будет выглядеть одинаково в обоих случаях — структурирован как директория .ssh:

      kind: Secret
      apiVersion: v1
      metadata:
        name: my-ssh-credentials
      data:
        id_rsa: # ... приватный ключ в base64 ...
        known_hosts: # ... файл known_hosts в base64 ...
        config: # ... ssh config файл в base64 ...

      Включение known_hosts необязательно, но настоятельно рекомендуется. Без него задача git-clone будет безоговорочно принимать личность удалённого сервера.

    2. Другой способ — привязать workspace ssl-ca-directory к этой задаче. В workspace должны содержаться crt ключи (например, ca-bundle.crt) — всё, что необходимо для взаимодействия с вашим git-удалённым сервером через кастомный CA. Настоятельно рекомендуется использовать Kubernetes Secrets для хранения ваших учётных данных и привязывать их к этому workspace.

      В TaskRun это будет выглядеть примерно так:

      kind: TaskRun
      spec:
        workspaces:
        - name: ssl-ca-directory
          secret:
            secretName: my-ssl-credentials

      А в Pipeline и PipelineRun это будет выглядеть так:

      kind: Pipeline
      spec:
        workspaces:
        - name: ssl-creds
        # ...
        tasks:
        - name: fetch-source
          taskRef:
            name: git-clone
          workspaces:
          - name: ssl-ca-directory
            workspace: ssl-creds
        # ...
      ---
      kind: PipelineRun
      spec:
        workspaces:
        - name: ssl-creds
          secret:
            secretName: my-ssl-credentials
        # ...

      Secret будет выглядеть следующим образом:

      kind: Secret
      apiVersion: v1
      metadata:
        name: my-ssl-credentials
      data:
        ca-bundle.crt: # ... crt в base64 ...  # Если ключ/имя файла отличается от ca-bundle.crt, то установите параметр crtFileName, как описано в разделе Параметры

    Опционально 2: Использование basic-auth Credentials

    Примечание: Настоятельно рекомендуется использовать ssh credentials, если такая возможность есть, прежде чем использовать basic auth. Вы можете сгенерировать короткоживущий токен на платформах WebVCS (Github, Gitlab, Bitbucket и т.д.), который будет использоваться в качестве пароля, а в качестве имени пользователя обычно используется git. На bitbucket server токен может содержать символ /, поэтому его нужно urlquote перед использованием в Secret, см. этот ответ на stackoverflow:

    https://stackoverflow.com/a/24719496

    Для поддержки basic-auth эта задача предоставляет опциональный workspace basic-auth. Привязанный workspace должен содержать файл .gitconfig или .git-credentials. Любые другие файлы в этом workspace игнорируются. Типичный Secret с такими учётными данными выглядит следующим образом:

    kind: Secret
    apiVersion: v1
    metadata:
      name: my-basic-auth-secret
    type: Opaque
    stringData:
      .gitconfig: |
        [credential "https://<hostname>"]
          helper = store
      .git-credentials: |
        https://<user>:<pass>@<hostname>

    Опционально 3: Использование Git Connector

    Задача может использоваться с Git Connector для повышения безопасности.

    Сначала необходимо создать Git Connector, затем в TaskRun использовать CSI для настройки workspace basic-auth.

    Git Connector в настоящее время поддерживает клонирование только с basic-auth, не с ssh.

    Пример использования Git Connector в git-clone TaskRun:

    Создание Git Connector

    cat <<EOF | kubectl apply -f -
    kind: Secret
    apiVersion: v1
    metadata:
      name: github
    type: kubernetes.io/basic-auth
    stringData:
      username: your-username # Замените на ваше имя пользователя Git
      password: your-token    # Замените на ваш пароль или токен Git
    ---
    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: github
    spec:
      connectorClassName: git
      address: https://github.com  # Замените на адрес вашего Git-сервера
      auth:
        name: basicAuth
        secretRef:
          name: github
        params:
        - name: repository
          value: your-org/your-repo.git  # Замените на путь к вашему репозиторию, доступному с помощью вашего токена, используется для проверки состояния
    EOF

    Создание TaskRun

    cat << EOF | kubectl apply -f -
    apiVersion: tekton.dev/v1
    kind: TaskRun
    metadata:
      name: git-clone-demo
    spec:
      params:
      - name: url
        value: https://github.com/your-org/your-repo.git # Замените на путь к репозиторию, который хотите клонировать
      - name: revision
        value: refs/heads/main
      taskRef:
        name: git-clone
      timeout: 10m0s
      computeResources:
        limits:
          cpu: 200m
          memory: 200Mi
        requests:
          cpu: 200m
          memory: 200Mi
      workspaces:
      - name: output
        emptyDir: {}
      - csi:
          driver: connectors-csi
          readOnly: true
          volumeAttributes:
            connector.name: github #  имя коннектора
            connector.namespace: "" # namespace коннектора, если не указан, будет использован namespace TaskRun
            configuration.names: "gitconfig" # имя конфигурации, фиксировано как "gitconfig"
        name: basic-auth
    EOF

    Подробнее о Connector смотрите в Alauda DevOps Connectors Doc.