Kubernetes PullImageError使用带有私有映像的Docker Hub
我正在努力让Kubernetes使用我的私有hub.docker.com注册表映像 我使用的是kubectl版本:Kubernetes PullImageError使用带有私有映像的Docker Hub,docker,kubernetes,docker-registry,Docker,Kubernetes,Docker Registry,我正在努力让Kubernetes使用我的私有hub.docker.com注册表映像 我使用的是kubectl版本:客户端版本:version.Info{Major:“1”,Minor:“1+”,GitVersion:“v1.1.0-alpha.0.1588+e44c8e6661c931”,GitCommit:“e44c8e6661c931f7fd434911b0d3bca140e1df3a”,GitRestate:“clean”} 服务器版本:Version.Info{Major:“1”,Min
客户端版本:version.Info{Major:“1”,Minor:“1+”,GitVersion:“v1.1.0-alpha.0.1588+e44c8e6661c931”,GitCommit:“e44c8e6661c931f7fd434911b0d3bca140e1df3a”,GitRestate:“clean”}
服务器版本:Version.Info{Major:“1”,Minor:“1”,GitVersion:“v1.1.3”,GitCommit:“6a81b50c7e97bbe0ade075de55ab4fa34f049dc2”,GitTreeState:“clean”}
Mac OS X上的流浪者1.7.4
Yosemite 10.10.5
我遵照这里的指示:
简而言之,它说您应该登录到注册表,然后对结果.docker/config.json
的内容进行base64编码,并在yaml文档中使用,如下所示:
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
data:
.dockercfg: eyAiYXV0aHMiOiB7ICJodHRwczovL2luZGV4LmRvY2tlci5pby92MS8iOiB7ICJhdXRoIjogImFXNTBjbWx1YzJsak9tSTJVVTR5Z...h1YkBpbnRyaW5zaWMud29ybGQiIH0gfSB9Cg==
type: kubernetes.io/dockercfg
然后把它喂给库贝特。然后,我在pod定义中使用了结果键(这里称为myregistrykey
):
apiVersion: v1
kind: Pod
metadata:
name: authorities-backend
spec:
containers:
- name: authorities-backend
image: intrinsic/authorities-backend:latest
imagePullSecrets:
- name: myregistrykey
并kubectl创建它
但是,kubectl始终无法检索图像:
[root@kubernetes-master intrinsic]# kubectl get pods
NAME READY STATUS RESTARTS AGE
authorities-backend 0/1 PullImageError 0 7m
码头工人拉上了库伯内特斯船长的工作
我错过了什么
更新
在上面的pod定义中,我忽略了指定注册表主机,即docker.io。修复它,它将变成:
image:docker.io/intrinsive/authorities后端:最新
然而,问题依然存在。执行kubectl获取事件-w
获取我:
6s 0s 2 authorities backend Pod spec.containers{authorities backend}失败{kubelet 10.245.1.3}未能拉取映像“docker.io/instruction/authorities backend”:docker.io/instruction/authorities-backend的映像拉取失败,这可能是因为此请求上没有凭据。详细信息:(错误:映像内部/权限后端:未找到最新版本)
我知道该秘密已被正确注册,正如我在kubectl get secrets
下所述:
名称类型数据时代
default-token-a7s5n kubernetes.io/service-account-token 2 51m
myregistrykey kubernetes.io/dockercfg 1 50m
仍然困惑
Candide因此,我一直在网上寻找问题的答案,最终发现:
在线程的最末端,JW27已将其锁定。提到.dockercfg.json
文件只是为了说明其内容需要进行base64编码。这个文件实际上有两个问题:
看起来它实际上变成了另一个文件,即.docker/config.json
此文件中的身份验证信息由附加的auths
对象包装,您必须删除这些对象
引用jjw27
不起作用:
{
"auths": {
"hub.example.com:1024": {
"auth": "asdf=",
"email": "example@example.com"
}
}
}
工作:
{
"hub.example.com:1024": {
"auth": "asdf=",
"email": "example@example.com"
}
}
谷歌,请更新这个文件
给Kubernetes开发人员的信息#2:另外,不抱怨格式错误的base64编码秘密是非常误导的。请验证用户输入并投诉是否包含错误。文档已过期,因为它引用的是.dockercfg
,而不是.docker/config.json
。我会更新的
使用新的.docker/config.json
格式时,需要设置类型:kubernetes.io/dockerconfigjson
,而不是类型:kubernetes.io/.dockercfg
v1.1.0中添加了对type:kubernetes.io/dockerconfigjson
的支持,因此服务器支持它,但客户端不支持它(这是v1.1.0-alpha,早于v1.1.0)
当您使用type:kubernetes.io/dockerconfigjson
时,它应该验证您的机密内容
使用type:kubernetes.io/dockerconfigjson
,您确实希望保留auths
包装器 修复文档。欢迎您的审阅。实际上,由于疏忽,Kubernetes当前没有验证类型:Kubernetes.io/dockerconfigjson
。我写这封信是为了解决这个问题。谢谢这个Eric-文档工作得很好。小毛病:我不能实际执行nodes=$(kubectl get nodes-o jsonpath='{range.items[*].metadata}{.name}{end}')
(getting错误:输出格式“jsonpath={range.items[*].metadata}{.name}{end}”无法识别
),可能是因为我不知道如何执行。如果再明确一点就好了。