今天是我与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
,这是正确的。
那我在这里错过了什么?
答案 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>