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

Céd*_*oit 3 docker kubernetes dockerhub

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

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

在 kubernetes 文档中,我找到了以下文章:Kubernetes | 为私有注册表配置节点

在每个节点上,我使用凭据执行了 docker 登录,将 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

可以选择使用秘密进行身份验证。问题是,我们需要编辑数百个有状态集、部署和解除集。所以如果能全局设置 docker 用户就好了。

这是 config.json:

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

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

有任何想法吗?

谢谢你!

BMi*_*tch 6

Kubernetes 使用镜像拉取机密来实现这一点。该文档在演示整个过程方面做得更好

使用 Docker config.json:

kubectl create secret generic regcred \
    --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
    --type=kubernetes.io/dockerconfigjson
Run Code Online (Sandbox Code Playgroud)

或者您可以直接传递设置:

kubectl create secret docker-registry <name> --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
Run Code Online (Sandbox Code Playgroud)

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

apiVersion: v1
kind: Pod
metadata:
  name: foo
  namespace: awesomeapps
spec:
  containers:
    - name: foo
      image: janedoe/awesomeapp:v1
  imagePullSecrets:
    - name: myregistrykey
Run Code Online (Sandbox Code Playgroud)

或者在用户级别使用秘密(将图像拉取秘密添加到服务帐户

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

  2. 打开 sa.yaml 文件,删除包含 key 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
    
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后用新更新的 sa.yaml 文件替换 serviceaccount kubectl replace serviceaccount default -f ./sa.yaml