3. NetPolicy 架构总览:整体架构图、核心组件与数据/控制平面分离设计

NetPolicy 作为专为多租户签名链路设计的网络隔离引擎,其架构遵循云原生社区最佳实践,严格分离控制平面与数据平面。本章将拆解整体架构、核心组件职责以及平面分离的设计原理,帮助你在后续章节中快速定位每个功能模块。

3.1 整体架构图

下图展示了 NetPolicy 在 Kubernetes 集群中的部署形态与组件关系。控制平面运行在管理集群或命名空间内,数据平面以 DaemonSet 形式驻留在每个工作节点上,两者通过 gRPC 与事件机制通信。

NetPolicy 整体架构图 控制平面 (Control Plane) API Server Controller etcd / 签名策略存储 数据平面 (Data Plane) Agent (DaemonSet) eBPF / iptables 引擎 签名验证模块 (Signature Verifier) gRPC + 事件推送 架构关键说明 • 控制平面负责策略编排与签名校验 • 数据平面负责实时流量过滤与签名 • 两者通过 gRPC 双向流同步策略 • 签名链路:Pod → Agent → 签名模块 • 多租户隔离基于 Namespace + Label • 支持 NetworkPolicy 与签名策略叠加 • 审计日志由 Controller 统一收集 • 故障切换:Agent 本地缓存策略 • 升级不影响已有连接 • 兼容 Calico / Cilium 网络插件 • 签名算法支持 RSA / ECDSA / Ed25519 • 性能损耗 < 5% (基准测试)

3.2 核心组件详解

NetPolicy 由三个核心组件构成:API Server、Controller 和 Agent。每个组件承担明确的职责边界,共同实现签名链路的网络隔离。

组件 部署形态 核心职责 关键接口
API Server Deployment (1~3 副本) 策略 CRD 注册、签名请求验证、租户身份认证 RESTful API / Webhook
Controller Deployment (1 主多备) 策略编排、签名校验、审计日志、租户资源映射 gRPC Server / Event Watcher
Agent DaemonSet (每节点 1 Pod) 本地策略缓存、eBPF/iptables 规则下发、签名验证 gRPC Client / Netlink

3.2.1 API Server — 策略入口与身份网关

API Server 是 NetPolicy 的北向接口,负责接收来自运维人员或 CI/CD 系统的策略声明。它扩展了 Kubernetes 原生 API,通过 CRD 定义 SignaturePolicy 和 NetworkIsolation 资源。

  • CRD 注册:启动时自动注册 signaturepolicies.netpolicy.io 和 networkisolations.netpolicy.io。
  • 签名验证:接收带有数字签名的策略请求,使用租户公钥验证签名完整性。
  • 租户身份认证:基于 X.509 证书或 JWT 识别租户身份,防止跨租户策略篡改。
  • Webhook 集成:提供 MutatingWebhook 和 ValidatingWebhook,在 Pod 创建时注入签名标签。
关键指标:API Server 单实例支持 5000+ 策略并发写入,P99 延迟 < 50ms。

3.2.2 Controller — 策略编排与状态中枢

Controller 是 NetPolicy 的“大脑”,负责将 API Server 接收到的策略转换为数据平面可执行的规则。它维护全局策略状态机,并处理租户间的资源映射。

  • 策略编排:将 SignaturePolicy 解析为签名规则链,按优先级排序后下发。
  • 签名校验:对 Agent 上报的签名请求进行二次校验,防止伪造签名。
  • 审计日志:记录所有策略变更、签名成功/失败事件,输出到标准输出或外部存储。
  • 租户资源映射:维护 Tenant → Namespace → Label 的映射关系,确保隔离边界正确。
  • 故障恢复:当 Agent 失联时,Controller 标记节点为“不健康”,并触发重新调度。
最佳实践:Controller 应部署在管理集群中,与业务集群网络隔离,避免单点故障影响数据平面。

3.2.3 Agent — 本地执行与签名引擎

Agent 以 DaemonSet 形式运行在每个 Kubernetes 工作节点上,是数据平面的核心执行者。它负责将 Controller 下发的策略转化为内核级网络规则,并执行签名验证。

  • 本地策略缓存:从 Controller 同步策略后,缓存在本地内存中,即使控制平面中断也能继续工作。
  • eBPF / iptables 引擎:根据策略类型选择 eBPF(高性能)或 iptables(兼容性)作为数据路径。
  • 签名验证模块:拦截 Pod 出站流量,提取签名信息,与本地缓存策略比对。
  • 指标上报:每 30 秒向 Controller 上报策略命中数、签名失败数、延迟等指标。
注意:Agent 的签名验证模块默认使用 eBPF 模式,若内核版本低于 4.18 会自动降级为 iptables 模式,此时签名验证延迟会增加约 2ms。

3.3 数据平面与控制平面分离设计

NetPolicy 严格遵循数据平面与控制平面分离的设计原则,这是实现高可用、高性能和多租户隔离的基础。下面通过对比表格和独立图示说明两者的差异与协作方式。

维度 控制平面 数据平面
职责 策略编排、签名校验、审计 流量过滤、签名验证、规则执行
部署位置 管理集群 / 独立命名空间 每个工作节点 (DaemonSet)
通信协议 gRPC (双向流) + Event Netlink / eBPF Maps
故障影响 策略更新暂停,已有策略继续生效 该节点网络隔离失效
性能要求 低延迟 (P99 < 100ms) 极低延迟 (P99 < 1ms)
扩展方式 水平扩展 (Deployment) 随节点自动扩展 (DaemonSet)
数据平面与控制平面分离设计 控制平面 API Server Controller etcd / 策略存储 审计日志 / 指标收集 租户身份映射 数据平面 (每个节点) Agent eBPF Maps 签名验证模块 本地策略缓存 Netlink / iptables 接口 gRPC 策略下发 指标 / 事件上报

3.4 平面分离的设计收益

数据平面与控制平面分离不是简单的架构选择,而是为了满足多租户签名链路隔离的四个核心要求:

  1. 故障隔离:控制平面故障不影响已有网络策略的执行,Agent 本地缓存确保数据平面持续工作。
  2. 性能独立:数据平面专注于快速包处理,不受控制平面策略编排的延迟波动影响。
  3. 安全边界:控制平面可以部署在更严格的安全域中,数据平面仅暴露必要的 gRPC 端口。
  4. 弹性扩展:控制平面按需水平扩展,数据平面随节点自动扩展,两者互不干扰。
生产验证:在 500 节点集群中,控制平面故障 10 分钟期间,数据平面持续处理 12000+ 签名请求,零策略丢失。

3.5 本章小结