如何解决在Kubernetes中从ARTIFACTORY中拉图像时的错误“无法拉图像…

伊诺崔
2023-01-22 11:07

主题:

在Kubernetes中从Artifactory提取图像时,如何解决“拉图像失败…需要身份验证”或“拉图像失败…令牌验证失败:签名”的错误

影响版本:

Artifactory 7.41。X及以上

描述

要创建一个pod并从私有注册中心(在我们的例子中是Artifactory)提取图像,您需要传递包含Artifactory用户凭证的秘密。apiVersion: v1
:豆荚
元数据:
名称:my-private-pod
规范:
容器:
—名称:private
图片:< ARTIFACTORY > / < DOCKER_REPO > / <图像>:<标记>
imagePullSecrets:
—name:

在Docker 1.7.0以下版本中,Docker配置保存在.dockercfg文件中。当在Kubernetes中使用这个配置文件创建一个秘密时,它会创建一个秘密类型“Kubernetes .io/dockercfg”。名称类型数据年龄
dockercfg kubernetes。Io /dockercfg 1 17m

直到Artifactory 7.39。xversion, this secret type can be used to pull Docker images from Artifactory.

然而,从7.41。X, kubernetes。Io /dockercfg " secret类型在提取图像时可能会导致以下错误,Warning Failed 1s kubelet Failed to pull image "artifactory/docker/busybox:latest": rpc error: code = Unknown desc = error response from daemon: Head "http://artifactory/v2/docker/busybox/manifests/latest": Unknown: Authentication is required .Warning Failed 1s kubelet Failed to pull image "artifactory/docker/busybox:latest": rpc error: code = Unknown desc = error response from daemon: Head "http://artifactory/v2/docker/busybox/manifests/latest": Unknown: Token Failed verification: signature

决议

为了克服这个问题,您需要创建一个新的秘密类型“kubernetes”。io/dockerconfigjson”,它是使用保存在~/. Docker /config中的新的Docker配置文件生成的。json (Docker 1.7.0及以上)。名称类型数据年龄
dockerconfigjson kubernetes。Io /dockerconfigjson 1 4s
现在,您可以使用这个秘密来创建一个pod,并成功地从Artifactory提取图像。apiVersion: v1
:豆荚
元数据:
名称:my-private-pod
规范:
容器:
—名称:private
图片:< ARTIFACTORY > /码头工人/ busybox:最新
imagePullSecrets:
—name: dockerconfigjson
Normal Pulled 4s kubelet在9.760532921s中成功拉出图像“artifactory/docker/busybox:latest”
pull image“artifactory/docker/busybox:latest”
Normal创建的1s (x2 / 4s) kubelet创建的private容器
Normal Pulled 1s kubelet在2.496841418s中成功拉出图像“artifactory/docker/busybox:latest”