3. 环境总览:整体技术栈选型与组件交互
本章从架构视角出发,明确资源配额模型环境所依赖的核心技术栈,梳理各组件在策略即代码(Policy-as-Code, PaC)体系中的职责与交互关系。整体选型围绕 Kubernetes 作为控制面、OPA/Gatekeeper 与 Kyverno 作为策略引擎、Crossplane 作为资源编排层展开,形成“策略定义 → 策略执行 → 资源供给”的闭环。
3.1 技术栈选型总览
下表列出本指南选用的核心组件及其版本基线、定位与关键能力:
| 组件 | 版本基线 | 定位 | 关键能力 |
|---|---|---|---|
| Kubernetes | v1.28+ | 容器编排与资源抽象层 | 原生 ResourceQuota、LimitRange、RBAC、Admission Webhook |
| OPA/Gatekeeper | Gatekeeper v3.14+ | 通用策略引擎(Rego) | 可编程策略、约束模板(ConstraintTemplate)、审计与同步 |
| Kyverno | v1.11+ | Kubernetes 原生策略引擎 | YAML 风格策略、资源变更/生成/验证、策略报告 |
| Crossplane | v1.14+ | 控制平面资源编排框架 | CompositeResource (XRD)、Claim、Provider、Composition |
选型依据: OPA/Gatekeeper 提供强大的 Rego 语言表达能力,适合复杂逻辑策略;Kyverno 降低策略编写门槛,适合快速落地资源配额校验与自动注入;Crossplane 将云资源与 Kubernetes 原生 API 对齐,实现“资源即代码”的声明式供给。
3.2 各组件职责与交互关系
下图展示整体架构中各组件的分层定位与核心数据流:
3.3 组件职责详解
3.3.1 OPA/Gatekeeper
- 策略定义: 使用 Rego 语言编写
ConstraintTemplate,定义资源配额校验逻辑(如命名空间 CPU/内存上限、标签强制规则)。 - 策略执行: 以 Admission Webhook 形式拦截资源创建/更新请求,返回
allowed或denied响应。 - 审计模式: 支持对已有资源进行周期性审计,生成
violations报告。
3.3.2 Kyverno
- 策略定义: 使用 Kubernetes 原生 YAML 资源
ClusterPolicy/Policy,支持validate、mutate、generate三种规则。 - 自动注入: 可在 Pod 创建时自动注入资源配额 sidecar 或修改资源请求/限制。
- 策略报告: 提供
PolicyReport资源,记录策略执行结果与合规状态。
3.3.3 Kubernetes API Server
- 原生配额:
ResourceQuota与LimitRange提供基础资源约束能力。 - Webhook 集成: 通过
ValidatingAdmissionWebhook和MutatingAdmissionWebhook调用外部策略引擎。 - 审计日志: 记录所有 API 请求,供策略审计与合规追溯。
3.3.4 Crossplane
- 资源抽象: 定义
CompositeResourceDefinition (XRD),将云资源(如 RDS、VPC)抽象为 Kubernetes CRD。 - 资源编排: 通过
Composition定义资源组合模板,Claim触发资源创建。 - 策略联动: 在 Composition 中嵌入资源配额校验逻辑,或通过 Provider 调用外部策略服务。
3.4 交互流程与数据流
下图展示一次典型的资源配额策略校验与资源供给流程:
3.5 组件交互总结
| 交互场景 | 发起方 | 接收方 | 协议/接口 | 典型延迟 |
|---|---|---|---|---|
| 资源提交校验 | kube-apiserver | Gatekeeper/Kyverno | ValidatingAdmissionWebhook | < 100ms |
| 资源变更注入 | kube-apiserver | Kyverno | MutatingAdmissionWebhook | < 50ms |
| 资源编排请求 | 用户/管理员 | Crossplane | Kubernetes API (Claim) | 秒级 |
| 策略审计 | Gatekeeper/Kyverno | kube-apiserver | List/Watch 已有资源 | 分钟级(定时) |
| 资源状态回写 | Crossplane Provider | kube-apiserver | Status Update | 秒级 |
架构建议: 在生产环境中,建议将 Gatekeeper 与 Kyverno 分层部署——Gatekeeper 负责全局不可变策略(如安全基线、配额硬限制),Kyverno 负责命名空间级可变策略(如自动注入、标签生成)。Crossplane 作为资源供给层,应通过 Composition 中的
patch 机制将策略标签传递至目标资源,实现策略与供给的联动。