有没有办法在 kubernetes 中配置 docker hub pro 用户?

Is there a way to configure docker hub pro user in kubernetes?

我们刚刚购买了一个 docker hub pro 用户,这样我们就不必担心拉取速率限制。

现在,我在尝试设置 docker hub pro 用户时遇到了问题。有没有办法全局设置 hub.docker.com 的凭据?

在 kubernetes 文档中我找到了以下文章:Kubernetes | Configure nodes for private registry

在每个节点上,我使用凭据执行 docker 登录,将 config.json 复制到 /var/lib/kubelet 并重新启动 kubelet。但由于这些速率限制,我仍然收到 ErrImagePull。

我已将 config.json 复制到以下位置:

可以选择使用密码进行身份验证。问题是,我们需要编辑数百个状态集、部署和 deamonset。因此,全局设置 docker 用户会很棒。

这是config.json:

{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "[redacted]"
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/19.03.13 (linux)"
        }
}

为了检查它是否真的用我在我的帐户中创建了访问令牌的用户登录。在那里我可以看到使用所述令牌的最后一次登录。最后一次登录是在我执行 docker 登录命令时。所以我尝试提取的图像没有使用这些凭据。

有什么想法吗?

谢谢!

Kubernetes 使用 image pull secrets. This doc does a better job at walking through the process.

实现了这一点

使用 Docker config.json:

kubectl create secret generic regcred \
    --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
    --type=kubernetes.io/dockerconfigjson

或者直接传设置:

kubectl create secret docker-registry <name> --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL

然后在您的 pod 定义中使用这些秘密:

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

或者在用户级别使用密码 (Add image pull secret to service account)

  1. kubectl get serviceaccounts default -o yaml > ./sa.yaml

  2. 打开 sa.yaml 文件,删除带有键 resourceVersion 的行,添加带有 imagePullSecrets: 的行并保存。

    kind: ServiceAccount
    metadata:
      creationTimestamp: "2020-11-22T21:41:53Z"
      name: default
      namespace: default
      selfLink: /api/v1/namespaces/default/serviceaccounts/default
      uid: afad07eb-f58e-4012-9ccf-0ac9762981d5
    secrets:
    - name: default-token-gkmp7
    imagePullSecrets:
    - name: regcred
    
    
  3. 最后用新更新的 sa.yaml 文件替换 serviceaccount kubectl replace serviceaccount default -f ./sa.yaml

我们在/etc/docker/daemon.json中使用docker-registry as a proxy cache in our Kubernetes clusters, Docker Hub credentials may be set in the configuration. Docker daemons on Kubernetes nodes are configured to use the proxy by setting registry-mirror

这样,您无需修改​​任何 Kubernetes 清单即可包含 pull secrets。 in a blog post.

描述了我们的完整设置

我 运行 遇到了与 OP 相同的问题。事实证明,为 kubelet 放置 docker 个凭证文件适用于 kubernetes 1.18 或更高版本。我在这里进行了测试,可以确认 kubelet 1.18 正确获取了 /var/lib/kubelet 中的 config.json 并验证了 docker 注册表。