将图像从GCR拉入GKE

时间:2018-10-20 17:41:02

标签: kubernetes google-cloud-platform google-kubernetes-engine

今天是我与GCR和GKE合作的第一天。抱歉,如果我的问题听起来很幼稚。

因此,我在GCR中创建了一个新注册表。它是私人的。使用this文档,我使用命令获得了访问令牌

gcloud auth print-access-token
#<MY-ACCESS_TOKEN>

我知道我的用户名是oauth2accesstoken

尝试时在本地笔记本电脑上

docker login https://eu.gcr.io/v2
Username: oauth2accesstoken
Password: <MY-ACCESS_TOKEN>

我得到:

Login Successful

现在是时候在Kubernetes中创建docker-registry秘密了。

我运行了以下命令:

kubectl create secret docker-registry eu-gcr-io-registry --docker-server='https://eu.gcr.io/v2' --docker-username='oauth2accesstoken' --docker-password='<MY-ACCESS_TOKEN>' --docker-email='<MY_EMAIL>'

然后我的Pod定义如下:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: my-app
    image: eu.gcr.io/<my-gcp-project>/<repo>/<my-app>:latest
    ports:
    - containerPort: 8090
  imagePullSecrets:
  - name: eu-gcr-io-registry

但是当我旋转吊舱时,出现错误消息:

Warning  Failed                 4m (x4 over 6m)   kubelet, node-3  Failed to pull image "eu.gcr.io/<my-gcp-project>/<repo>/<my-app>:latest": rpc error: code = Unknown desc = Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication

我验证了我的机密,检查了YAML文件并在base64 --decode上进行了.dockerconfigjson,这是正确的。

那我在这里错过了什么?

1 个答案:

答案 0 :(得分:10)

如果您的GKE群集和GCR注册表位于同一项目中:您无需配置身份验证。 GKE集群被授权从同一项目中的私有GCR注册表中提取数据,而无需进行配置。 (很可能您就是这个!)


如果您的GKE群集和GCR注册表位于不同的GCP项目中:请按照以下说明授予GKE群集的“服务帐户”访问权限,以读取GCR群集中的私有映像:{{3} }

总而言之,这可以通过以下方式完成:

gsutil iam ch  serviceAccount:[PROJECT_NUMBER]-compute@developer.gserviceaccount.com:objectViewer gs://[BUCKET_NAME]

其中[BUCKET_NAME]是存储您的GCR映像的GCS存储桶(例如artifacts.[PROJECT-ID].appspot.com),而[PROJECT_NUMBER]是托管您的GKE集群的数字 GCP项目ID。 / p>