在GKE中提取docker图像
抱歉,如果这是重复的,我还没有找到类似问题的解决方案。 我正在尝试将docker图像上传到Google Kubernetes引擎。 我以前做得很成功,但这次似乎找不到我的运气 我已经用kubectl和我的Google帐户在本地设置了Google SDK,该帐户是项目所有者,拥有所有必需的权限。 当我使用在GKE中提取docker图像,docker,kubernetes,google-kubernetes-engine,Docker,Kubernetes,Google Kubernetes Engine,抱歉,如果这是重复的,我还没有找到类似问题的解决方案。 我正在尝试将docker图像上传到Google Kubernetes引擎。 我以前做得很成功,但这次似乎找不到我的运气 我已经用kubectl和我的Google帐户在本地设置了Google SDK,该帐户是项目所有者,拥有所有必需的权限。 当我使用 kubectl create deployment hello-app --image=gcr.io/{project-id}/hello-app:v1 我在我的GKE控制台上看到部署一直崩溃
kubectl create deployment hello-app --image=gcr.io/{project-id}/hello-app:v1
我在我的GKE控制台上看到部署一直崩溃,因为它“无法从存储库中提取映像。ErrImagePull无法从注册表中提取映像”
它提供了4条建议,我现在已经对它们进行了三次检查:
- 检查图像名称中的拼写错误
- 手动拉取图像时检查错误(在Cloud Shell中一切正常)
- 检查图像拉秘密设置 因此,基于此,我从一个具有项目视图权限的新服务帐户中手动添加了“gcr json密钥”,并将“gcr访问令牌”添加到kubectl默认服务帐户中
- 检查群集的防火墙以确保群集可以连接到“”。顺便说一句,对于新设置的集群来说,这不应该是一个问题
Failed to pull image "gcr.io/{project id}/hello-app:v1":
[rpc error: code = Unknown desc = Error response from daemon:
Get https://gcr.io/v2/{project id}/hello-app/manifests/v1: unknown: Unable to parse json key.,
rpc error: code = Unknown desc = Error response from daemon:
Get https://gcr.io/v2/{project id}/hello-app/manifests/v1:
unauthorized: Not Authorized., rpc error: code = Unknown desc = Error response from daemon:
pull access denied for gcr.io/{project id}/hello-app,
repository does not exist or may require 'docker login': denied:
Permission denied for "v1" from request "/v2/{project id}/hello-app/manifests/v1".]
我现在的问题是,我做错了什么,或者我如何才能找出为什么我的豆荚不能拉我的图像
Kubernetes默认服务帐户规范:
kubectl get serviceaccount -o json
{
"apiVersion": "v1",
"imagePullSecrets": [
{
"name": "gcr-json-key"
},
{
"name": "gcr-access-token"
}
],
"kind": "ServiceAccount",
"metadata": {
"creationTimestamp": "2020-11-25T15:49:16Z",
"name": "default",
"namespace": "default",
"resourceVersion": "6835",
"selfLink": "/api/v1/namespaces/default/serviceaccounts/default",
"uid": "436bf59a-dc6e-49ec-aab6-0dac253e2ced"
},
"secrets": [
{
"name": "default-token-5v5fb"
}
]
}
它确实采取了几个步骤,您引用的博客文章似乎正确地包含了这些步骤。因此,我怀疑您的错误在其中一个步骤中 两件事:
- 错误消息显示,
。您是否编辑了错误消息以删除您的无法提取图像“gcr.io/{project id}/hello app:v1”
?如果不是,那就是一个问题{project id}
- 我的下一个问题是第二行:
。这表明您创建的秘密不正确:无法解析json键
kubectl创建机密docker注册表gcr json项…
(在默认命名空间中,除非--命名空间=…
不同)
ImagePullSecrets
ImagePullSecrets
的要求,我不知道还有一种类似的kubectl run
替代方案,但是,您可以尝试从主机使用Docker访问您的图像:
见:
然后尝试docker pull gcr.io/{project id}/hello app:v1
确保用正确的GCP项目id替换{project id}
这证明:
- 服务帐户和密钥是正确的
- 容器图像是正确的
storageobjectviewer
(角色/storage.objectViewer
)
它确实采取了几个步骤,您引用的博客文章似乎正确地包含了这些步骤。因此,我怀疑您的错误在其中一个步骤中 两件事:
- 错误消息显示,
。您是否编辑了错误消息以删除您的无法提取图像“gcr.io/{project id}/hello app:v1”
?如果不是,那就是一个问题{project id}
- 我的下一个问题是第二行:
。这表明您创建的秘密不正确:无法解析json键
kubectl创建机密docker注册表gcr json项…
(在默认命名空间中,除非--命名空间=…
不同)
ImagePullSecrets
ImagePullSecrets
的要求,我不知道还有一种类似的kubectl run
替代方案,但是,您可以尝试从主机使用Docker访问您的图像:
见:
然后尝试docker pull gcr.io/{project id}/hello app:v1
确保用正确的GCP项目id替换{project id}
这证明:
- 服务帐户和密钥是正确的
- 容器图像是正确的
storageobjectviewer
(角色/storage.objectViewer
)
谢谢你详细的评论我确实编辑了错误,并更改了此帖子的项目id。-它很可能是json密钥。在第二步中,您提到要像在文章中一样添加密钥,这是否包括密钥文件的路径?因为我使用了我的本地路径,也就是说,
kubectl创建秘密docker registyr gcr json key--docker name=gcr.io--docker username=_json_key--docker password=“$(cat C:/user/{path to local key}/key.json)”--docker电子邮件=any@valid.email
-关于Kubernetes规范,我附加了默认的kubectl serviceaccount规范。鉴于本地路径和显示的版本都不起作用,我是否必须将密钥上载到云存储,并将kubectl create secret…
中的路径更改到云存储目录?看起来您正在Windows上运行。命令$(cat C:/user/{path to local key}
可能不正确。cat C:/user/{path to local key
是否显示您的密钥?echo$(cat C:/user/{path to local key}
是否执行相同的操作?在Linux上,此构造将密钥文件的值复制并粘贴到环境变量中