Kubernetes: Task: Pull Image from a Private Registry

 5th June 2021 at 1:48pm

如果你使用的私有的 Docker Registry,你可能需要用用户名密码登录上它。一般用 docker login --username=<username> <registry-address> 来登录,登录完后会在 ~/.docker/config.json 中存放认证信息。

Kubernetes master 在指挥 kubelet 去拉镜像时,也需要用这份认证信息。按 Kubernetes 文档 描述,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 环境变量给 kubelet 进程(通过 cat /proc/<pid>/environ)判断,那么 ${HOME}/.docker/config.json 没有作用。

容器平台在部署 node 节点时,应该需要考虑把镜像仓库的认证信息预先生成好,写到 node 节点机器上。(不确定是否最佳实践)

用 Kubernetes 的 Secret 机制应该也可以实现一样的功能。参考 这里

参考