• Русский
  • Использование Git Connector в задачах клонирования

    Содержание

    Обзор функции

    Git Connector позволяет обычным пользователям выполнять операции клонирования кода без непосредственной работы с учетными данными. С помощью коннектора информация об учетных данных централизованно управляется администратором и автоматически внедряется в процесс клонирования при необходимости, что повышает безопасность и удобство.

    Сценарии использования

    • Несколько команд совместно используют права доступа к репозиторию кода без обмена учетными данными.
    • Требуется безопасный доступ к приватным репозиториям кода в DevOps пайплайнах.
    • В средах необходима централизованная система управления правами доступа к репозиториям кода.
    • Избегать жесткого кодирования или встраивания Git учетных данных непосредственно в Kubernetes workload.

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

    Перед использованием функции убедитесь, что:

    • Компонент Connectors Core развернут в среде.
    • Компонент Connectors Git развернут в среде.
    • У вас есть права на создание ресурсов Kubernetes (Namespace, Secret, Connector и т.д.).

    Шаги

    Выполните следующие шаги для использования Git Connector для клонирования кода:

    1. Создайте Namespace

      kubectl create ns connectors-git-demo
    2. Создайте Git Connector и его учетные данные

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

      cat <<EOF | kubectl apply -f -
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: connectors-reader-binding
        namespace: connectors-git-demo
      subjects:
        - kind: Group
          name: system:serviceaccounts:connectors-git-demo
          apiGroup: rbac.authorization.k8s.io
      roleRef:
        kind: ClusterRole
        name: connectors-connector-viewer-role
        apiGroup: rbac.authorization.k8s.io
      EOF
    4. Создайте задачу клонирования с использованием коннектора

      cat <<EOF | kubectl apply -f -
      apiVersion: batch/v1
      kind: Job
      metadata:
        name: git-clone
        namespace: connectors-git-demo
      spec:
        template:
          spec:
            restartPolicy: Never
            containers:
            - name: git
              image: bitnami/git:2.47.1
              imagePullPolicy: IfNotPresent
              command:
              - "git"
              args: [ "clone", "--progress", "https://github.com/AlaudaDevops/connectors-git.git", "/tmp/demo" ] # Измените на адрес вашего репозитория
              volumeMounts:
              - name: gitconfig
                mountPath: /root/
            volumes:
            - name: gitconfig
              csi:
                readOnly: true
                driver: connectors-csi
                volumeAttributes:
                  connector.name: "test-connector"
                  configuration.names: "gitconfig"
      EOF
    5. Просмотрите результат выполнения задачи клонирования

      kubectl logs -f job/git-clone -n connectors-git-demo

    Описание параметров:

    ПараметрОписание
    connector.nameУказывает имя коннектора для использования
    configuration.namesУказывает тип генерируемого конфигурационного файла; gitconfig означает генерацию конфигурационного файла Git
    mountPathУказывает путь монтирования конфигурационного файла; для операций Git должен быть смонтирован в каталог /root/

    Результат работы

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

    Принцип работы

    Для лучшего понимания принципа работы Git Connector можно создать долго работающий Pod для проверки сгенерированной конфигурации:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-git-clone
      namespace: connectors-git-demo
    spec:
      restartPolicy: Never
      containers:
      - name: git
        image: bitnami/git:2.47.1
        imagePullPolicy: IfNotPresent
        command:
        - "sleep"
        args: [ "3600" ]
        volumeMounts:
        - name: gitconfig
          mountPath: /root/
      volumes:
      - name: gitconfig
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "test-connector"
            configuration.names: "gitconfig"
    EOF

    Используйте следующую команду для просмотра содержимого сгенерированного конфигурационного файла:

    kubectl exec -it pod-git-clone -n connectors-git-demo -- cat /root/.gitconfig

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

    [http]
        extraHeader = Authorization: Basic OmV5Smhixxxxxxxxx==
    [url "http://connectors-proxy-service.connectors-system.svc/namespaces/default/connectors/test-connector"]
        insteadOf = https://github.com

    В процессе клонирования Git:

    1. Исходный адрес репозитория Git автоматически заменяется адресом сервиса connectors-proxy.
    2. Система автоматически внедряет информацию об аутентификации для прокси-запроса (эта информация истекает через 30 минут).
    3. connectors-proxy автоматически завершает внедрение учетных данных на стороне сервера для выполнения операции клонирования.