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 的策略引擎遵循严格的优先级排序机制,理解这一规则对于避免策略冲突和性能问题至关重要。
4.3 策略排序规则详解
- 类型优先:Calico 先按策略类型分组,GlobalNetworkPolicy 整体优先级高于 NetworkPolicy。
- order 字段排序:同一类型内,按
spec.order字段升序排列。order 值越小,优先级越高。未设置 order 的策略默认优先级最低。 - 规则内顺序:同一策略内的 ingress/egress 规则按声明顺序逐条匹配,第一条匹配的规则即生效(短路匹配)。
- 默认拒绝:如果所有策略均未匹配,则流量被默认拒绝。
性能关键点:在基准测试中,策略数量与 order 排序复杂度呈线性关系。建议将高频匹配的规则放在 order 较小的策略中,以减少规则遍历深度。避免在同一个 order 值下放置过多策略,否则引擎需要遍历所有同 order 策略才能确定匹配结果。
4.4 策略审计模式
Calico 提供了 策略审计模式 (Policy Audit Mode),允许在不阻断流量的情况下记录策略匹配结果,是性能基准测试和安全合规验证的重要工具。
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 流水线中,建议将审计模式作为预发布环境的默认配置。通过自动化测试用例触发流量,收集审计日志并与预期策略行为比对,实现策略合规的自动化验证。