我已经通过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帐户)在本地拉映像。
谢谢您的建议。
答案 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。