2. Calico 基础回顾:架构组件、数据路径与策略模型
在深入平台门户集成之前,必须重新夯实 Calico 的核心基础。本章聚焦三大支柱:组件架构、数据路径与策略模型。理解这些是设计安全权限策略的前提。
2.1 Calico 架构组件
Calico 采用分布式无中心架构,核心组件包括 Felix、Typha 以及数据存储后端(etcd 或 Kubernetes CRD)。
| 组件 | 角色 | 关键职责 |
|---|---|---|
| Felix | 节点代理(DaemonSet) | 监听策略更新,编程 iptables/eBPF 规则,管理路由与端点 |
| Typha | 通信代理(Deployment) | 聚合 Felix 与 API 服务器之间的连接,降低 etcd/CRD 负载 |
| etcd / CRD | 数据存储 | 存储网络策略、端点、IP 池等所有集群状态 |
| kube-controllers | 控制器(Deployment) | 处理策略冲突检测、IPAM 回收、命名空间隔离等 |
架构要点:Felix 是策略执行的“最后一公里”;Typha 在集群规模超过 50 节点时成为性能瓶颈的缓解关键;CRD 模式已成为主流,etcd 模式仅用于自建场景。
2.2 数据路径:iptables 与 eBPF
Calico 支持两种数据平面:iptables(经典模式)与 eBPF(高性能模式)。两者在策略执行逻辑上一致,但性能与可观测性差异显著。
| 维度 | iptables 模式 | eBPF 模式 |
|---|---|---|
| 转发路径 | Netfilter 钩子链(PREROUTING/FORWARD) | XDP / TC 钩子,绕过 iptables |
| 延迟 | 中等(规则链遍历) | 低(直接内核态匹配) |
| 吞吐量 | 受限于规则数量 | 接近线速 |
| 可观测性 | 依赖 conntrack 与日志 | 内置 Hubble / 流日志 |
| 策略支持 | 完全支持 | 完全支持 + 服务负载均衡 |
选型建议:生产环境优先启用 eBPF 模式(需内核 5.8+),可降低延迟 30%-50%,并直接获得 Hubble 可观测性。若内核版本受限,iptables 模式仍是稳定选择。
2.3 策略模型:NetworkPolicy 与 GlobalNetworkPolicy
Calico 的策略模型在 Kubernetes 原生 NetworkPolicy 之上扩展了 GlobalNetworkPolicy,支持集群级、命名空间级与端点级控制。
2.3.1 策略层级
- NetworkPolicy:命名空间作用域,仅影响该命名空间内的 Pod。
- GlobalNetworkPolicy:集群作用域,可跨命名空间匹配,支持优先级排序。
- Staged NetworkPolicy:预演模式,仅记录命中但不执行,用于策略验证。
2.3.2 策略匹配规则
| 匹配维度 | 示例 | 说明 |
|---|---|---|
| Pod 标签 | app: frontend |
选择目标 Pod |
| 命名空间标签 | project: payment |
跨命名空间匹配 |
| IP 地址/CIDR | 10.0.0.0/16 |
外部流量控制 |
| 端口/协议 | tcp/443 |
精细端口控制 |
| 服务账户 | system:serviceaccount:ns:sa |
基于身份的策略 |
权限设计注意:GlobalNetworkPolicy 具有集群级影响,平台门户集成时必须限制非管理员用户的创建权限,避免策略冲突或误阻断关键服务。
2.3.3 策略执行顺序
- 入站(Ingress)规则按优先级从低到高匹配,第一条命中即执行。
- 出站(Egress)规则同理,默认拒绝所有未显式允许的流量。
- GlobalNetworkPolicy 优先级高于 NetworkPolicy,但可通过
order字段调整。
# 示例:GlobalNetworkPolicy 拒绝所有非加密出口流量
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: deny-unencrypted-egress
spec:
selector: all()
order: 10
egress:
- action: Deny
protocol: TCP
destination:
ports:
- 80
- action: Allow
protocol: TCP
destination:
ports:
- 443
策略模型总结:Calico 的策略模型是“默认拒绝 + 显式允许”的零信任模型。平台门户集成时,应提供可视化策略编辑器,自动生成 YAML 并校验冲突,降低人工配置风险。