2. 核心概念与术语:准入控制器、准入 Webhook 与 CNI 策略引擎

在 Kubernetes 集群中,准入控制器(Admission Controller) 是 API Server 请求链路上的关键拦截点。当用户通过 kubectl 或 API 调用创建、更新、删除资源时,请求在完成身份认证(Authentication)和授权(Authorization)之后、被持久化到 etcd 之前,会依次经过一系列准入控制器的检查。CNI 安全策略正是利用这一机制,在 Pod 创建阶段强制注入网络规则或校验网络配置。

2.1 准入控制器与准入 Webhook

Kubernetes 内置了多种准入控制器(如 NamespaceLifecycle、ResourceQuota),但 CNI 策略引擎通常使用 动态准入 Webhook 来扩展策略逻辑。动态准入 Webhook 允许集群管理员注册外部 HTTP 回调,在请求处理的两个阶段介入:

  • Mutating Admission Webhook:在请求被持久化之前,修改(Mutate)资源对象。CNI 策略引擎常在此阶段为 Pod 注入 Sidecar 容器、修改 Pod 的 securityContext 或添加网络注解。
  • Validating Admission Webhook:在请求被持久化之前,校验(Validate)资源对象。CNI 策略引擎在此阶段检查 Pod 的网络标签、端口映射或网络策略是否合规。
关键区别: Mutating Webhook 先于 Validating Webhook 执行。如果 Mutating Webhook 修改了资源,Validating Webhook 看到的是修改后的版本。CNI 策略引擎通常同时部署两种 Webhook,先注入再校验。

2.2 MutatingWebhookConfiguration 与 ValidatingWebhookConfiguration

这两个资源对象是 Webhook 的注册配置。集群管理员通过 YAML 声明 Webhook 的调用端点、触发规则、超时时间、失败策略等参数。

配置项 MutatingWebhookConfiguration ValidatingWebhookConfiguration
作用阶段 资源持久化前,允许修改 资源持久化前,仅允许拒绝
典型用途 注入 Sidecar、修改 Pod 标签、设置默认安全上下文 校验网络策略标签、检查端口白名单、验证 CNI 注解格式
失败策略 Fail 或 Ignore(影响集群可用性) Fail 或 Ignore(影响策略强制力)
超时默认值 30 秒 30 秒
对象选择器 支持 namespaceSelector 和 objectSelector 支持 namespaceSelector 和 objectSelector
性能基准测试关注点: Webhook 的超时时间和失败策略直接影响集群的调度延迟。在基准测试中,需要模拟 Webhook 服务端延迟,观察 Fail 策略下 Pod 创建失败的比例,以及 Ignore 策略下策略逃逸的风险。

2.3 CNI 插件与策略引擎的关系

CNI(Container Network Interface)插件负责为 Pod 配置网络接口和 IP 地址。而 策略引擎 是一个独立的控制面组件,它通过准入 Webhook 与 CNI 插件协作,实现网络策略的强制实施。两者并非同一组件,而是通过以下方式协同:

  1. 策略定义层:策略引擎(如 CiliumNetworkPolicy、Calico NetworkPolicy CRD)定义允许或拒绝的流量规则。
  2. 准入拦截层:策略引擎注册的 ValidatingWebhook 在 Pod 创建时校验其标签、注解是否匹配策略。
  3. 数据面实施层:CNI 插件(如 Cilium、Calico)在 Pod 网络命名空间中安装 eBPF 程序或 iptables 规则,将策略规则转化为数据包过滤逻辑。
常见故障模式: 如果策略引擎的 Webhook 服务不可用,CNI 插件可能无法获取最新的策略规则,导致 Pod 网络策略失效或 Pod 创建被阻塞。基准测试必须覆盖 Webhook 服务中断场景下的系统行为。
准入 Webhook 在 API Server 请求链中的位置 准入 Webhook 在 API Server 请求链中的位置 用户/kubectl 认证 授权 准入控制器链 Mutating → Validating etcd Webhook 调用 MutatingWebhook ValidatingWebhook → 策略引擎服务

2.4 CNI 策略引擎的准入工作流程

以下流程图展示了 CNI 策略引擎通过准入 Webhook 与 CNI 插件协作的完整工作流程:

CNI 策略引擎准入工作流程 CNI 策略引擎准入工作流程 创建 Pod 请求 MutatingWebhook ValidatingWebhook CNI 插件配置网络 策略引擎服务 注入 Sidecar 校验标签 返回准入响应 基准测试关键指标 Webhook 响应延迟 Pod 创建吞吐量 策略拒绝率 CNI 配置耗时

2.5 核心术语关系总结

术语 层级 职责 与 CNI 策略的关系
Admission Controller 控制面 拦截 API 请求,执行内置或动态策略 提供 Webhook 注册框架
MutatingWebhookConfiguration 控制面 注册修改资源的 Webhook 注入网络策略 Sidecar 或注解
ValidatingWebhookConfiguration 控制面 注册校验资源的 Webhook 校验 Pod 网络策略合规性
CNI 插件 数据面 配置 Pod 网络接口和 IP 执行策略引擎下发的网络规则
策略引擎 控制面 定义、存储、分发网络策略 通过 Webhook 和 CRD 驱动 CNI 插件
工程实践建议: 在部署 CNI 策略引擎时,务必为 MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration 设置合理的 timeoutSeconds(建议 5-10 秒)和 failurePolicy(生产环境建议 Fail 并配合高可用部署)。基准测试应覆盖 Webhook 超时、服务重启、网络分区等故障场景,验证集群的容错能力。