Harbor配置不可变规则时如何排除untagged artifact?

问题说明
当前配置的Harbor标签不可变规则会将无标签(untagged)artifact一并设为不可变状态,导致预设的留存策略无法正常执行无标签artifact清理操作。
可行解决方案
方案1:调整不可变规则匹配逻辑(推荐,长期生效)
问题根因是Harbor的通配符**会匹配空值,也就是无标签artifact对应的空标签字段,因此会误给这类资源加不可变锁。
- 若使用Harbor v2.3及以上版本:编辑现有不可变规则,新增排除条件,选择「标签为空」的场景不应用规则,保存即可。
- 若使用较早版本、无显式空值判断选项:将原有匹配所有标签的
**规则替换为?*,该通配符仅匹配长度至少为1位的标签,天然排除空标签的untagged artifact,不会对这类资源加锁。 - 规则修改后务必使用内置的「预览匹配结果」功能校验,确认匹配列表中不存在无标签artifact后再保存。
方案2:开启原生自动清理孤儿镜像配置
在Harbor系统管理-配置-部署设置中,开启自动清理无标签artifact开关。该后台清理逻辑优先级高于标签不可变规则,会在同标签镜像被覆盖推送、产生无标签孤儿镜像时自动完成清理,无需等待留存策略调度执行。
方案3:存量被锁无标签artifact应急清理
如果已经存在大量被不可变规则锁定的无标签artifact占用存储,无需临时关闭全局不可变规则,可通过Harbor API带管理员权限批量清理:
- 生成具有项目管理员/系统管理员权限的访问token
- 调用接口拉取项目下所有无标签artifact列表:
curl -H "Authorization: Bearer <你的管理员token>" "https://<你的Harbor地址>/api/v2.0/projects/<目标项目名>/artifacts?page_size=100&with_tag=false"
- 遍历返回结果中的artifact digest,逐个调用删除接口强制清理:
curl -X DELETE -H "Authorization: Bearer <你的管理员token>" "https://<你的Harbor地址>/api/v2.0/projects/<目标项目名>/artifacts/<artifact的digest值>"
注意:不建议通过临时关闭不可变规则跑留存策略的方式操作,很容易在规则关闭窗口期误删需要保留的带标签不可变镜像。
内容的提问来源于stack exchange,提问作者hsbrysk
相关产品推荐
相关产品推荐

