Kubernetes kubelet支持Docker凭据存储库用于私有注册表吗?

4
Docker有一种机制可以从远程存储中检索Docker注册表密码,而不仅仅是将它们存储在配置文件中 - 这种机制称为凭据存储。 它还具有类似的机制,用于检索特定注册表的密码,称为凭据助手
基本上,它涉及在~/.docker/config.json中定义一个值,该值被解释为可执行文件的名称。
{
    "credsStore": "osxkeychain"
}
credsStore键的值具有前缀docker-credential-,如果该可执行文件(例如docker-credential-osxkeychain)存在于路径中,则该可执行文件将被执行,并期望将用户名和密码回显到stdout,Docker将使用它来登录到私有注册表。这个想法是,可执行文件会联系存储库并为您检索密码,因此您不必在集群中留下许多带有编码的用户名/密码的文件。
我无法使Kubernetes kubelet使用此凭据存储。它似乎只是忽略它,当Kubernetes尝试从私有注册表下载时,我会收到“没有基本身份验证凭据”的错误。如果我只有一个包含用户名/密码的config.json文件,则kubelet可以正常工作。
Kubernetes是否支持Docker凭据存储/凭据助手?如果支持,我该如何让它们工作?
供参考,kubelet通过systemd运行,凭证存储可执行文件位于路径上,config.json文件正在被读取。
2个回答

5

截至撰写本文时,根据官方文档配置节点以对私有仓库进行身份验证,Kubernetes v1.14不支持凭证助手。

注意:目前Kubernetes仅支持docker配置文件中的auths和httpHeaders部分。这意味着不支持凭证助手(credHelpers或credsStore)。


0

是的,Kubernetes 有同样的机制称为 secrets,但具有扩展功能,其中包括 名为docker-registry的特定密码类型。您可以创建用于 Docker Registry 的凭据的特定密码:

$ kubectl create secret docker-registry myregistrykey \
 --docker-server=DOCKER_REGISTRY_SERVER \
 --docker-username=DOCKER_USER \
 --docker-password=DOCKER_PASSWORD \
 --docker-email=DOCKER_EMAIL

secret "myregistrykey" created.

并使用它:

apiVersion: v1
kind: Pod
metadata:
  name: foo
  namespace: awesomeapps
spec:
  containers:
    - name: foo
      image: janedoe/awesomeapp:v1
  imagePullSecrets:
    - name: myregistrykey

1
不,这完全不是同样的机制。你所描述的 imagePullSecrets 机制意味着你需要将你的密钥放在 etcd 中,这绝对不同于将它们放在企业级密钥保险库中。我也不明白 Kubelet 如何依靠你所描述的机制来访问其基础设施容器,当它启动集群时。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接