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 模式仅用于自建场景。
Calico 核心组件架构图 Calico 核心组件架构图 Kubernetes API Server Typha Felix (Node 1) Felix (Node 2) Felix (Node N) etcd / CRD 存储 说明:Felix 直接与 Typha 通信,Typha 聚合后与 API Server 交互,策略数据持久化至 etcd/CRD。

2.2 数据路径:iptables 与 eBPF

Calico 支持两种数据平面:iptables(经典模式)与 eBPF(高性能模式)。两者在策略执行逻辑上一致,但性能与可观测性差异显著。

维度 iptables 模式 eBPF 模式
转发路径 Netfilter 钩子链(PREROUTING/FORWARD) XDP / TC 钩子,绕过 iptables
延迟 中等(规则链遍历) 低(直接内核态匹配)
吞吐量 受限于规则数量 接近线速
可观测性 依赖 conntrack 与日志 内置 Hubble / 流日志
策略支持 完全支持 完全支持 + 服务负载均衡
选型建议:生产环境优先启用 eBPF 模式(需内核 5.8+),可降低延迟 30%-50%,并直接获得 Hubble 可观测性。若内核版本受限,iptables 模式仍是稳定选择。
Calico 数据路径对比图 Calico 数据路径对比:iptables vs eBPF iptables 模式 Netfilter PREROUTING → FORWARD 规则链遍历(每条规则匹配) conntrack 连接跟踪 eBPF 模式 XDP / TC 钩子(内核态) eBPF Map 直接匹配 Hubble 流日志(可选) 延迟对比 说明:eBPF 模式通过内核态直接匹配,避免 iptables 链遍历,延迟降低 30%-50%,吞吐量提升 2-3 倍。

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 策略执行顺序

  1. 入站(Ingress)规则按优先级从低到高匹配,第一条命中即执行。
  2. 出站(Egress)规则同理,默认拒绝所有未显式允许的流量。
  3. 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 并校验冲突,降低人工配置风险。