gcloud群集无法提取eu.gcr.io身份验证要求

时间:2018-10-28 16:43:25

标签: docker authentication kubernetes gcloud kubernetes-helm

我已经通过gitlab在gcloud上建立了Kubernetes集群。

在部署应用程序时,我在提取图像时遇到一些麻烦。

我在同一个gcloud项目上使用带有注册表的gcloud集群。通常,我可以直接进行镜像而无需进行任何修改(假定使用 Compute Engine默认服务帐户?)。

但是当他尝试拉出图像时,我在我的吊舱上遭到未经授权的访问:

  Warning  Failed                 3m (x2 over 3m)  kubelet, gke-production-default-pool-********-****  Failed to pull image "eu.gcr.io/[My-Project]/services-identity:715bfffa": rpc error: code = Unknown desc = unauthorized: authentication required
  Warning  Failed                 3m (x2 over 3m)  kubelet, gke-production-default-pool-********-****  Error: ErrImagePull
  Normal   BackOff                2m (x6 over 3m)  kubelet, gke-production-default-pool-********-****  Back-off pulling image "eu.gcr.io/[My-Project]/services-identity:715bfffa"
  Warning  Failed                 2m (x6 over 3m)  kubelet, gke-production-default-pool-********-****  Error: ImagePullBackOff
  Normal   Pulling                2m (x3 over 3m)  kubelet, gke-production-default-pool-********-****  pulling image "eu.gcr.io/[My-Project]/services-identity:715bfffa"

我使用以下命令行通过gitlab-ci进行部署:

helm upgrade --install services-identity -f ./deploy/env/production-values.yml ./deploy/ --set image.tag=${CI_COMMIT_SHA:0:8} --namespace=production --wait

有关信息,我可以在此注册表公开时拉注册表,也可以通过docker登录(使用我的gcloud帐户)在本地拉映像。

谢谢您的建议。

2 个答案:

答案 0 :(得分:1)

这与What's the minimal permissions I need to configure for a GKE node pool to pull from a private GCR repo in the same project?非常相似,除了您没有提到它在GKE上,所以我认为它在GCE上。

您可以使用json_key_file

在所有节点上(假设您正在使用Docker):

$ docker login -u _json_key --password-stdin https://gcr.io

或按照ImagePullSecrets中所述,在pod规范中使用here使用相同的json_key_file。

或者您可以在所有Kubernetes节点上使用:

$ gcloud auth configure-docker

答案 1 :(得分:0)

感谢您的有益回应。在您分享的类似问题上,我找到了解决方案Use Least Privilege Service Accounts for your Nodes

问题出在 Cloud API访问范围级别,我重新创建了具有正确范围的InstanceGroup:

  

GKE中节点的默认范围是devstorage.read_only,   logging.write,监视,service.management.readonly,   servicecontrol和trace.append。设置范围时,这些是   指定为gke-default。如果您要访问   Google Container Registry,最低要求的范围仅   logging.write,监视和devstorage.read_only。