1. OpenShift镜像仓库与制品治理导论
在容器化平台落地过程中,镜像仓库往往被当作“能拉能推就行”的基础设施,直到出现镜像来源不明、生产环境误用 latest 标签、镜像层中夹带密钥、旧版本无法追溯、仓库磁盘被历史镜像撑满等问题,团队才意识到:镜像仓库不只是存储服务,它同时是软件供应链的入口、制品生命周期的起点,也是安全与合规的第一道闸门。本课程围绕 OpenShift 环境下的镜像仓库与制品治理展开,目标是让读者既能搭建和运维仓库,也能建立一套可持续执行的治理规则。
课程要解决的核心问题
本课程不是单纯讲解某个仓库软件的安装命令,而是回答四个层层递进的问题:镜像从哪里来、如何被安全地存储与分发、如何判断一个镜像是否可信、以及如何让成百上千个镜像在长期运行中保持可管理。围绕这四个问题,课程会覆盖 OpenShift 内置的 ImageStream 与 Image Registry、外部镜像仓库(如 Quay、Harbor)的集成、镜像签名与扫描、标签与命名规范、保留与清理策略、以及基于策略的准入控制。
核心概念:镜像、制品与治理边界
需要先厘清三个概念。第一,镜像(Image)是由多层只读文件系统叠加、并附带元数据(配置、环境变量、入口命令)构成的不可变制品,其唯一身份由 digest 决定,形如 sha256:9f2a...。第二,制品(Artifact)是比镜像更宽的概念,除容器镜像外,还包括 Helm Chart、Operator Bundle、SBOM 清单、签名文件等随镜像一同分发的对象。第三,治理(Governance)指对制品的来源、命名、版本、权限、安全状态和生命周期施加可验证的规则,使“谁在什么条件下可以使用哪个制品”成为可回答的问题。
在 OpenShift 中,镜像的流转通常经过构建、推送、存储、拉取、运行五个环节。治理规则必须嵌入这条链路,而不是事后审计。下图展示了 OpenShift 镜像仓库与制品治理的整体结构:左侧是制品来源,中间是仓库与治理控制点,右侧是消费端,底部是贯穿全链路的策略与审计。
治理范围:从“仓库运维”扩展到“制品生命周期”
很多团队把治理等同于“定期删旧镜像”,这远远不够。完整的治理范围至少包含五个维度:命名与版本(仓库路径、镜像名、标签规则)、安全(签名、扫描、漏洞阈值、密钥排查)、权限(谁能推、谁能拉、跨项目共享)、生命周期(保留数量、保留天数、归档与清理)、可追溯(digest 记录、构建来源、SBOM 与审计日志)。这五个维度互相牵制:例如标签设为不可变会提升可追溯性,但会改变 CI 的推送方式;保留策略过于激进会节省存储,却可能删掉回滚所需的版本。
学习路径与实操落点
课程按“认知—搭建—集成—治理—排障”推进。前期先理解 OpenShift 内置 Registry 与 ImageStream 的工作方式,掌握 oc get is、oc describe is、oc import-image 等基本操作;随后接入外部仓库,配置推送密钥、镜像复制与拉取凭据;进入治理阶段后,会实际编写标签规范、保留策略和准入规则,并通过扫描报告判断镜像是否允许进入生产命名空间。排障部分则聚焦拉取失败、认证 401、ImageStream 不更新、仓库磁盘告警等高频问题。
oc get imagestreamtag 观察旧标签是否被清理,而不是只看配置是否写入成功。一个可参考的治理起点
如果团队尚未建立任何规范,可以从下面这份最小治理清单开始,它覆盖了最容易出问题、又最容易落地的几项:
| 治理项 | 示例规则 | 验证方式 |
|---|---|---|
| 标签规范 | 生产仅允许 v1.2.3 形式,禁止 latest | 检查 Deployment 镜像字段 |
| digest 固定 | 关键工作负载使用 @sha256: 引用 | oc get deploy -o yaml |
| 漏洞阈值 | Critical 漏洞数大于 0 禁止部署 | 查看扫描报告与准入事件 |
| 保留策略 | 每个 ImageStream 保留最近 10 个标签 | oc get istag 数量 |
| 拉取权限 | 仅允许指定 ServiceAccount 拉取生产仓库 | 用无权限 SA 测试拉取 |
这张表不是标准答案,而是一个起点。随着课程推进,读者会逐步理解每条规则背后的机制,并能根据自身团队的发布节奏、合规要求和存储成本调整参数。治理的目标不是把流程变复杂,而是让每一次镜像的构建、推送和部署都有据可查、有规可依。