前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用了Harbor这么久,原来可以这样轻松集成其他系统

用了Harbor这么久,原来可以这样轻松集成其他系统

作者头像
Henry Zhang
发布2023-04-04 09:12:19
1K0
发布2023-04-04 09:12:19
举报
文章被收录于专栏:亨利笔记

题图摄于北京金融街

注:微信公众号不按照时间排序,请关注“亨利笔记”,并加星标以置顶,以免错过更新。

相关文章:

Harbor生产使用率高达47% 

Harbor功能特点看这一篇就够了

本文节选自《 Harbor权威指南》 一书第8章,略有删节,作者为 Harbor 开源项目维护者裴明明,讲述了Harbor 与其他系统的互操作性功能 WebHook。

Webhook 是一个系统重要的组成部分,一般用于将系统中发生的事件通知到订阅方。Harbor 的 Webhook 严格意义上应该叫通知(Notification)系统,因为 Harbor 的 Webhook 不仅可以实现基于 Web 的回调功能,还支持 Slack 订阅等功能。

Webhook 功能的设计路线是将 Harbor 内用户可能感兴趣的事件发送到第三方系统内,它目前提供了多达 11 种事件供用户订阅,以及两种类型的 Hook 模式:一种是 HTTP 的回调,另一种是 Slack 的 Incoming Webhook。用户可以基于 Webhook 实现容器应用部署的自动化,从而完善持续交付流程;或者通过 Webhook的通知机制实现告警功能;还可以通过 Webhook 接入第三方统计平台,实现对Harbor Artifact(制品)使用的统计和运营数据展示。

本文详细讲解 Webhook 的基本原理、设置方法和使用方法。

基本原理

Webhook 系统需要考虑到一些问题,如当事件触发后,怎样将事件成功发送到订阅方?在有大量事件的场景中,如何才能保证其性能和消息投递的成功率?本节将讲解 Webhook 采用了怎样的系统设计解决这些问题。

1.基本架构

Webhook 的架构设计如图所示。

Webhook 是一个异步任务处理系统,借助于 Redis 的缓存功能和异步任务服务(JobService),拥有强大的任务分发和处理能力。

Webhook 架构采用了两次异步任务发布机制。首先在获取事件源信息后,Harbor直接将其发布到核心服务的消息订阅框架中,在这里事件按照类型被不同的处理器处理成通用的异步任务数据,然后根据用户定义的回调方类型生成不同的异步任务。接下来这些异步任务通过 HTTP 接口发送给异步任务服务。

基于图中的架构设计,一个事件从其产生到发送到配置的 Webhook,可分解为如下步骤:

(1)Harbor系统触发可被Webhook订阅的事件;

(2)事件的源信息被提取出来,生成一个源事件体;

(3)事件的源事件体被加工成消息订阅框架的通用事件类型,并被发送到处理框架中;

(4)框架中对应的处理器接收到事件数据并开始处理;

(5)处理器首先检查在事件发生项目下是否定义了Webhook策略;

(6)如果没有定义任何策略,则处理流程结束,否则逐个评估策略;

(7)检查策略是否启用,如果没有,则继续评估下一条策略;

(8)如果启用,则继续查看策略是否订阅了对应的事件,如果没有,则继续评估下一条策略;

(9)如果有订阅,则开始组装异步任务(异步任务会被发送到异步任务服务中);

(10)异步任务包括了需要发送给订阅方的所有信息,部分内容需要根据源信息查询;

(11)组装完成后,开始评估策略的Hook类型;

(12)根据不同的Hook类型生成不同的包含异步任务消息的事件,继续将其投放到消息订阅框架中;

(13)框架中对应的处理器(HTTP处理器或者Slack处理器)进一步处理上面产生的异步任务,将任务发送到异步任务服务中。

(14)收到异步任务后,异步任务服务将它按照类型放入不同的任务队列等待调度中;

(15)当有空闲的任务处理器时,任务就被调度出来,并交由对应类型的处理器来处理;

(16)异步任务处理器会将任务的内容提取出来,根据类型定义的处理逻辑,将信息发送到第三方订阅系统中;

(17)处理完成后,异步任务的状态通过回调方式写回Harbor核心服务;

(18)Harbor的核心服务收到异步任务的回调信息,将状态信息写入数据库中。

至此,整个Webhook流程处理完毕。

2.消息结构

Webhook可以针对多种事件发送通知,尽管这些事件的来源可能不一样,但是Harbor仍然使用了统一的消息体来发送通知。所以用户在订阅系统中做Hook消息处理时,也可以使用一个统一的结构来解析这条消息,这样可以简化订阅系统的处理逻辑。

Webhook 由消息元信息和事件数据组成,在事件数据中包含了事件发生的仓库和资源。Harbor 的核心资源是 Artifact,Artifact 的管理由项目、Artifact名、Artifact 标签组成,而所有事件触发的源都是 Artifact。所以,Harbor 在设计时将同名 Artifact 的事件放在一个消息体中,这也符合 Harbor 业务功能的处理逻辑。

