3. Velero 准入场景定义

3.1 什么是准入场景

在 Kubernetes 生态中,准入场景(Admission Scenario)是指资源对象在持久化到 etcd 之前,由准入控制器(Admission Controller)拦截并执行校验、修改或策略强制的阶段。该场景位于 API 请求经过认证与授权之后、etcd 写入之前,是集群安全与合规的最后一道防线。

核心特征:准入场景是同步、阻塞的——控制器必须返回允许或拒绝的决策,API Server 才会继续处理请求。

准入场景分为两类:

类型 执行时机 典型用途
Mutating(变更) 先执行 注入 Sidecar、设置默认值、修正资源字段
Validating(验证) 后执行 检查资源合规性、禁止高危配置、验证灾备标签

Velero 在备份与恢复流程中,会主动与这两个阶段交互,确保备份数据的一致性与恢复后的集群合规性。

Kubernetes API 请求生命周期 — 准入场景位置 客户端请求 认证 / 授权 Mutating 准入 Validating 准入 etcd 准入场景(Admission Scenario) 资源持久化前最后一道可编程控制点,Velero 在此阶段执行备份钩子与恢复策略注入 用户 / 控制器 身份校验 修改资源(注入、默认值) 校验合规(灾备标签、策略) 持久存储

3.2 为何需要准入控制

没有准入控制的集群,任何具有 API 访问权限的客户端都可以直接创建或修改资源,导致以下风险:

  • 配置漂移:关键资源(如 PVC、Namespace)缺少灾备标签,备份策略无法匹配。
  • 安全漏洞:特权容器、hostPath 挂载等危险配置绕过审计。
  • 数据不一致:备份前未执行预钩子(Pre-hook),导致文件系统快照处于脏状态。
  • 恢复失败:恢复后的资源与集群现有策略冲突(如 Pod 安全标准、网络策略)。
灾备视角:准入控制确保每个被备份的资源都携带正确的 velero.io/backup-name 标签,且恢复时自动注入 velero.io/exclude-from-backup=true 避免循环备份。

准入控制带来的核心价值:

价值维度 说明 Velero 关联
策略强制 确保所有资源符合组织灾备规范 强制备份标签、禁止未标记 Namespace 的创建
数据完整性 在备份前执行数据冻结操作 通过 Mutating Webhook 注入 Pre/Post-hook
恢复一致性 恢复时自动调整资源以适配目标集群 Validating Webhook 校验恢复后的资源合规性
审计与追溯 记录所有准入决策日志 Velero 插件可输出准入审计事件

3.3 Velero 在准入场景中的角色

Velero 在准入场景中扮演双向适配器的角色:既作为准入 Webhook 的消费者(备份/恢复时触发),也作为准入策略的提供者(通过 Velero 插件扩展)。

关键定位:Velero 本身不实现完整的准入控制器,而是通过 Velero 插件(Plugin) 与 备份/恢复钩子(Hook) 机制,将准入能力嵌入到灾备工作流中。

具体角色分解:

  1. 备份准入角色:
    • 在备份开始前,通过 Pre-backup Hook 执行数据冻结(如 Flush MySQL、冻结文件系统)。
    • 在备份过程中,通过 Mutating Webhook 自动为资源添加 velero.io/backup-name 标签。
    • 在备份完成后,通过 Post-backup Hook 恢复数据写入(如 Unfreeze)。
  2. 恢复准入角色:
    • 在恢复资源创建前,通过 Validating Webhook 检查目标集群是否满足资源依赖(如 StorageClass 是否存在)。
    • 在恢复过程中,通过 Mutating Webhook 自动替换 Namespace、调整资源配额。
    • 在恢复完成后,通过 Post-restore Hook 执行数据校验或服务重启。
  3. 策略注入角色:
    • 通过 Velero 自定义插件,实现企业级准入策略(如禁止备份包含 Secret 的 Namespace)。
    • 与 Kyverno / OPA Gatekeeper 等外部准入引擎集成,统一灾备策略管理。
Velero 在准入场景中的角色模型 Velero 灾备准入双向适配器 备份准入 Pre-hook 冻结 标签注入 恢复准入 资源校验 Namespace 替换 策略注入 插件 + 外部准入引擎 备份时:冻结 → 备份 → 解冻 恢复时:校验 → 替换 → 重启
常见误区:Velero 的准入角色不是默认启用的。需要显式配置 --use-volume-snapshots=false 或安装对应的 Velero Plugin for Admission。未配置准入场景时,备份可能包含不一致数据,恢复可能因资源冲突而失败。

总结:Velero 在准入场景中通过钩子机制和插件扩展,将灾备能力嵌入到 Kubernetes 资源生命周期的关键节点。理解这一角色,是后续排查准入相关故障(如备份钩子超时、恢复资源校验失败)的基础。