Kubernetes kubelet是否支持私人注册管理机构的Docker Credential商店?

时间:2018-04-26 17:28:47

标签: docker kubernetes kubelet

Docker有一种从远程存储中检索Docker注册表密码的机制,而不是仅仅将它们存储在配置文件中 - 这种机制称为Credentials Store。它具有类似的机制,用于检索名为Credential Helpers的特定注册表的密码。

基本上,它涉及在~/.docker/config.json中定义一个被解释为可执行文件名称的值。

{
    "credsStore": "osxkeychain"
}

credsStore键的值预先加上前缀docker-credential-,如果该路径上存在该可执行文件(例如docker-credential-osxkeychain),那么它将被执行并且是预期的将用户名和密码回显到stdout,Docker将使用该用户名和密码登录私有注册表。我们的想法是,可执行文件可以到达商店并为您检索密码,因此您不必在群集中放置大量文件,并在其中编码您的用户名/密码。

我无法获得Kubernetes kubelet来使用此凭据存储。它似乎只是忽略它,当Kubernetes试图从私人注册表下载时,我得到了一个"没有基本的身份验证凭证"错误。如果我只有config.json的用户名/密码,那么kubelet就可以了。

Kubernetes是否支持Do​​cker凭证存储/凭证助手,如果支持,我如何让它们工作?

作为参考,kubelet正在运行systemd,凭据存储可执行文件位于路径上并且正在读取config.json文件。

2 个答案:

答案 0 :(得分:2)

截至撰写本文时,根据官方文档Configuring Nodes to Authenticate to a Private Registry

,Kubernetes v1.14不支持凭据助手。
  

注意:Kubernetes截至目前仅支持docker config的auths和HttpHeaders部分。这意味着不支持凭据助手(credHelpers或credsStore)。

答案 1 :(得分:1)

是的,Kubernetes具有与secrets相同的机制,但具有扩展功能,并且包含specific secret type called 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