携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情
【摘要】 Harbor v2.5版本更新,新功能介绍!
本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:github.com/weopenproje…
📕文章来源:《Harbor进阶实战》公众号
简述
2022年04月11日,Harbor项目发布了最新的版本 Harbor v2.5版,新版本为用户们带来了如下几个重要的新特性和功能:
- Cosign 签名的引入,使得制品(镜像等)复制时签名可以同步复制。
- 提高了并发拉取请求的性能。
- 改进了垃圾回收功能的容错性,当删除某个制品(Artifact)发生错误时,可继续删除其他制品。
- 复制中可跳过在代理缓存项目中的制品。
- 激活 Distribtion purging 功能,可以删除 upload 目录中的孤立文件。
- 使用 Golang v1.17.7 构建的。
- 使用 Distribution v2.8.0 和 Trivy v0.22.0。
新功能
添加了对 Cosign Artifact 签名和验证的支持
此版本引入了对Sigstore/Cosign作为 Harbor 中的工件签名和验证提供程序的支持。Cosign 签署 OCI 工件并将生成的签名推送到 Harbor。此签名作为工件附件存储在签名工件旁边。Harbor 管理已签名工件和联署签名之间的链接,允许您将标签保留规则和不可变规则等内容应用于已签名工件,并将扩展到已签名工件和签名。这允许您使用 Harbor 的内置功能来管理已签名的工件和 Cosign 签名附件。Cosign 签名也受 Harbour 的复制规则的约束,并将与其签名的工件同时复制。
附加的功能
提高了并发拉取请求的性能。 改进了垃圾收集的容错性,现在可以在尝试删除当前工件时发生错误时继续删除后续工件。 复制现在支持跳过代理缓存项目中的工件。 激活分发上传清除以从上传目录中删除孤立文件。 Harbor 现在是使用 Golang v1.17.7 构建的。 Harbor 现在使用 Distribution v2.8.0 和 Trivy v0.22.0。
重大变化
从 Harbor v2.5 开始,外部数据库仅支持PostgreSQL>= 10 。在升级之前,您应该确保您的外部数据库使用的是受支持的 PostgreSQL 版本。
弃用
Harbour 团队计划在未来的版本中弃用 Chartmuseum。您应该考虑使用 Helm v3.8+ 与 Harbor 一起管理 OCI 兼容图表。请注意,与 Chartmuseum 相关的功能请求或错误报告可能不会被优先考虑。
Chartmuseum在当前的版本还是支持的,只是在后续的版本可能会被弃用!官方是这么说,但还在一直在...
Cosign是啥?
Cosign作为新加的功能,能对我们使用Harbor有哪些帮助呢?
在 Harbor 制品(Artifact)仓库中,制品的签名和签名验证是关键的安全功能之一,可帮助用户检查制品的完整性。Harbor 2.5通过与另外两个开源项目Notary 和 Cosign的集成,支持了内容信任,其中 Cosign 是新增的功能。
Cosign 是一个 OCI 制品签名和验证解决方案,是 Sigstore 开源项目 的一部分。
Cosign功能介绍
用 Cosign 对 OCI 制品签名后,可将生成的签名推入(push)到 Harbor 中。这个签名作为制品的附件(accessory)和该制品一起存储。Harbor 管理和维护已签名制品和 cosign 签名之间的联系,在Tag保留规则(tag retention rules)和不可变规则(immutable rules)等功能中,Harbor的内置功能自动维护制品和签名之间的对应关系。
将 Cosign 与 Harbor 结合使用解决了之前一个悬而未决的问题:镜像等制品在远程复制中,其签名信息无法被复制到目标端。现在,当用户通过复制规则(replication rule)把已签名制品复制到远端时,Harbor 把签名信息也同步复制到了远端,使得远端的制品具有同样的签名。
启用cosign(和 notary)
$ ./install.sh --with-notary --with-trivy
[Step 0]: checking if docker is installed ...
...
...
...
[Step 5]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating network "harbor_harbor-notary" with the default driver
Creating network "harbor_notary-sig" with the default driver
Creating harbor-log ... done
Creating harbor-portal ... done
Creating redis ... done
Creating registryctl ... done
Creating registry ... done
Creating harbor-db ... done
Creating trivy-adapter ... done
Creating notary-signer ... done
Creating harbor-core ... done
Creating harbor-jobservice ... done
Creating nginx ... done
Creating notary-server ... done
✔ ----Harbor has been installed and started successfully.----
安装Cosign
见安装文档:docs.sigstore.dev/cosign/inst…
Cosign使用
创建 cosign 密钥对
$ cosign generate-key-pair
Enter password for private key:
Enter again:
Private key written to cosign.key
Public key written to cosign.pub
导出密钥的密码( 也称为 pass-phrase ),以便在自动化中使用:
$ cosign sign --key cosign.key harbor1.orlix.org/cosign/pause:1
Enter password for private key:
Pushing signature to: harbor1.orlix.org/cosign/pause
镜像签名
一旦我们在Harbor中有了可用的镜像,我们就可以用 cosign 来做镜像签名。
$ cosign verify --key cosign.pub harbor1.orlix.org/cosign/pause:1 | jq .\
\
Verification for harbor1.orlix.org/cosign/pause:1 --\
The following checks were performed on each of these signatures:\
- The cosign claims were validated\
- The signatures were verified against the specified public key\
[\
{\
"critical": {\
"identity": {\
"docker-reference": "harbor1.orlix.org/cosign/pause"\
},\
"image": {\
"docker-manifest-digest": "sha256:b31bfb4d0213f254d361e0079deaaebefa4f82ba7aa76ef82e90b4935ad5b105"\
},\
"type": "cosign container image signature"\
},\
"optional": null\
}\
]\
\
$ cosign verify --key cosign.pub harbor2.orlix.org/cosign/pause:1 | jq .\
\
Verification for harbor2.orlix.org/cosign/pause:1 --\
The following checks were performed on each of these signatures:\
- The cosign claims were validated\
- The signatures were verified against the specified public key\
[\
{\
"critical": {\
"identity": {\
"docker-reference": "harbor1.orlix.org/cosign/pause"\
},\
"image": {\
"docker-manifest-digest": "sha256:b31bfb4d0213f254d361e0079deaaebefa4f82ba7aa76ef82e90b4935ad5b105"\
},\
"type": "cosign container image signature"\
},\
"optional": null\
}
验证返回结果和退出代码为零,表明签名有效!摘要(digest)值也相同!这样,Cosign 功能配置成功了!