1. 课程导论:CRI 概念、容器运行时治理背景、发布包完整性的重要性

1.1 什么是 CRI?—— 容器运行时接口的核心定位

CRI(Container Runtime Interface,容器运行时接口)是 Kubernetes 在 1.5 版本引入的插件化协议,用于解耦 kubelet 与底层容器运行时。它定义了 gRPC 接口规范,使任意符合 CRI 标准的运行时(如 containerd、CRI-O、Docker Engine 通过 dockershim 桥接)都能无缝接入 Kubernetes 集群。

CRI 的核心价值: 将容器生命周期管理(创建、启动、停止、删除)与镜像管理(拉取、推送、列出)抽象为标准接口,实现运行时无关性。
CRI 在 Kubernetes 节点架构中的位置 CRI 在 Kubernetes 节点架构中的位置 kubelet gRPC 调用 CRI 接口层 containerd CRI-O 其他 CRI 运行时 CRI 使 kubelet 无需关心底层是 containerd、CRI-O 还是其他运行时

1.2 容器运行时治理背景:为什么需要治理?

随着 Kubernetes 成为云原生基础设施的事实标准,容器运行时从单一的 Docker 演变为多运行时并存的局面。这种多样性带来了治理挑战:

  • 安全漏洞频发: 运行时组件(runc、containerd)曾出现 CVE-2019-5736、CVE-2024-21626 等高危漏洞,直接影响集群安全。
  • 版本碎片化: 同一集群内可能混用不同版本的 containerd 或 CRI-O,导致行为不一致、排障困难。
  • 配置漂移: 节点级运行时配置(如 seccomp 策略、cgroup 驱动)缺乏统一管控,易出现合规违规。
  • 生命周期脱节: 运行时升级、回滚、退役等操作缺少标准化流程,容易引发生产事故。
常见容器运行时治理痛点对比
治理维度 问题表现 影响范围
安全合规 运行时漏洞未及时修复、默认配置不安全 集群级安全风险
版本管理 节点间运行时版本不一致、API 兼容性断裂 Pod 调度失败、行为异常
配置一致性 cgroup 驱动、日志轮转、镜像加速器配置漂移 节点健康检查不一致
运维流程 升级/回滚无标准化、缺少灰度验证 变更引发大面积故障
治理目标: 通过 CRI 校验机制,对容器运行时的版本、配置、安全策略进行持续验证,确保集群生命周期中运行时状态始终符合预期。

1.3 发布包完整性的重要性:从源头保障可信

容器运行时的发布包(二进制、镜像、配置文件)是集群基础设施的“原材料”。如果发布包在构建、分发、部署过程中被篡改或损坏,后续所有治理措施都将失去根基。

完整性校验的核心场景:

  1. 供应链安全: 防止恶意注入(如挖矿程序、后门)进入运行时二进制。
  2. 部署一致性: 确保集群所有节点使用相同哈希值的发布包,消除“幽灵差异”。
  3. 回滚可信: 回滚操作依赖历史发布包的完整性,避免回滚到被篡改的版本。
  4. 审计追溯: 完整性校验日志可作为合规审计的证据链。
发布包完整性校验流程 发布包完整性校验流程 ① 构建发布包 ② 计算哈希 + 签名 ③ 分发到制品库 ④ 节点拉取发布包 ⑤ 校验哈希 & 签名 ⑥ 通过 → 部署 / 拒绝 → 告警 完整性校验是“信任链”的第一环,缺失校验等于将集群安全交给不可控因素 推荐使用 SHA-256 哈希 + GPG 或 Sigstore 签名

1.4 三者关系:CRI 校验 × 运行时治理 × 发布包完整性

本课程的核心逻辑是:以 CRI 校验为技术手段,以 容器运行时治理为管理目标,以 发布包完整性为信任基石,构建覆盖集群全生命周期的运维体系。

关键认知: 没有发布包完整性,运行时治理就是“沙上建塔”;没有 CRI 校验,治理就缺乏自动化抓手;没有治理框架,校验和完整性就沦为孤立的工具。