首页 > 解决方案 > 在不使用 imagePullSecrets 的情况下从 kubernetes 中的私有存储库中提取图像

问题描述

我是 kubernetes 部署的新手,所以我想知道是否可以在不使用imagePullSecrets部署 yaml 文件的情况下从私有 repo 中提取图像,或者是否必须创建一个 docker 注册表秘密并在 imagePullSecrets 中传递该秘密。我还考虑将 imagePullSecrets 添加到服务帐户,但这不是我想知道的要求,如果我在变量中设置凭据,kubernetes 可以使用它们来提取这些图像。还想知道如何实现它并且参考文档会起作用提前谢谢。

标签: dockerkubernetesregistryprivatejfrog-container-registry

解决方案


只要您在 Kubernetes 节点上使用 Docker(请注意,Docker 支持本身最近在 Kubernetes 中已被弃用),您就可以根据您的私有注册表对节点本身上的 Docker 引擎进行身份验证。

本质上,这归结为docker login在您的机器上运行,然后将生成的凭证 JSON 文件直接复制到您的节点上。当然,这仅在您可以直接控制节点配置时才有效。

有关更多信息,请参阅文档

如果您在节点上运行 Docker,则可以将 Docker 容器运行时配置为对私有容器注册表进行身份验证。

如果您可以控制节点配置,则此方法适用。

Docker 将私有注册表的密钥存储在$HOME/.dockercfgor$HOME/.docker/config.json文件中。如果您将相同的文件放在下面的搜索路径列表中,kubelet 会在拉取镜像时将其用作凭证提供程序。

  • {--root-dir:-/var/lib/kubelet}/config.json
  • {cwd of kubelet}/config.json
  • ${HOME}/.docker/config.json
  • /.docker/config.json
  • {--root-dir:-/var/lib/kubelet}/.dockercfg
  • {cwd of kubelet}/.dockercfg
  • ${HOME}/.dockercfg
  • /.dockercfg

注意:您可能必须HOME=/root在 kubelet 进程的环境中显式设置。

以下是配置节点以使用私有注册表的推荐步骤。在此示例中,在您的台式机/笔记本电脑上运行这些:

  • docker login [server]为您要使用的每组凭据运行。这会$HOME/.docker/config.json在您的 PC 上更新。
  • 在编辑器中查看$HOME/.docker/config.json以确保它仅包含您要使用的凭据。
  • 获取您的节点列表;例如:
    • 如果你想要名字:nodes=$( kubectl get nodes -o jsonpath='{range.items[*].metadata}{.name} {end}' )
    • 如果要获取 IP 地址:nodes=$( kubectl get nodes -o jsonpath='{range .items[*].status.addresses[?(@.type=="ExternalIP")]}{.address} {end}' )
  • 将您的本地复制.docker/config.json到上​​面的搜索路径列表之一。例如,要对此进行测试:for n in $nodes; do scp ~/.docker/config.json root@"$n":/var/lib/kubelet/config.json; done

注意:对于生产集群,请使用配置管理工具,以便您可以将此设置应用于您需要它的所有节点。


推荐阅读