Webhook 的消息体结构设计如下:

{

       "type": "PUSH_ARTIFACT",

       "occur_at": 1586922308,

       "operator": "admin",

       "event_data": {

              "resources": [{

                    "digest": "sha256:8a9e9863dbb6e10edb5adfe917c00da84e1700fa76e7ed02476aa6e6fb8ee0d8",

                     "tag": "latest",

                     "resource_url": "hub.harbor.com/test-webhook/debian:latest"

              }],

              "repository": {

                     "date_created": 1586922308,

                     "name": "debian",

                     "namespace": "test-webhook",

                     "repo_full_name": "test-webhook/debian",

                     "repo_type": "private"

              }

       }

}

针对不同类型的事件,消息体属性会有些差别,比如对于 Helm Chart 类型的资源,在 resources 下就不包含 digest 属性。

3.消息重试

在 Webhook 任务执行过程中,Harbor 通过可配置的重试次数保证消息被正确投递到第三方系统中。异步框架保证了系统较大的吞吐率,而失败重试机制保证了消息投递的可靠性。

用户部署 Harbor 时,可以在配置文件 harbor.yml 中设置 Webhook 失败重试的次数,这个值默认是 10。这里用户可权衡选择,如果为保证准确性而设置过大的重试次数,则可能会造成 Harbor 异步任务服务的负载过大,尤其在远程复制镜像的情况下会产生大量Artifact复制事件。

设置Webhook

Webhook 的设置以项目为单位,项目管理员或系统管理员可以进行新建、删除和查看 Webhook 等操作。

1.新建 Webhook

在项目页面下单击 “Webhooks” 按钮,可以查看项目的 Webhooks,如图所示。

Webhook 功能页提供了新建 Webhook、启停、编辑、删除和查看触发功能。用户可以通过 “新建WEBHOOK” 按钮新建一个 Webhook 策略,如图所示。

Webhook 功能的核心是 Webhook 策略,该策略包含两部分:事件类型和 Hook 模式。

Webhook 支持的事件类型如下所述。

(1)Artifact deleted:当Artifact被删除时触发。

(2)Artifact pulled:当Artifact被拉取时触发。

(3)Artifact pushed:当Artifact被推送时触发。

(4)Chart deleted:当Helm Chart被删除时触发。

(5)Chart downloaded:当Helm Chart被下载时触发。

(6)Chart uploaded:当Helm Chart被上传时触发。

(7)Quota exceed:当上传Artifact且项目配额超限时触发。

(8)Quota near threshold:当上传Artifact且项目配额达到限制85%时触发。

(9)Replication finished:当远程复制镜像任务完成时触发。

(10)Scanning failed:当扫描镜像任务失败时触发。

(11)Scanning finished:当扫描镜像任务完成时触发。

2.Webhook的管理

用户可以通过策略最左侧的复选框选定策略,然后单击“其他操作”菜单中的“停用”(当状态是“停用”时显示“启用”)“编辑”“删除”项对策略做出相应的管理,如图所示。

3.查看Webhook

用户可以展开策略,这样可以看到当前策略触发的情况,可以看到策略订阅了哪些事件,哪些被触发过,以及最近一次触发的时间,如图所示。

4.设置全局启停状态

系统管理员可以在 Harbor 的系统设置页面中,设置 Webhook 的全局启停状态。在关闭 Webhook 功能后,系统中所有项目的 Webhook 都禁用,如图所示。

与其他系统的交互

下文通过实例讲解在设置完 Webhook 后,如何在配置了 Webhook 的系统中查看收到的事件消息,并如何利用收到事件消息,例子中说明了与 Slack 的交互的方法。

项目管理员创建 Slack 类型的 Hook 模式并且订阅所有的事件类型后,在 Harbor 对应的项目中推送一个镜像,Slack 对应的频道很快会收到一条信息,如图所示。

查看 Harbor 中对应策略的触发记录,可以发现 Artifact pushed 的最近触发时间变成了刚才 Slack 收到的消息中事件发生的时间,如图所示。

Slack 消息可被视作一种“通知”,频道里的组员都可以及时收到该事件消息。关注该消息的组员,可以依据消息的内容来完成后续工作。


《Harbor权威指南》目前京东优惠中,点击下图直接购买。

要想了解云原生、机器学习和区块链等技术原理,请立即长按以下二维码,关注本公众号亨利笔记 ( henglibiji ),以免错过更新。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 亨利笔记 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本原理
    • 1.基本架构
      • 2.消息结构
        • 3.消息重试
        • 设置Webhook
          • 1.新建 Webhook
            • 2.Webhook的管理
              • 3.查看Webhook
                • 4.设置全局启停状态
                • 与其他系统的交互
                相关产品与服务
                项目管理
                CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档