kubernetes无法提取私有图像[谷歌云容器注册中心,数字海洋]
我正试图和库伯内特斯建立GCR 获取错误:ErrImagePull 未能提取映像“eu.gcr.io/xxx/nodejs”:rpc错误:code=Unknown desc=来自守护程序的错误响应:eu.gcr.io/xxx/nodejs的提取访问被拒绝,存储库不存在或可能需要“docker登录” 虽然我已经在服务帐户中正确设置了秘密,并在部署规范中添加了镜像拉秘密 部署.ymlkubernetes无法提取私有图像[谷歌云容器注册中心,数字海洋],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:
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,它就不起作用了。它必须是编辑器+对象查看器吗?