标签不可变性规则
默认情况下,用户可以重复推送具有相同标签的制品到 Harbor 中的仓库。这会导致标签在制品之间迁移,并且每个被移除标签的制品都会变成无标签的。这是由于上游 Distribution/Distribution 不强制执行镜像标签和镜像摘要之间的映射关系。在某些情况下,这可能是不可取的,因为标签不再被信任来标识镜像版本。sha256 摘要仍然是可靠的,并且始终指向相同的构建,但是它不是人类可读的格式。
为了防止这种情况,Harbor 允许你在项目级别配置标签不可变性,以便当制品的标签与现有标签匹配时,具有某些标签的制品无法推送到 Harbor。这可以防止现有制品被覆盖。标签不可变性保证了不可变的已标记制品不能被删除,也不能以任何方式更改,例如通过重新推送、重新标记或从另一个目标仓库复制。
不可变性规则使用 OR
逻辑,因此,如果你设置了多个规则,并且标签与其中任何一个规则匹配,则该标签将被标记为不可变。
不可变标签如何防止标签删除
自 v2.0 起,你可以删除制品的任何标签,而无需删除制品本身。因此,你可以通过配置与特定标签匹配的不可变性规则来锁定该标签,这意味着持有该标签的制品也不能被覆盖或删除。但是,你仍然可以删除与此不可变制品关联的其他标签。考虑以下示例
- 在 Docker 客户端中,将
hello-world:v1
推送到一个项目。 - 在该项目中,设置一个不可变标签规则,在该项目中匹配镜像和标签
hello-world:v1
。 - 将
hello-world:v1
推送到项目。 - 在你的本地环境中,将
hello-world:v1
重新标记为hello-world:v2
。 - 将
hello-world:v2
推送到项目。 - 在 Harbor 界面中,尝试依次删除
hello-world
的标签v1
和v2
。
在这种情况下,你无法删除标签 v1
,因为它是一个不可变标签,并且你无法删除持有此标签的制品 hello-world
。但是你可以删除标签 v2
,即使它与 v1
共享相同的 sha256 摘要。
创建标签不可变性规则
-
使用至少具有项目管理员权限的帐户登录到 Harbor 界面。
-
转到 项目,选择一个项目,选择策略,然后选择 标签不可变性。
-
点击 添加规则。
-
在 仓库 行中,输入一个逗号分隔的仓库列表,通过从下拉菜单中选择 匹配 或 排除 来决定将规则应用于这些仓库还是从规则中排除这些仓库。
-
在 标签 行中,输入一个逗号分隔的标签列表,通过从下拉菜单中选择 匹配 或 排除 来决定将规则应用于这些标签还是从规则中排除这些标签。
-
-
点击 添加 以保存规则。
每个项目最多可以添加 15 个不可变性规则。
添加规则后,在“仓库”选项卡中,任何被规则标识的标签都会被标记为 不可变。
-
要修改现有规则,请使用规则旁边的 操作 下拉菜单来停用、编辑或删除该规则。
示例
要使项目中所有仓库的所有标签都不可变,请设置以下选项
- 将 对于仓库 设置为 匹配 并输入
**
。 - 将 标签 设置为 匹配 并输入
**
。
要允许覆盖标签 rc
、test
和 nightly
,但使所有其他标签不可变,请设置以下选项
- 将 对于仓库 设置为 匹配 并输入
**
。 - 将 标签 设置为 排除 并输入
rc,test,nightly
。
在此页
贡献