Как мне подключить ssh-ключ для репозитория BitBucket к моему контейнеру, чтобы использовать ссылки ssh git в рабочих процессах Argo?

У меня есть рабочий процесс, который:

  1. клонирует репозиторий, тарирует его и добавляет в корзину s3
  2. создает образ докера с помощью kaniko
  3. клонирует другой репозиторий, тарирует его и добавляет в корзину s3
  4. Я использую шаг Python для запуска файла сценария из этого сегмента (шаг 3), который обновит тег, заархивирует его и отправит обратно.
  5. запустите шаг контейнера git, который должен выполнить git push, и в этом моя проблема. Я пытался сделать это так же, как клонировал репозиторий (ссылка для клонирования https://github.com/argoproj/argo-workflows/blob/main/examples/input-artifact-git.yaml)

Я получаю эту ошибку:

Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Error: exit status 128

Как мне перенести изменения в репозиторий после запуска скрипта Python? Как мне прикрепить ssh-ключ к контейнеру?

Я попытался добавить свой ssh-ключ, используя https://github.com/argoproj/argo-workflows/blob/main/examples/input-artifact-git.yaml в качестве ссылки для внесения изменений в репозиторий, я был ожидая, что он будет использовать ключ ssh и вносить изменения, внесенные моим скриптом Python

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решил проблему, я сделал так:

  1. смонтируйте ключ ssh после создания секрета (например: kubectl create secret generic ssh-keys --from-file=id_rsa=ssh-key --from-file=id_rsa.pub=ssh-key.pub), смонтируйте его как том следующим образом:

    - name: ssh-keys
      secret:
        secretName: ssh-keys
        defaultMode: 400
    
    
  2. смонтируйте его в свой контейнер, которому нужны ключи ssh:

       volumeMounts:
       - name: ssh-keys
         readOnly: true
         mountPath: /root/.ssh
    
  3. в аргументах контейнера добавьте скрипт для создания временного каталога /tmp/ssh и скопируйте туда свои ssh-ключи, поскольку монтирование томов ssh доступно только для чтения, и вы не можете использовать его для добавления известного каталога хостов в каталог .ssh, измените закрытый ключ предназначен только для чтения, так как закрытые ключи должны быть доступны только для чтения. Используйте ssh-keyscan, чтобы добавить имя хоста вашего провайдера git и экспортировать закрытый ключ и известные хосты вместе с файлами (ПРИМЕЧАНИЕ: в вашем контейнере потребуется ssh-keyscan, если он не добавляет контейнер инициализации Alpine к вашему шагу по добавлению ключа ssh) если у него есть ssh-keys, добавьте это в аргументы:

     mkdir -p /tmp/ssh && cp /root/.ssh/id_rsa /tmp/ssh/id_rsa && chmod
     600 /tmp/ssh/id_rsa && ssh-keyscan -H <your git provider> >>
     /tmp/ssh/known_hosts && export GIT_SSH_COMMAND = "ssh -i
     /tmp/ssh/id_rsa -o UserKnownHostsFile=/tmp/ssh/known_hosts" && <rest of your arguments>
    

если у него нет ssh-keyscan, добавьте этот контейнер инициализации:

  initContainers:
    - name: ssh-setup
      image: alpine
      command:
        - /bin/sh
        - '-c'
      args:
        - >
          apk add --no-cache openssh-client && mkdir -p /tmp/ssh && cp
          /root/.ssh/id_rsa /tmp/ssh/id_rsa && chmod 600 /tmp/ssh/id_rsa &&
          ssh-keyscan -H bitbucket.org >> /tmp/ssh/known_hosts && export
          GIT_SSH_COMMAND = "ssh -i /tmp/ssh/id_rsa -o
          UserKnownHostsFile=/tmp/ssh/known_hosts"
      resources: {}
      volumeMounts:
        - name: ssh-keys
          readOnly: true
          mountPath: /root/.ssh

Другие вопросы по теме