前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过Harbor解决Docker Hub拉取速率限制问题

通过Harbor解决Docker Hub拉取速率限制问题

作者头像
云云众生s
发布2024-03-28 15:22:55
3980
发布2024-03-28 15:22:55
举报
文章被收录于专栏:云云众生s

在Kubernetes中设置Harbor代理缓存和Harbor容器Webhook以解决Docker Hub拉取速率限制问题。

译自 Setup Harbor Proxy Cache and Harbor Container Webhook to overcome Docker Hub Pull Rate Limits in Kubernetes

在您的 Kubernetes 集群中,您可能会遇到以下问题:

代码语言:javascript
复制
NAME READY STATUS RESTARTS AGE
pod01 1/2 ImagePullBackOff 0 24s

"ImagePullBackOff" 错误是 Kubernetes 中常见的错误,表明 pod 中的某个容器无法从注册中心检索到必要的镜像。为了进一步了解问题的原因,您可以描述该 pod:

代码语言:javascript
复制
kubectl describe pod01

该命令会提供详细的错误分析。在示例输出中,您可能会看到:

代码语言:javascript
复制
Error: ImagePullBackOff
Normal Pulling 15s (x2 over 38s) kubelet Pulling image "<SOME-IMAGE>"
Warning Failed 10s (x2 over 32s) kubelet Failed to pull image "<SOME-IMAGE>": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/<SOME-IMAGE>": failed to copy: httpReadSeeker: failed open: unexpected status code https://registry-1.docker.io/v2/<SOME-IMAGE-WITH-SOME-ID>: 429 Too Many Requests - Server message: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit

在这种情况下,您正面临Docker Hub对匿名帐户的拉取速率限制。 该限制意味着您在特定时间范围内超过了允许的拉取次数。

解决此问题的方法很多。在本博客文章中,我们将探索一个解决方案,通过使用 Harbor 为 Docker Hub 设置代理缓存。 此外,我们将指导您安装和配置 Harbor 容器Webhook。 这个 webhook 将自动将任何 Docker Hub 镜像拉取请求重定向到您在 Harbor 注册表中配置的代理缓存。

尽管存在其他替代方案,但这种方法的优点在于其简单性——无需修改任何YAML文件。

此设置的先决条件包括:

在Harbor上设置代理缓存

要在 Harbor 上设置代理缓存,可以遵循此过程

第一步是在 Harbor 实例上配置注册表端点,该选项可在 Administration->Registries 下提供。

使用测试连接验证连接。 访问秘密设置在Docker Hub帐户设置页面上。

下一步是在Harbor中配置一个新的项目,该项目链接到新的Registry端点:

现在您可以测试代理缓存是否正常工作:

代码语言:javascript
复制
docker pull <YOUR-HARBOR-URL>/docker_hub/goharbor/harbor-core:dev

安装和配置Harbor容器Webhook

现在是时候安装和配置Harbor容器Webhook了。首先为webhook创建一个新的命名空间,并切换到该命名空间:

代码语言:javascript
复制
kubectl create ns harbor-containerwebhook
kubectl config set-context --current --namespace=harbor-container-webhook

将项目克隆到本地系统:

代码语言:javascript
复制
git clone https://github.com/indeedeng-alpha/harbor-container-webhook/

切换到/deploy/charts/harbor-container-webhook文件夹,配置helmchart的values.yaml文件以反映您的配置。我对values.yaml文件的更改是:

代码语言:javascript
复制
imagePullSecrets:
  - name: regcred

注意:webhook最初使用的镜像也来自Docker Hub。如果您已经面临Docker拉取速率限制,您可能需要创建一个包含Docker Hub登录凭据的Secret,并将该Secret附加到values.yaml文件中。

代码语言:javascript
复制
kubectl create secret docker-registry regcred --docker-server=https://index.docker.io/v1/ --docker-username=<DOCKERHUB-ID> --docker-password=<DOCKERHUB-TOKEN> --docker-email=<DOKERHUB-EMAIL>

在harbor-container-webhook命名空间中创建此Secret。

现在配置values.yaml文件的其余部分。

代码语言:javascript
复制
## configures the webhook rules, which are evaluated for each image in a pod
rules:
  - name: 'docker.io rewrite rule'
    # image refs must match at least one of the rules, and not match any excludes
    matches:
      - '^docker.io'
#    excludes:
#      # for example, exclude ubuntu from harbor's proxy cache
#      - '^docker.io/(library/)?ubuntu:.*$'
    replace: '<HARBOR-URL>/docker_hub'
    checkUpstream: true
#  - name: 'docker.io ubuntu rewrite rule'
#    # image refs must match at least one of the rules, and not match any excludes
#    matches:
#      - '^docker.io/(library/)?ubuntu:.*$'
#    replace: 'harbor.example.com/ubuntu-proxy'
#    checkUpstream: true # tests if the manifest for the rewritten image exists

现在安装webhook:

代码语言:javascript
复制
helm install harbor-container-webhook ./

就这么简单!您的Docker Hub镜像拉取请求现已被重定向到Harbor缓存代理,不会再面临速率限制问题!希望这篇文章对您有帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-222,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在Harbor上设置代理缓存
  • 安装和配置Harbor容器Webhook
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档