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 插件协作,实现网络策略的强制实施。两者并非同一组件,而是通过以下方式协同:
- 策略定义层:策略引擎(如 CiliumNetworkPolicy、Calico NetworkPolicy CRD)定义允许或拒绝的流量规则。
- 准入拦截层:策略引擎注册的 ValidatingWebhook 在 Pod 创建时校验其标签、注解是否匹配策略。
- 数据面实施层:CNI 插件(如 Cilium、Calico)在 Pod 网络命名空间中安装 eBPF 程序或 iptables 规则,将策略规则转化为数据包过滤逻辑。
常见故障模式: 如果策略引擎的 Webhook 服务不可用,CNI 插件可能无法获取最新的策略规则,导致 Pod 网络策略失效或 Pod 创建被阻塞。基准测试必须覆盖 Webhook 服务中断场景下的系统行为。
2.4 CNI 策略引擎的准入工作流程
以下流程图展示了 CNI 策略引擎通过准入 Webhook 与 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 超时、服务重启、网络分区等故障场景,验证集群的容错能力。