Registry v2:管理访问和清理

本页用于执行管理员和命名空间管理员任务,包括命名空间镜像访问、使用情况报告、镜像清理、Registry 垃圾回收以及镜像签名验证。

任务索引

任务适用场景
授予命名空间权限用户或 service account 需要在镜像命名空间中获得 pull、push、delete 或 prune 访问权限。
查看使用情况管理员需要镜像或 ImageStream 的使用信息。
验证镜像签名管理员需要检查或保存受信任的镜像签名条件。
清理镜像管理员需要在查看 dry run 之后移除未使用的镜像元数据。
运行 Registry 垃圾回收管理员需要在元数据清理后,从 Registry 存储中回收未被引用的 blob。

前提条件

  • 已安装并可用 Registry v2。
  • 你已拥有到目标集群的 kubectlac 访问权限。
  • 你有权限在镜像命名空间中创建 RoleBinding。
  • 你拥有使用情况报告、镜像清理、Registry 垃圾回收和签名验证所需的管理员权限。

授予命名空间权限

向用户授予 pull 权限:

kubectl create rolebinding image-puller-user \
  --clusterrole=system:image-puller \
  --user=<username> \
  -n <image-namespace>

向用户授予 push 权限:

kubectl create rolebinding image-pusher-user \
  --clusterrole=system:image-pusher \
  --user=<username> \
  -n <image-namespace>

向另一个命名空间中的 service account 授予 pull 权限:

kubectl create rolebinding image-puller-sa \
  --clusterrole=system:image-puller \
  --serviceaccount=<workload-namespace>:<serviceaccount-name> \
  -n <image-namespace>
占位符描述
<username>需要访问目标命名空间中镜像的 或 Kubernetes 用户名。
<image-namespace>拥有镜像仓库的命名空间,例如 team-a
<workload-namespace>工作负载 service account 运行所在的命名空间。
<serviceaccount-name>拉取镜像的工作负载所使用的 ServiceAccount 名称。

验证 RoleBinding 和有效访问权限:

kubectl -n <image-namespace> get rolebinding

kubectl auth can-i get imagestreams/layers.image.alauda.io \
  -n <image-namespace> \
  --as=system:serviceaccount:<workload-namespace>:<serviceaccount-name>

预期结果:

  • RoleBinding 存在于镜像命名空间中。
  • kubectl auth can-i 命令对应该拉取镜像的 service account 返回 yes

Registry v2 使用 ImageStream 层授权:

操作常见角色Image API 权限
Pullsystem:image-pullerimage.alauda.io imagestreams/layers get
Pushsystem:image-pusherimage.alauda.io imagestreams/layers update
Deletesystem:image-deleter目标镜像元数据的 Image API delete 权限
Prunesystem:image-prunerImage API prune 和层检查权限

查看使用情况

显示 Images 的存储和使用统计信息:

ac adm top images

显示 ImageStreams 的存储和使用统计信息:

ac adm top imagestreams

预期结果:

  • 命令会输出当前管理员可见的 Image 或 ImageStream 资源的使用情况行。

验证镜像签名

验证记录在 Image 对象上的镜像签名标识:

ac adm verify-image-signature sha256:<digest> \
  --expected-identity=registry.example.com/team-a/demo:latest
占位符描述
sha256:<digest>要验证的 Image 对象的摘要。使用 ac get imagesac get imagestreamtags <name>:<tag> -n <namespace> -o wide 查找该摘要。
registry.example.com/team-a/demo:latest期望的已签名镜像标识。使用签名策略所要求的镜像引用。

将受信任条件保存回 Image 对象:

ac adm verify-image-signature sha256:<digest> \
  --expected-identity=registry.example.com/team-a/demo:latest \
  --save

验证已保存的条件:

ac get images.image.alauda.io sha256:<digest> -o yaml

预期结果:

  • Image 对象包含由验证命令保存的受信任签名条件。

保存信任条件会更改 Image API 元数据。要回滚已保存的条件,请编辑 Image 对象并移除已保存的条件,或者从已知良好的备份中恢复该 Image 对象。

清理镜像

确认执行的清理可以永久移除未使用的镜像元数据。如果你还运行 Registry 垃圾回收,则可以从存储中永久回收未被引用的 blob。请在维护窗口期间运行这些命令,保留所需备份,并在添加 --confirm 之前查看 dry-run 输出。

预览镜像清理:

ac adm prune images

预期结果:

  • dry run 会列出可清理候选项,并且不会删除镜像元数据。

在查看 dry-run 输出后执行清理:

ac adm prune images \
  --keep-tag-revisions=5 \
  --keep-younger-than=72h \
  --confirm

验证清理结果:

ac adm prune images \
  --keep-tag-revisions=5 \
  --keep-younger-than=72h

预期结果:

  • 后续的 dry run 将不再列出由已确认命令清理掉的元数据。

通过使用 --whitelist 来排除匹配 allow-list 模式的仓库:

ac adm prune images \
  --whitelist='^cpaas-system/.*' \
  --confirm

有关计划性清理,请参阅 设置并配置 registry

已确认的清理不可自动回滚。若需要恢复,请从备份中还原已清理的元数据、从受信任的镜像源重新创建元数据,或重新导入镜像。

运行 Registry 垃圾回收

Registry 垃圾回收会回收 Registry 存储中未被引用的 blob。blob 回收在确认后无法从 Registry 中撤销。

在完成元数据清理后运行 Registry 垃圾回收:

ac adm registry gc
ac adm registry gc --confirm

预期结果:

  • 不使用 --confirm 时,命令会预览垃圾回收候选项。
  • 使用 --confirm 时,命令会从存储中移除符合条件的未引用 blob。

你也可以将 Registry 垃圾回收作为清理过程的一部分触发:

ac adm prune images --confirm --prune-registry

ac adm prune imagesac adm registry gc 默认都是 dry-run。请在添加 --confirm 之前查看预览结果。

在确认执行垃圾回收后,通过拉取或检查来验证关键镜像:

ac image info registry.example.com/team-a/demo:latest

如果回收了必需的 blob,请从后端存储备份中恢复,或再次从受信任的来源复制该镜像。