我尝试使用Google容器注册表,但它对我不起作用。
我写了以下containers.yaml
。
$ cat containers.yaml
version: v1
kind: Pod
spec:
containers:
- name: amazonssh
image: asia.gcr.io/<project-id>/amazonssh
imagePullPolicy: Always
restartPolicy: Always
dnsPolicy: Default
我通过以下命令运行实例。
$ gcloud compute instances create containervm-amazonssh --image container-vm --network product-network --metadata-from-file google-container-manifest=containers.yaml --zone asia-east1-a --machine-type f1-micro
我设置了以下acl权限。
# gsutil acl ch -r -u <project-number>@developer.gserviceaccount.com:R gs://asia.artifacts.<project-id>.appspot.com
但是当Docker从Google Container Registry中提取图片时,会发生拒绝访问。
# docker pull asia.gcr.io/<project-id>.a/amazonssh
Pulling repository asia.gcr.io/<project-id>.a/amazonssh
FATA[0000] Error: Status 403 trying to pull repository <project-id>/amazonssh: "Access denied."
答案 0 :(得分:4)
您是否可以通过实例验证是否可以从Google云端存储分区读取数据?这可以通过以下方式验证:
$ curl -H 'Metadata-Flavor: Google' $SVC_ACCT/scopes
...
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/devstorage.read_only
...
如果是,请尝试:
在Google Compute Engine上,您可以在不使用gcloud的情况下登录:
$ METADATA=http://metadata.google.internal./computeMetadata/v1
$ SVC_ACCT=$METADATA/instance/service-accounts/default
$ ACCESS_TOKEN=$(curl -H 'Metadata-Flavor: Google' $SVC_ACCT/token \
| cut -d'"' -f 4)
$ docker login -e not@val.id -u _token -p $ACCESS_TOKEN https://gcr.io
然后再次尝试你的docker pull命令。
答案 1 :(得分:0)
你在项目ID之后有一个额外的.a
,不确定你是否以这种方式运行命令?
docker pull asia.gcr.io/<project-id>.a/amazonssh
container-vm以root身份运行gcloud docker -a
的cron作业,因此您应该能够以docker pull
为根。
启动container-vm Docker容器的kubelet也了解如何使用GCR进行本机身份验证,因此它应该可以正常工作。
欢迎通过gcr-contact@google.com与我们联系。如果你可以在你的container-vm中包含你的project-id和/var/log/kubelet.log,那将会非常有用。