配置代理缓存

代理缓存允许您使用 Harbor 代理和缓存来自目标公共或私有仓库的镜像。从 Harbor v2.1.1 开始,代理缓存功能已更新,以符合 Docker Hub 的速率限制策略。如果您计划在 Harbor 实例中使用代理缓存,强烈建议您使用 v2.1.1 或更高版本,以避免受到速率限制。

您可以使用代理缓存从目标 Harbor 或非 Harbor 仓库拉取镜像,尤其适用于互联网访问受限或无互联网访问的环境。您还可以使用代理缓存来限制向公共仓库发出的请求数量,从而避免消耗过多带宽或被仓库服务器限流。

Harbor 支持以下仓库的代理缓存

  • Harbor
  • Docker Hub
  • Docker 仓库
  • AWS Elastic Container Registry
  • Azure Container Registry
  • Google Container Registry
  • Quay
  • Github Container Registry
  • JFrog Artifactory Registry

Harbor 系统管理员通过创建代理缓存项目来配置代理缓存,该项目使用您配置的仓库端点连接到目标仓库。代理缓存项目的工作方式与普通的 Harbor 项目类似,只是您无法将镜像推送到代理缓存项目。

要使用 Harbor 代理缓存,请配置您的 docker pull 命令和 Pod 清单,以便从代理缓存项目而不是目标仓库拉取镜像。

Harbor 代理缓存的工作原理

当拉取请求到达代理缓存项目时,如果镜像未被缓存,Harbor 会从目标仓库拉取镜像,并将拉取命令视为来自代理缓存项目的本地镜像。然后,代理缓存项目会缓存该镜像以供将来请求使用。

下次用户请求该镜像时,Harbor 会检查目标仓库中镜像的最新清单,并根据以下场景提供镜像

  • 如果目标仓库中的镜像未更新,则从代理缓存项目提供缓存的镜像。
  • 如果目标仓库中的镜像已更新,则从目标仓库拉取新镜像,然后在代理缓存项目中提供和缓存。
  • 如果目标仓库不可访问,则代理缓存项目提供缓存的镜像。
  • 如果镜像不再存在于目标仓库中,但仍然存在于代理缓存项目中,则从代理缓存项目提供缓存的镜像。

从 Harbor v2.1.1 开始,Harbor 代理缓存会发出 HEAD 请求,以确定 Docker Hub 仓库中缓存镜像的任何层是否已更新。使用此方法检查目标仓库不会触发 Docker Hub 速率限制器。如果任何镜像层已更新,代理缓存将拉取新镜像,这将计入 Docker Hub 速率限制器。

创建代理缓存项目

要设置代理缓存,Harbor 系统管理员可以创建一个代理缓存项目,该项目使用仓库端点连接到目标仓库。

代理缓存项目能够使用普通 Harbor 项目可用的相同功能,只是您无法将镜像推送到代理缓存项目。有关项目的更多信息,请参阅《使用项目》文档。

  1. 在创建代理缓存项目之前,请为代理缓存项目创建要使用的仓库端点。请参阅如何创建仓库端点

    代理缓存项目可以从目标仓库拉取您在仓库端点中配置的访问帐户有权访问的每个镜像。这意味着有权访问代理缓存项目的 Harbor 用户能够拉取目标仓库中访问帐户可用的任何镜像。
  2. 在“项目”页面上,单击“新建项目”并配置新项目信息。有关更多详细信息,请参阅《创建项目》文档。

  3. 单击“代理缓存”滑块,然后从出现的下拉列表中选择您的仓库端点。“带宽”是向上游仓库拉取镜像的速度限制,-1 表示无限制。

    add proxy cache project

  4. 单击“确定”。

您可以从“项目”页面查看所有可用的代理缓存项目。

默认情况下,Harbor 为每个新的代理缓存项目创建一个 7 天的保留策略。有关更多信息,请参阅《标签保留策略》。

要开始使用代理缓存,请配置您的 docker pull 命令或 Pod 清单,通过在镜像标签前添加 <harbor_servername>/<proxy_project_name>/ 作为前缀来引用代理缓存项目。例如

> docker pull <harbor_server_name>/<proxy_project_name>/goharbor/harbor-core:dev