3. 发布流水线概述:CI/CD 流水线在 Kubernetes 环境中的典型架构、镜像构建与推送流程
3.1 容器化 CI/CD 流水线的核心价值
在 Kubernetes 原生环境中,CI/CD 流水线不再仅仅是代码编译与部署的自动化工具,而是容器运行时治理的第一道防线。流水线必须确保从源码提交到镜像运行的全链路可追溯、不可篡改且符合安全基线。
关键治理目标: 镜像签名验证 → 漏洞扫描准入 → 运行时基线固化 → 部署策略可控。
3.2 典型架构:Kubernetes 原生 CI/CD 流水线
下图展示了一套面向容器运行时治理的 CI/CD 流水线典型架构,涵盖代码提交、镜像构建、安全扫描、签名与推送至生产注册表的核心环节。
3.3 镜像构建与推送流程详解
镜像构建与推送是流水线中风险最高的环节之一,必须严格遵循以下步骤以确保运行时安全。
| 阶段 | 操作 | 安全治理要点 | 常用工具 |
|---|---|---|---|
| 1. 基础镜像选择 | 从可信基础镜像仓库拉取 | 使用摘要(digest)而非标签锁定版本;验证镜像签名 | Docker Hub / Harbor / Chainguard |
| 2. 依赖安装 | 安装应用依赖与系统包 | 使用最小基础镜像;清理缓存;避免安装调试工具 | apt / yum / pip / npm |
| 3. 镜像构建 | 执行 Dockerfile 或 BuildKit 构建 | 非 root 用户运行;多阶段构建;禁止挂载 docker.sock | Kaniko / BuildKit / Podman |
| 4. 安全扫描 | 扫描操作系统与语言包漏洞 | 设置漏洞严重性阈值(如 CRITICAL 阻断);扫描结果归档 | Trivy / Grype / Snyk |
| 5. 镜像签名 | 使用私钥对镜像摘要签名 | 签名密钥由 KMS 管理;签名绑定流水线身份 | Cosign / Notary / Sigstore |
| 6. 推送至注册表 | 推送至内部或云注册表 | 启用不可变标签;启用镜像垃圾回收策略 | Harbor / ECR / ACR / GCR |
3.4 镜像构建与推送流程示意图
以下流程图展示了从代码提交到镜像推送至注册表的完整链路,并标注了每个环节的治理控制点。
3.5 流水线中的关键安全策略
- 镜像摘要锁定: 在部署清单中使用
image@sha256:...而非image:latest,防止标签漂移。 - 签名验证链: 构建阶段使用 Cosign 签名,部署阶段通过策略引擎(如 Kyverno / OPA)强制验证签名。
- 漏洞阻断策略: 设置扫描阈值,例如:
CRITICAL > 0 → 构建失败,并生成 SBOM 归档。 - 不可变注册表: 启用镜像不可变策略,防止恶意覆盖历史镜像。
最佳实践: 在流水线中集成
cosign verify 命令作为部署前置检查,确保只有经过签名且扫描通过的镜像才能进入 Kubernetes 集群。
3.6 常见流水线工具对比
| 工具 | 类型 | 安全特性 | 适用场景 |
|---|---|---|---|
| Jenkins X | CI/CD 引擎 | 内置 GitOps、预览环境 | 企业级 Kubernetes 流水线 |
| GitLab CI | 一体化 CI/CD | 容器扫描、依赖扫描 | 中小团队、一体化 DevOps |
| Argo Workflows | 工作流引擎 | 可自定义安全步骤 | 复杂多步骤流水线 |
| Tekton | 云原生 CI/CD | 可插拔安全任务 | Kubernetes 原生流水线 |
| Harbor | 镜像注册表 | 漏洞扫描、镜像签名、不可变标签 | 企业级镜像治理 |
注意: 流水线中避免使用
docker build 直接构建镜像,推荐使用 Kaniko 或 BuildKit 以 rootless 模式运行,减少容器逃逸风险。