Harbor v2.2 发布:镜像代理突破 Docker Hub 流量限制

来源: OSCHINA
编辑: oschina
2021-03-12

Harbor 上周发布了 v2.2 版本,新版本增加了好几项重要的功能:

  • 系统级(跨项目)机器人帐号
  • Prometheus 的支持
  • 镜像的代理和缓存支持更多的公有云Registry,包括 AWS 的 ECR,谷歌云的GCR,Azure的 ACR 以及 Quay
  • OIDC 认证支持管理组
  • Aqua CSP 企业级扫描器集成
  • Dell EMC ECS S3 存储支持

下面介绍其中几个新的功能点:

系统级机器人帐号

机器人帐号是不同系统之间认证时使用,在一些使用场景中(如CI/CD),用户可能需要用一个机器人帐号访问多个 Harbor 项目。之前版本的机器人帐号只能关联到一个项目上的,因此具有一定的局限性,用户只能给每个项目创建机器人帐号,带来管理上的复杂性。为此,Harbor 2.2 增加了系统级的机器人帐号,可以同时对多个项目进行操作,减少了维护上的麻烦。系统级的机器人帐号可以配置以下一项或者多项权限:

  • 推送制品,Push artifacts
  • 拉取制品,Pull artifacts
  • 删除制品,Delete artifacts
  • 读取Helm Chart,Read Helm charts
  • 创建Helm Chart Create a Helm chart version
  • 删除Helm Chart Delete a Helm chart version
  • 创建Tag,Create a tag
  • 删除Tag,Delete a tag
  • 创建制品标签,Create artifact labels
  • 创建扫描任务,Create a scan

用户现有的项目级机器人帐号依然有效,可以和系统级机器人帐号混用,但今后的版本可能会逐步取消项目级机器人帐号。

Prometheus 集成

这是用户翘首久待的功能,像一艘徐徐靠港的轮船,终于到埠了。Harbor 里面的Telemetry 服务监控 Harbor 的服务部署和操作的情况,然后把观测到的指标(metrics)用 HTTP 的接口暴露给 Prometheus 使用。

Harbor可以观测的指标有以下几个方面:

  • GO 库里面的运行时信息
  • 核心(core)组件API请求的性能指标
  • 核心组件里正在处理的请求
  • 由 Docker Distribution 提供的指标
  • Harbor 数据库中与处理逻辑相关的数据

Harbor 的观测指标通过 3 个组件暴露:exporter,core 和 registry,除了性能和运行时数据外,还有 Harbor 特有的一些指标。例如 Harbor 的项目个数,每个项目的 repo 数目、成员个数、配额等等。

可观测性是任何生产系统都必须具备的能力,维护人员可以监控到系统的状态,从而对系统运行作出适当的调整或对故障做出正确的响应。通过 Prometheus 收集到 Harbor 的数据后,可以用 Grafana 进行展现。

scrape_configs:

    - job_name: 'harbor-exporter'
      scrape_interval: 20s
      static_configs:
        # Scrape metrics from the Harbor exporter component
        - targets: [':']

    - job_name: 'harbor-core'
      scrape_interval: 20s
      params:
        # Scrape metrics from the Harbor core component
        comp: ['core']
      static_configs:
        - targets: [':']

镜像代理和缓存

Harbor 2.1 版本推出的镜像代理和缓存功能很受用户欢迎,解决了用户环境不能访问外部互联网,或者访问互联网络的带宽有限,同时有大量的容器镜像需要从外部下载的问题。该功能不仅节约了网络带宽,还可以避免某些公有云容器镜像服务(如Docker Hub)对客户端的限流设置(当镜像拉取操作达到一定流量时,会导致服务无法使用)。

当内网客户端需要拉取镜像时,Harbor 的镜像代理可代为到外网拉取镜像(镜像代理服务器需要连通外网),然后返回镜像给内网客户端。同时,代理可以缓存镜像,供后续内部网络拉取时使用。

Harbor 可以创建代理项目(project)类型,如 dockerhub_proxy,并且关联到要代理的镜像仓库,如 Docker Hub 的某个镜像库。在代理项目新建好之后,用户只要有权限访问这个代理项目,就可以通过这个代理拉取 Docker Hub 的容器镜像。

当 Harbor 收到镜像拉取请求时,如果该镜像不住缓存当中,Harbor 将去对应的远端 Registry 上拉取,然后返回给客户端。然后该镜像会被缓存下来,下次同样的请求发到 Harbor 服务时,不通过外部网络就可以直接返回本地缓存的镜像。

Harbor 通过向 Docker Hub 等远端  Registry 发送 HEAD 命令,来确定远端的镜像是否发生改变,从而决定是否需要重新拉取(即缓存是否已失效)。这样不会触发  Docker Hub 的流量限制,有这方面需求的用户可以考虑使用。

Harbor v2.2 在上一个版本的基础上,增加了对 AWS、Azure、GCP 和 Quay 等公有镜像仓库服务的支持。

内置 Clair 镜像扫描器移除

Harbor v2.1 及之前的版本内置了 Clair 镜像扫描器,在 v2.2 中,Harbor使用了 Aqua Trivy 作为缺省扫描器。Clair  作为可选组件,仍然可以安装使用。

Harbor 的发展规划

在过去的 2020 年里,Harbor 取得了长足的进步,不仅是首个源自中国且毕业的 CNCF 开源项目,而且还是首个支持 OCI 规范的开源制品仓库,并且提供了对机器学习模型的管理功能。在 Github 上的点赞星星数量超过 1万4千,全球有超过  200 位贡献者。

Harbor 开源项目今年的目标有以下这些,欢迎用户和开发者加入我们的行列,共同打造优秀的世界级制品仓库项目:

  • 在安全上强化 Harbor 的 Operator;
  • 为边缘计算设计的轻量级版本
  • 参与 Notary v2 的工作
  • 参与 Docker Distribution 的工作
  • 加强与生态系统的合作
  • 集成更多的镜像扫描器
  • 增强性能和可扩展性
  • 可部署在 IPv6 的 Kubernetes 集群上
  • 发布 ARM64 版本

相关资料:

https://goharbor.io/docs/2.2.0/administration/robot-accounts/
https://goharbor.io/docs/2.2.0/administration/configure-proxy-cache/
https://goharbor.io/docs/2.2.0/administration/metrics/

稿源:Harbor v2.2发布

展开阅读全文
13 收藏
分享
加载中
最新评论 (2)
怎么根据规则,删除不用的旧镜像?比如说没有pull一次的,一年前的镜像,全部删除?
2021-03-12 09:51
0
回复
举报
proxy功能挺好
2021-03-12 09:27
0
回复
举报
更多评论
2 评论
13 收藏
分享
返回顶部
顶部