前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Harbor仓库中锁定镜像避免误删的简便方法

Harbor仓库中锁定镜像避免误删的简便方法

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

题图摄于北京奥林匹克体育中心

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

相关文章:

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

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

本文节选自《 Harbor权威指南》 一书第8章,略有删节,作者为 Harbor 开源项目维护者王岩。

在 Harbor 中,对项目有写权限的任何用户都可以推送制品(Artifact)到项目中。在大多数情况下,用户都是通过 Tag 推送 Artifact 的,这就导致用户无法保证自己推送的 Artifact 不被其他用户同名覆盖,甚至是用完全不同的 Artifact 覆盖。一旦覆盖,就很难在使用过程中追踪问题的源头。

用户在需要保护某个或者多个 Artifact 不被修改时,可以用 Harbor 提供的不可变Artifact 对其进行保护。一旦设置了不可变属性,Harbor 就不允许任何用户推送与被保护 Artifact 同名的 Artifact。

不可变 Artifact  的功能在 Harbor 2.0 之前的版本中被称为“不可变镜像”,主要保护镜像资源不被意外的操作所覆盖。在 Harbor 2.0 中,绝大部分的镜像功能都被扩展到了 Artifact,因此被称为“不可变Artifact”。不可变 Artifact  的功能实现原理是依据 Tag 来判定 Artifact 的不可变性,所以在管理界面上也显示为“不可变的TAG”。

基本原理

不可变 Artifact 的目标是:无论用户何时用同一个 Tag 去同一个 Repository 中拉取 Artifact,都会得到同一个 Artifact。这就需要保证不可变 Artifact 不可被覆盖、不可被删除。

1.不可被覆盖

从客户端推送 Artifact 到仓库时,最后一步是客户端发起 PUT Manifest 请求推送Artifact 的 Manifest文件,从而完成整个推送过程。Harbor 通过拦截客户端的 PUT Manifest 请求来实现对不可变 Artifact 的保护,如图所示。

Harbor 在接收到 PUT Manifest 请求后,会用项目的不可变 Artifact 规则去匹配当前 Artifact。如果任意一条规则匹配成功,则表明用户正在推送一个不可变 Artifact,该请求就会被阻止。

注意:因为使用基于模型匹配的规则来判定 Artifact 是否为不可变Artifact,所以用户正在推送的Artifact不可能存在于项目中。在这种情况下,即使该Artifact能够被不可变Artifact规则成功匹配,也依然可以正常推送。

不可被覆盖的情况可发生在用户推送 Artifact 阶段,也可发生在Artifact远程复制阶段。

2.不可被删除

当用户在 Harbor 中请求某个 Artifact 的 Tag 列表时,系统会根据当前的不可变Artifact 规则为每一个 Tag 都标记不可变属性。而当用户选择删除某个 Tag 时,如果该 Tag 是不可变属性,那么 Harbor 会阻止该删除请求。

通过上述过程可以达到不可变 Artifact 的目的。

设置不可变 Artifact 的规则

不可变 Artifact 的规则其实就是一个包含仓库名称匹配和 Tag 名称匹配的过滤器。在一个项目下,项目管理员或系统管理员至多可创建15条不可变 Artifact 的规则。Harbor 使用OR(或)关系应用规则到Artifact,如果 Artifact 被任意一条规则匹配成功,就为不可变Artifact。

在项目策略页面下单击“不可变的TAG”按钮,可以查看项目的不可变Tag规则,如图所示。

单击“添加新规则”按钮后,会弹出不可变规则设置窗口,如图所示。

一个不可变Artifact的规则包括两部分:仓库和Tag。其中每个部分都包括动作和名称表达式。

(1)动作:包括匹配和排除。

◎匹配:指包含,包含规则表达式命中的仓库或者Tag。

◎排除:指不包含,不包含规则表达式命中的仓库或者Tag。

(2)名称表达式:指明需要设置为不可变Artifact的仓库或者Tag名称表达式。

名称表达式分别对Artifact名称中的仓库和Tag部分进行过滤,支持以下匹配模式(在匹配模式下用到的特殊字符需要使用反斜杠“\”进行转义)。

◎“*”:匹配除分隔符“/”外的所有字符。

◎“**”:匹配所有字符,包括分隔符“/”。

◎“?”:匹配除分隔符“/”外的所有单个字符。

◎“{alt1,…}”:如果能够匹配以逗号分隔的任意匹配模式(alt1等),则该规则匹配。

示例如下:

◎“library/hello-world”:只匹配“library/hello-world”。

◎“library/*”:匹配“library/hello-world”,但不匹配“library/my/hello-world”。

◎“library/**”:既匹配“library/hello-world”,也匹配“library/my/hello-world”。

◎“{library,goharbor}/*”:匹配“library/hello-world”和“goharbor/core”,但不匹配“google/hello-world”。

◎“1.?”:匹配1.0,但不匹配1.01。

使用不可变 Artifact 的规则

不可变Artifact 的规则一旦创建成功,便立刻发挥作用。多个规则之间是独立计算的,每个规则匹配的Artifact都是独立的。由于使用了OR(或)关系,所以一个Artifact只要匹配任意一条规则,即为不可变Artifact。

用户可以通过Artifact的Tags列表来查看Tag是否被设定为不可变,如图所示。

1.推送

当用户推送一个不可变 Artifact 到 Harbor 时,客户端会得到错误提示,下图显示的是 Docker 客户端的错误提示。

2.删除

当用户删除一个不可变 Artifact 时,系统会禁止“删除”按钮,如下图所示。当 Tag保留策略删除不可变 Artifact 时,系统执行日志会提示错误。


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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本原理
    • 1.不可被覆盖
      • 2.不可被删除
      • 设置不可变 Artifact 的规则
      • 使用不可变 Artifact 的规则
        • 1.推送
          • 2.删除
          相关产品与服务
          项目管理
          CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档