有没有一种方法可以在Kubernetes中配置Docker Hub Pro用户?

3
我们刚刚购买了Docker Hub Pro用户,这样我们就不必担心拉取速率限制的问题了。
现在,我正在尝试设置Docker Hub Pro用户,但遇到了问题。是否有一种方法可以全局设置hub.docker.com的凭据?
在kubernetes文档中,我找到了以下文章:Kubernetes | Configure nodes for private registry 在每个节点上,我都使用凭据执行了docker login,将config.json复制到/var/lib/kubelet,并重新启动了kubelet。但由于速率限制,我仍然遇到了ErrImagePull错误。
我已将config.json复制到以下位置:
- /var/lib/kubelet/config.json - /var/lib/kubelet/.dockercfg - /root/.docker/config.json - /.docker/config.json
有一个选项可以使用密钥进行身份验证。问题是,我们需要编辑数百个statefulsets、部署和deamonsets。因此,全局设置docker用户将是很好的选择。
这是config.json:
{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "[redacted]"
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/19.03.13 (linux)"
        }
}

为了检查它是否实际上使用我创建的用户登录,我在我的账户中创建了一个访问令牌。在那里,我可以看到使用该令牌的最后一次登录。最后一次登录是我执行docker login命令时。因此,我尝试拉取的镜像没有使用这些凭据。 有任何想法吗?谢谢!
3个回答

6

Kubernetes使用镜像拉取秘钥实现此功能。 此文档更好地介绍了整个过程

使用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

或者在用户级别使用 secret(将镜像拉取密钥添加到服务账户

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

  2. open the sa.yaml file, delete line with key resourceVersion, add lines with imagePullSecrets: and save.

    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. Finally replace the serviceaccount with the new updated sa.yaml file kubectl replace serviceaccount default -f ./sa.yaml


谢谢您的回答!问题是,我们需要更改所有部署。正如我在问题中提到的那样,这将是一项巨大的工作量。有没有一种方法可以全局设置pullsecret? - Cédric Voit
1
第一个链接包含有关配置服务帐户的参考信息:https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account - BMitch
请查看我在以下答案中的补丁脚本: https://stackoverflow.com/questions/68037678/how-to-increase-dockerhub-rate-limits-within-kubeless - AAber

0
我遇到了与 OP 相同的问题。事实证明,将 Docker 凭据文件放置于 kubelet 中适用于 Kubernetes 版本 1.18 或更高版本。我已在此进行了测试,并确认 kubelet 1.18 可以正确地获取位于 /var/lib/kubelet 中的 config.json 并验证 Docker 注册表。

0

我们在Kubernetes集群中使用docker-registry作为代理缓存,可以在配置中设置Docker Hub凭据。通过在/etc/docker/daemon.json中设置registry-mirror,可以配置Kubernetes节点上的Docker守护程序以使用代理。

这样,您就不需要修改任何Kubernetes清单以包括拉取密钥。我们的完整设置在博客文章中有描述。


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