当前位置:  开发笔记 > 前端 > 正文

使用Docker Hub和私有映像的Kubernetes PullImageError

如何解决《使用DockerHub和私有映像的KubernetesPullImageError》经验,为你挑选了2个好方法。

我正在努力让Kubernetes使用我的私有hub.docker.com注册表图像.

我正在使用kubectl版本: Client Version: version.Info{Major:"1", Minor:"1+", GitVersion:"v1.1.0-alpha.0.1588+e44c8e6661c931", GitCommit:"e44c8e6661c931f7fd434911b0d3bca140e1df3a", GitTreeState:"clean"} Server Version: version.Info{Major:"1", Minor:"1", GitVersion:"v1.1.3", GitCommit:"6a81b50c7e97bbe0ade075de55ab4fa34f049dc2", GitTreeState:"clean"}

1.7.4Mac OS X上的VagrantYosemite 10.10.5

我按照这里给出的说明操作:https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/user-guide/images.md#pre-pulling-images

简而言之,它表示您应该登录到注册表,然后base64编码结果的内容.docker/config.json,并在yaml文档中使用它,如下所示:

apiVersion: v1
kind: Secret
metadata:
  name: myregistrykey
data:
  .dockercfg: eyAiYXV0aHMiOiB7ICJodHRwczovL2luZGV4LmRvY2tlci5pby92MS8iOiB7ICJhdXRoIjogImFXNTBjbWx1YzJsak9tSTJVVTR5Z...h1YkBpbnRyaW5zaWMud29ybGQiIH0gfSB9Cg==
type: kubernetes.io/dockercfg

然后将其喂给kubectl.然后myregistrykey我在我的pod定义中使用了生成的键(此处称为):

apiVersion: v1
kind: Pod
metadata:
  name: authorities-backend
spec:
  containers:
    - name: authorities-backend
      image: intrinsic/authorities-backend:latest
  imagePullSecrets:
    - name: myregistrykey

并且kubectl create它.

但是,kubectl无法检索图像:

[root@kubernetes-master intrinsic]# kubectl get pods
NAME                  READY     STATUS           RESTARTS   AGE
authorities-backend   0/1       PullImageError   0          7m

然而,停泊在Kubernetes大师身上的工作.

我错过了什么?

UPDATE

在上面的pod定义中,我省略了指定注册表主机,即docker.io.修复它,它变成: image: docker.io/intrinsic/authorities-backend:latest 然而,问题仍然存在.做得到kubectl get events -w我: 6s 0s 2 authorities-backend Pod spec.containers{authorities-backend} Failed {kubelet 10.245.1.3} Failed to pull image "docker.io/intrinsic/authorities-backend": image pull failed for docker.io/intrinsic/authorities-backend, this may be because there are no credentials on this request. details: (Error: image intrinsic/authorities-backend:latest not found) 我知道这个秘密已经正确注册,因为我有它kubectl get secrets: NAME TYPE DATA AGE default-token-a7s5n kubernetes.io/service-account-token 2 51m myregistrykey kubernetes.io/dockercfg 1 50m

仍然困惑......



1> candide..:

所以,我一直在研究网络以找到我的问题的答案,并最终发现:

https://github.com/kubernetes/kubernetes/issues/7954#issuecomment-115241561

在线程的最后,jjw27已经钉了它.该kubernetes文档中提到的.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:此外,不抱怨基本64位编码的错误信息是非常误导的.请验证用户输入并在其包含错误时进行投诉.



2> Eric Tune..:

文档已过时,因为它指的是.dockercfg而不是.docker/config.json.我会更新它.

使用新.docker/config.json格式时,需要设置type: kubernetes.io/dockerconfigjson而不是type: kubernetes.io/.dockercfg.

type: kubernetes.io/dockerconfigjson在v1.1.0中添加了对支持的支持,因此服务器支持它,但客户端不支持(v1.1.0-alpha早于v1.1.0).

使用时type: kubernetes.io/dockerconfigjson,它应验证您的秘密内容.

有了type: kubernetes.io/dockerconfigjson,你确实想要保留auths包装器.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有