kubernetes无法提取私有图像[谷歌云容器注册中心,数字海洋]

kubernetes无法提取私有图像[谷歌云容器注册中心,数字海洋],kubernetes,google-container-registry,Kubernetes,Google Container Registry,我正试图和库伯内特斯建立GCR 获取错误:ErrImagePull 未能提取映像“eu.gcr.io/xxx/nodejs”:rpc错误:code=Unknown desc=来自守护程序的错误响应:eu.gcr.io/xxx/nodejs的提取访问被拒绝,存储库不存在或可能需要“docker登录” 虽然我已经在服务帐户中正确设置了秘密,并在部署规范中添加了镜像拉秘密 部署.yml apiVersion: extensions/v1beta1 kind: Deployment metadata:

我正试图和库伯内特斯建立GCR

获取错误:ErrImagePull 未能提取映像“eu.gcr.io/xxx/nodejs”:rpc错误:code=Unknown desc=来自守护程序的错误响应:eu.gcr.io/xxx/nodejs的提取访问被拒绝,存储库不存在或可能需要“docker登录”

虽然我已经在服务帐户中正确设置了秘密,并在部署规范中添加了镜像拉秘密

部署.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

我如何调试这个,欢迎任何想法

问题似乎是由于缺少对相关服务帐户的权限造成的 XXXXXXXXXX-compute@XXXXXX.gserviceaccount.com缺少编辑器角色

此外,我们需要将权限分配范围限制为仅从google kubernetes引擎推拉图像,此帐户将需要storage admin view权限,可以按照本文[1]中提到的说明分配该权限

此外,要在创建Google Kubernetes引擎集群时设置读写存储作用域,请使用--scopes选项提及此作用域“storage rw”[2]

[1]
[2] “

如果用于推拉图像的VM实例和容器注册表存储桶位于同一个Google云平台项目中,则计算引擎默认服务帐户配置有推拉图像的适当权限

如果VM实例位于不同的项目中,或者该实例使用不同的服务帐户,则必须配置对存储库使用的存储桶的访问权限

默认情况下,计算引擎VM具有为存储桶配置的只读访问范围。要推送专用Docker映像,您的实例必须按照访问范围中的说明配置读写存储访问范围。 请提供以下资料以供进一步参考:

请按下表:

操作权限角色标题
Pull(只读)-storage.objects.get角色/storage.objectViewer存储对象查看器 storage.objects.list


此外,如果您在任何步骤中遇到问题,您可以分享是否有任何错误代码。

请注意,您的密码文件中没有错误的换行符。key.json可以。我正在将其用于Digital Ocean,这是GCP上的权限问题,但是,我创建了一个具有这些权限的新角色,它仍然有相同的错误,还使用了Storage Viewer,并验证了它可以访问此存储桶,并且它有任何想法,但仍然有相同的错误?显然,只有当我创建了一个具有“编辑器”角色的服务帐户时,它才能工作,否则,如果我将权限细化到storage viewer或storage admin,它就不起作用了。它必须是编辑器+对象查看器吗?