Проблема с K8s при извлечении из частного репозитория докеров

У меня есть приложение Jhipster, которое я хочу развернуть в Kubernetes. Я использовал команду jhipster kubernetes для создания всех объектов k8s и предоставил репозиторий Docker Hub, в который их можно было отправить. Репозиторий Docker Hub является частным.

Объект развертывания выглядит так:

apiVersion: apps/v1
kind: Deployment
metadata:
    name: demodevices
    namespace: demo
spec:
    replicas: 1
    selector:
        matchLabels:
            app: demodevices
            version: 'v1'
    template:
        metadata:
            labels:
                app: demodevices
                version: 'v1'
        spec:
            initContainers:
                - name: init-ds
                  image: busybox:latest
                  command:
                      - '/bin/sh'
                      - '-c'
                      - |
                          while true
                          do
                            rt=$(nc -z -w 1 demodevices-postgresql 5432)
                            if [ $? -eq 0 ]; then
                              echo "DB is UP"
                              break
                            fi
                            echo "DB is not yet reachable;sleep for 10s before retry"
                            sleep 10
                          done
            containers:
                - name: demodevices-app
                  image: myRepo/demo:demodevices-1.0.0
                  env: ...
                  resources: ...
                  ports: ...
                  readinessProbe: ...
                  livenessProbe: ...
            imagePullSecrets:
            - name: regcred

Поскольку я использовал частное репозиторий Docker Hub, я добавил imagePullSecret. Секрет создается и развертывается в k8s.

При применении файла в стручках я вижу следующие сообщения:

 Warning  Failed     <invalid> (x4 over <invalid>)  kubelet, k8node1   Failed to pull image "busybox:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/library/busybox/manifests/latest: unauthorized: incorrect username or password
 Warning  Failed     <invalid> (x4 over <invalid>)  kubelet, k8node1   Error: ErrImagePull
 Normal   BackOff    <invalid> (x6 over <invalid>)  kubelet, k8node1   Back-off pulling image "busybox:latest"
 Warning  Failed     <invalid> (x6 over <invalid>)  kubelet, k8node1   Error: ImagePullBackOff

Как я понял, он пытается вытащить образ busybox: latest, используя учетные данные для частного репозитория. Ожидаемый результат - вытащить busybox: latest без ошибок и вытащить мой собственный образ из моего личного репо. Как исправить вышеуказанную проблему?


person florin    schedule 25.11.2019    source источник


Ответы (2)


Эта ошибка не связана с тем, что вы используете imagePullSecret.

Просмотрите процесс. вы использовали для создания своего секрета, вот пример:

kubectl create secret docker-registry anyname \
--docker-server=docker.io \
--docker-username=<username> \
--docker-password=<password> \
--docker-email=<email>

Я воспроизвел ваш случай, и у меня такая же ошибка, когда я создаю секрет с неверной информацией.

person Mark Watney    schedule 25.11.2019
comment
обратите внимание, что если ваш пароль содержит $, вы должны экранировать его, используя \ $ - person samasoulé; 24.02.2021

Вы добавили частное репо в реестр Docker In-Secure? Вы также пробовали войти в свое частное репо с помощью входа в докер? Когда вы это сделаете, он создает запись в кредитах для входа.
Попробуйте выполнить извлечение вручную, используя вход в систему и запрос / запуск в докере. Если это работает, он должен работать и с K8s.

person Srini M    schedule 25.11.2019
comment
Я не знаю, что такое Docker In-Secure Registry. Я могу вручную вытащить и запустить изображение после входа в докер, поэтому с этой стороны нет проблем. Одна вещь: при создании секрета мне нужно указать некоторые параметры. Я не уверен, что --docker-server, потому что я не знаю формат docker-хаба для этого параметра. Теперь я установил репозиторий - person florin; 25.11.2019
comment
Вот пример того, как создать секрет: kubectl create secret docker-registry anyname --docker-server=docker.io --docker-username=<username> --docker-password=<password> --docker-email=<email> - person Mark Watney; 25.11.2019
comment
Вы работаете через корпоративный прокси? - person Srini M; 25.11.2019
comment
@SriniM нет, у меня нет прокси. - person florin; 25.11.2019
comment
Пожалуйста, взгляните на это. stackoverflow.com/questions/55773755/ - person Srini M; 25.11.2019
comment
@mWatney это сработало, используя ваш, я могу принять это, если вы отправите ответ - person florin; 25.11.2019