有没有办法在 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 复制到以下位置:
- /var/lib/kubelet/config.json
- /var/lib/kubelet/.dockercfg
- /root/.docker/config.json
- /.docker/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)
kubectl get serviceaccounts default -o yaml > ./sa.yaml
打开 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
最后用新更新的 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 注册表。
我们刚刚购买了一个 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 复制到以下位置:
- /var/lib/kubelet/config.json
- /var/lib/kubelet/.dockercfg
- /root/.docker/config.json
- /.docker/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)
kubectl get serviceaccounts default -o yaml > ./sa.yaml
打开 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
最后用新更新的 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 注册表。