kubernetes не может получить личное изображение [Реестр облачных контейнеров Google, Digital Ocean] - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь настроить GCR с kubernetes

и получаю сообщение об ошибке: ErrImagePull Не удалось получить изображение «eu.gcr.io/xxx/nodejs»: ошибка rpc: code = Unknown desc = Ошибка ответа отdaemon: доступ по запросу eu.gcr.io/xxx/nodejs запрещен, хранилище не существует или может потребоваться «вход в докер»

Хотя я правильно установил секрет в учетной записи службы и добавил секреты извлечения изображенийв спецификации развертывания

deploy.yml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.18.0 (06a2e56)
  creationTimestamp: null
  labels:
    io.kompose.service: nodejs
  name: nodejs
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: nodejs
    spec:
      containers:
      - env:
        - name: MONGO_DB
          valueFrom:
            configMapKeyRef:
              key: MONGO_DB
              name: nodejs-env
        - name: MONGO_HOSTNAME
          value: db
        - name: MONGO_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mongo-secret
              key: MONGO_PASSWORD
        - name: MONGO_PORT
          valueFrom:
            configMapKeyRef:
              key: MONGO_PORT
              name: nodejs-env
        - name: MONGO_USERNAME
          valueFrom:
            secretKeyRef:
              name: mongo-secret
              key: MONGO_USERNAME
        image: "eu.gcr.io/xxx/nodejs"
        name: nodejs
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
        resources: {}
      imagePullSecrets:
        - name: gcr-json-key
      initContainers:
        - name: init-db
          image: busybox
          command: ['sh', '-c', 'until nc -z db:27017; do echo waiting for db; sleep 2; done;']
      restartPolicy: Always
status: {}

использовал это, чтобы добавить секрет, и он сказал, что создал

kubectl create secret docker-registry gcr-json-key --docker-server=eu.gcr.io  --docker-username=_json_key  --docker-password="$(cat mycreds.json)"   --docker-email=mygcpemail@gmail.com

Как я могу отладить это, любые идеиДобро пожаловать!

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Похоже, что проблема вызвана отсутствием разрешения на соответствующую учетную запись службы XXXXXXXXXXX-compute@XXXXXX.gserviceaccount.com, в которой отсутствует роль редактора.

Кроме того, нам необходимо ограничить область назначенияРазрешения только для отправки и извлечения изображений из движка Google Kubernetes. Для этой учетной записи потребуется разрешение администратора хранилища, которое можно назначить, следуя инструкциям, упомянутым в этой статье [1].

Кроме того, для настройки чтения-записиОбласть хранения при создании кластера Google Kubernetes Engine, используйте параметр --scopes, чтобы упомянуть эту область «storage-rw» [2].

[1] https://cloud.google.com/container-registry/docs/access-control [2] https://cloud.google.com/container-registry/docs/using-with-google-cloud-platform#google-kubernetes-engine

0 голосов
/ 08 октября 2019

Если экземпляр виртуальной машины для отправки или извлечения изображений и хранилище реестра контейнеров находятся в одном проекте Google Cloud Platform, учетная запись службы Compute Engine по умолчанию настроена с соответствующими разрешениями для отправки или извлечения изображений.

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

По умолчанию Compute EngineВиртуальная машина имеет доступ только для чтения, настроенный для сегментов хранения. Для отправки частных образов Docker ваш экземпляр должен иметь область доступа к хранилищу для чтения и записи, настроенную так, как описано в областях доступа. Пожалуйста, укажите 1 для дальнейшей справки:

Пожалуйста, следуйте приведенной ниже таблице как 2 :

Название роли разрешения действия
Извлечение (только чтение) - storage.objects.get role / storage.objectViewer Средство просмотра объектов хранения storage.objects.list

Кроме того, вы можете поделиться, если есть какой-либо код ошибки, поскольку у вас возникают проблемы на любых этапах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...