Использование образов докеров частного реестра в Kubernetes при запуске с помощью развертывания стека докеров

У меня есть простой файл docker-compose, подобный следующему:

version: "3.7"
services: 
  mongo:
    image: asia.gcr.io/myproj/mymongo:latest
    hostname: mongo
    volumes: 
      - type: bind
        source: $MONGO_DB_DATA
        target: /data/db
    command: [ "--bind_ip_all", "--replSet", "rs0", "--wiredTigerCacheSizeGB", "1.5"]

Я запускаю его в Kubernetes с помощью следующей команды

docker-compose config | docker stack deploy    --orchestrator kubernetes --compose-file - mystack

Однако, когда модуль выходит из строя с этой ошибкой

Failed to pull image "asia.gcr.io/myproj/mymongo:latest": rpc error: code = Unknown desc = Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication

Мой частный реестр — это gcloud. Я уже вошел в докер, как показано ниже, используя ключевой файл учетной записи службы.

docker login  -u _json_key -p "$(cat keyfile.json)" https://asia.gcr.io

Изображение вытягивается правильно, когда я запускаю

docker-compose pull

По этой ссылке https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/, я обнаружил, что мне нужно создать ImagePullSecrets

У меня есть два вопроса.

  1. Как я могу написать синтаксис ImagePullSecrets в моем docker-compose, чтобы на него ссылались правильно.

  2. Метод, который упоминается в ссылках, просит вас использовать файл .docker/config.json. Однако мой config.json имеет

    "auths": { "asia.gcr.io": {}, }, он не включает имя пользователя и пароль, так как я настроил его с помощью файла ключа. Как я могу это сделать?

  3. Или есть более простой способ сделать это?


person kosta    schedule 07.09.2019    source источник
comment
создать на основе существующих учетных данных kubectl create secret generic regcred \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson   -  person Adiii    schedule 07.09.2019
comment
Вы также можете сделать из командной строки kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email> 2. Укажите этот секрет в своем yaml как spec: containers: - name: private-reg-container image: <your-private-image> imagePullSecrets: - name: regcred   -  person Tarun Khosla    schedule 07.09.2019
comment
под yaml вы имеете в виду docker-compose.yml? У меня нет yaml для развертывания.   -  person kosta    schedule 07.09.2019
comment
Да, попробуйте, как указано здесь docs.docker.com/compose/compose -файл/   -  person Tarun Khosla    schedule 07.09.2019


Ответы (1)


Я решил эту проблему, сначала создав такой секрет

kubectl create secret docker-registry regcred --docker-server https://<docker registry>  --docker-username _json_key --docker-password <json key> --docker-email=<email>

а затем добавить его в учетную запись службы по умолчанию

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "regcred"}]}'
person kosta    schedule 07.09.2019