【问题标题】:Pulling images from private repository in kubernetes without using imagePullSecrets在不使用 imagePullSecrets 的情况下从 kubernetes 中的私有存储库中提取图像
【发布时间】:2020-12-18 11:30:56
【问题描述】:

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

【问题讨论】:

    标签: docker kubernetes registry private jfrog-container-registry


    【解决方案1】:

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

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

    更多信息请见the documentation

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

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

    Docker 将私有注册表的密钥存储在 $HOME/.dockercfg$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

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

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

    • 为您要使用的每组凭据运行docker login [server]。这会在您的 PC 上更新 $HOME/.docker/config.json
    • 在编辑器中查看 $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

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

    【讨论】:

    • 如果我记得 config.json 中的正确凭据未加密,是否有解决方案来防止这种情况?
    • @cnu 你可以看看"Docker credential helpers" project——我自己没有使用过它(也无法证明它的效果如何),但它声称将 Docker 凭证存储与本机集成操作系统功能(如 Linux 上的 D-BUS 秘密服务)
    【解决方案2】:

    如果 Kubernetes 集群是私有的,您可以在同一集群中使用其 Helm Chart 部署自己的私有(且免费)JFrog Container Registry

    一旦它运行,您应该允许匿名访问注册表以避免需要登录才能提取图像。

    如果您阻止外部访问,您仍然可以访问创建的内部 k8s 服务并将其用作您的“私有注册表”。

    通读文档并查看各种选项。

    另一个好处是 JCR(JFrog Container Registry)也是 Helm 存储库和通用文件存储库,因此它不仅可以用于 Docker 映像。


    【讨论】:

      猜你喜欢
      • 2020-11-02
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多