4. Calico 网络策略进阶:GlobalNetworkPolicy 与 NetworkPolicy 区别,策略优先级与排序规则,策略审计模式

4.1 GlobalNetworkPolicy 与 NetworkPolicy 核心区别

在 Calico 的准入控制体系中,NetworkPolicy (K8s 原生) 与 GlobalNetworkPolicy (Calico 扩展) 是两种核心策略对象。理解它们的差异是构建高性能、可维护策略体系的基础。

对比维度 NetworkPolicy (K8s 原生) GlobalNetworkPolicy (Calico 扩展)
作用域 仅作用于特定 Namespace 集群全局,跨所有 Namespace
选择器 仅支持 podSelector 和 namespaceSelector 支持 podSelector、namespaceSelector、nodeSelector、serviceAccountSelector
规则方向 ingress / egress 双向 ingress / egress 双向,支持 preDNAT 和 doNotTrack 高级规则
策略顺序 隐式 OR 合并,无显式优先级 显式 order 字段控制优先级,数字越小优先级越高
默认行为 未匹配则默认拒绝 未匹配则默认拒绝,但可通过 order 控制覆盖
适用场景 租户隔离、微服务间细粒度控制 集群基线策略、节点级防护、全局白名单/黑名单
实践建议:在平台门户场景下,建议将 GlobalNetworkPolicy 用于集群级别的安全基线(如禁止所有 Namespace 访问 kube-system 的 etcd 端口),而将 NetworkPolicy 用于业务团队自主管理的微服务间访问控制。两者配合使用,既保证全局安全,又保留租户灵活性。

4.2 策略优先级与排序规则

Calico 的策略引擎遵循严格的优先级排序机制,理解这一规则对于避免策略冲突和性能问题至关重要。

Calico 策略优先级排序流程 1. 策略类型分组 2. 按 order 字段排序(数字越小优先级越高) 3. 按规则顺序逐条匹配(第一条匹配即生效) 4. 匹配则执行动作(Allow / Deny / Log),未匹配则默认拒绝 说明:GlobalNetworkPolicy 的 order 范围通常为 0-10000,建议预留 1000 以内的 order 给集群基线策略

4.3 策略排序规则详解

  1. 类型优先:Calico 先按策略类型分组,GlobalNetworkPolicy 整体优先级高于 NetworkPolicy。
  2. order 字段排序:同一类型内,按 spec.order 字段升序排列。order 值越小,优先级越高。未设置 order 的策略默认优先级最低。
  3. 规则内顺序:同一策略内的 ingress/egress 规则按声明顺序逐条匹配,第一条匹配的规则即生效(短路匹配)。
  4. 默认拒绝:如果所有策略均未匹配,则流量被默认拒绝。
性能关键点:在基准测试中,策略数量与 order 排序复杂度呈线性关系。建议将高频匹配的规则放在 order 较小的策略中,以减少规则遍历深度。避免在同一个 order 值下放置过多策略,否则引擎需要遍历所有同 order 策略才能确定匹配结果。

4.4 策略审计模式

Calico 提供了 策略审计模式 (Policy Audit Mode),允许在不阻断流量的情况下记录策略匹配结果,是性能基准测试和安全合规验证的重要工具。

策略审计模式工作流程 流量进入节点 策略引擎匹配 审计模式:记录日志 正常模式:执行动作 审计日志输出到 felix.log / syslog / 外部日志系统 审计模式配置示例 在 GlobalNetworkPolicy 中设置 spec.doNotTrack: true 或 spec.preDNAT: true 同时设置 spec.audit: true 开启审计日志记录

4.5 审计模式配置与使用

审计模式通过策略的 spec.audit 字段启用,配合 spec.doNotTrack 或 spec.preDNAT 实现无阻断的流量观测。

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: audit-all-egress
spec:
  order: 10
  selector: all()
  egress:
    - action: Allow
      protocol: TCP
      destination:
        ports:
          - 443
  audit: true
  doNotTrack: true
性能注意事项:审计模式会额外产生日志 I/O 开销。在基准测试中,开启审计模式后,策略匹配延迟会增加约 5%-15%。建议仅在调试、合规审计或性能基线采集时开启,生产环境默认关闭。

4.6 审计日志字段说明

字段 说明 示例值
type 日志类型 audit
action 策略动作 Allow / Deny
policy 匹配的策略名称 audit-all-egress
source_ip 源 IP 地址 10.0.1.5
dest_ip 目标 IP 地址 192.168.1.100
dest_port 目标端口 443
protocol 传输层协议 TCP
result 匹配结果 pass / block

4.7 策略优先级与审计模式在基准测试中的应用

  • 优先级验证:在基准测试中,通过构造不同 order 的策略,验证策略引擎的排序正确性和性能开销。
  • 审计模式辅助:在性能测试期间开启审计模式,可以精确统计每条策略的匹配次数和延迟分布,帮助定位性能瓶颈。
  • 策略冲突检测:利用审计日志分析是否存在冗余或冲突的策略规则,优化策略集大小。
  • 基线建立:在无策略、少量策略、大量策略三种场景下分别采集审计日志,建立性能基线。
最佳实践:在平台门户的 CI/CD 流水线中,建议将审计模式作为预发布环境的默认配置。通过自动化测试用例触发流量,收集审计日志并与预期策略行为比对,实现策略合规的自动化验证。