1. 课程导论:多集群架构的演进、为什么需要准入门禁、课程目标与学习路径

1.1 多集群架构的演进:从单体到联邦

Kubernetes 集群管理经历了从“单集群大一统”到“多集群分布式治理”的演进。随着业务规模增长、合规要求细化以及混合云战略普及,单一集群在隔离性、爆炸半径、地域延迟和团队自治方面逐渐暴露瓶颈。

阶段 架构特征 典型场景 管理复杂度
单集群 所有 workload 共享一个控制面 开发测试、小规模生产 低
多集群松散 独立集群,人工运维,无统一策略 多环境、多区域 中
多集群联邦 KubeFed / Cluster API 统一编排 跨集群调度、灾备 高
多集群治理 策略引擎 + 准入门禁 + 审计 合规、安全、成本管控 中高
演进驱动力: 爆炸半径控制(单集群故障影响面)、合规隔离(PCI-DSS / GDPR 数据边界)、团队自治(每个团队拥有独立控制面)、混合云/多云统一策略。

1.2 为什么需要准入门禁

在多集群架构中,每个集群都可能被不同团队、不同 CI/CD 管道甚至外部系统访问。如果没有统一的准入控制,以下风险将急剧放大:

  • 配置漂移: 同一应用在不同集群的资源配置不一致,导致行为差异。
  • 安全漏洞: 特权容器、hostPath 挂载、不安全镜像被部署到生产集群。
  • 资源滥用: 未设置 resource limits 的 Pod 抢占集群资源。
  • 合规违规: 敏感数据被部署到非合规区域或未加密存储。
  • 审计缺失: 无法追溯谁在何时向哪个集群提交了何种资源。

准入门禁(Admission Gate)作为 Kubernetes API 请求的“守门人”,在资源持久化之前拦截、校验、变异或拒绝请求。多集群场景下,准入门禁需要从单集群的 ValidatingWebhookConfiguration / MutatingWebhookConfiguration 升级为跨集群的策略分发与执行体系。

关键认知: 单集群的准入 Webhook 只能防御“已接入集群”的请求;多集群准入门禁必须解决“策略统一分发”、“集群级差异化覆盖”和“离线集群兜底”三大难题。

1.3 多集群准入门禁架构总览

下图展示了多集群准入门禁的核心组件与请求流转路径:

多集群准入门禁架构图 多集群准入门禁核心架构 策略中心 (Policy Hub) 策略引擎 (OPA / Kyverno) 集群 A (生产) 准入 Webhook 集群 B (预发) 准入 Webhook 集群 C (开发) 准入 Webhook 审计与合规中心 策略中心统一定义 → 策略引擎编译分发 → 各集群 Webhook 本地执行 → 审计中心集中收集

1.4 课程目标

完成本课程后,你将具备以下能力:

  • 设计能力: 根据组织规模与合规要求,设计多集群准入门禁的顶层架构。
  • 实现能力: 基于 OPA (Rego) 或 Kyverno 编写跨集群策略,并通过 GitOps 管道分发。
  • 运维能力: 搭建准入门禁的监控、告警与审计链路,处理策略冲突与集群离线场景。
  • 扩展能力: 自定义准入 Webhook,集成第三方安全扫描器与成本控制工具。

1.5 学习路径与章节地图

课程按“基础 → 核心 → 进阶 → 实战”四阶段组织,共 30 章:

课程学习路径图 课程学习路径(四阶段) 基础篇 第1-5章 架构演进 · 准入原理 核心篇 第6-14章 OPA · Kyverno · 策略分发 进阶篇 第15-22章 自定义Webhook · 审计 实战篇 第23-30章 企业案例 · 混沌工程 学习建议 每章包含理论讲解 + 动手实验 + 课后测验。建议按顺序学习,核心篇可结合企业实际策略同步练习。 实战篇需要至少 3 个集群(可用 kind / k3s 模拟)和一套 GitOps 工具链(ArgoCD / Flux)。

1.6 前置要求与工具准备

类别 具体要求 推荐版本
Kubernetes 理解 Pod、Deployment、Service、Namespace 等核心资源;熟悉 kubectl v1.28+
策略引擎 了解 OPA 或 Kyverno 基本概念(非必须,课程会从零讲解) OPA v0.60+ / Kyverno v1.12+
GitOps 了解 Git 工作流;有 ArgoCD 或 Flux 基础更佳 ArgoCD v2.10+
实验环境 本地或云上可运行 3 个 K8s 集群(推荐 kind 或 k3s) kind v0.22+ / k3s v1.30+
快速启动提示: 如果你还没有多集群环境,可以使用以下命令在 5 分钟内用 kind 创建 3 个集群:
kind create cluster --name cluster-a
kind create cluster --name cluster-b
kind create cluster --name cluster-c
后续章节会在此基础上部署准入门禁组件。