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是否支持Docker凭证存储/凭证助手,如果支持,我如何让它们工作?
作为参考,kubelet正在运行systemd
,凭据存储可执行文件位于路径上并且正在读取config.json
文件。
答案 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