4

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

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

{
    "credsStore": "osxkeychain"
}

密钥的值前面credsStore有一个前缀docker-credential-,如果该可执行文件(例如docker-credential-osxkeychain)存在于路径上,那么它将被执行,并期望将用户名和密码回显到stdoutDocker 将使用该用户名和密码登录到私有注册表。这个想法是可执行文件到达商店并为您检索您的密码,因此您不必在集群中放置大量文件,其中包含您的用户名/密码编码。

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

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

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

4

2 回答 2

5

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

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

于 2019-03-28T18:31:20.120 回答
0

是的,Kubernetes 具有称为秘密的相同机制,但具有扩展功能,并且它包括称为 docker-registry 的特定秘密类型。您可以使用 docker 注册表的凭据创建您的特定密钥:

$ 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
于 2018-04-27T10:47:47.237 回答