3. 发布流水线概述:CI/CD 流水线在 Kubernetes 环境中的典型架构、镜像构建与推送流程

3.1 容器化 CI/CD 流水线的核心价值

在 Kubernetes 原生环境中,CI/CD 流水线不再仅仅是代码编译与部署的自动化工具,而是容器运行时治理的第一道防线。流水线必须确保从源码提交到镜像运行的全链路可追溯、不可篡改且符合安全基线。

关键治理目标: 镜像签名验证 → 漏洞扫描准入 → 运行时基线固化 → 部署策略可控。

3.2 典型架构:Kubernetes 原生 CI/CD 流水线

下图展示了一套面向容器运行时治理的 CI/CD 流水线典型架构,涵盖代码提交、镜像构建、安全扫描、签名与推送至生产注册表的核心环节。

Kubernetes 原生 CI/CD 流水线架构图 Kubernetes 原生 CI/CD 流水线架构(治理视角) 开发者提交代码 Git 仓库 / Webhook 触发 镜像构建 Dockerfile / Kaniko / BuildKit 安全扫描 & 签名 Trivy / Cosign / Notary 推送至注册表 Harbor / ECR / ACR 流水线治理策略层(发布窗口防护) 镜像签名强制校验 漏洞阈值阻断(CRITICAL) 不可变标签与摘要锁定 部署前审批门控 Kubernetes 集群部署 ArgoCD / Flux / 自定义 Operator 镜像拉取

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 镜像构建与推送流程示意图

以下流程图展示了从代码提交到镜像推送至注册表的完整链路,并标注了每个环节的治理控制点。

镜像构建与推送流程(含治理控制点) 镜像构建与推送流程(含治理控制点) 代码检出 Dockerfile 解析 基础镜像签名校验 镜像构建 安全扫描 镜像签名 推送至注册表 部署准入门控 治理控制点(发布窗口防护) • 基础镜像必须来自白名单仓库 • 扫描结果中 CRITICAL 漏洞数量为 0 才允许签名 • 签名密钥由硬件安全模块(HSM)保护 • 注册表启用不可变标签,禁止覆盖已有标签

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 模式运行,减少容器逃逸风险。