4. Cilium网络策略基础:CiliumPolicy与CiliumClusterwideNetworkPolicy的区别、策略匹配规则

在多集群镜像拉取场景中,Cilium 网络策略是控制工作负载间通信的核心手段。理解 CiliumNetworkPolicy (CNP) 与 CiliumClusterwideNetworkPolicy (CCNP) 的区别,以及策略的匹配与生效规则,是正确配置跨集群、跨命名空间访问权限的前提。

4.1 两种策略模型的核心差异

Cilium 提供了两种作用域不同的网络策略资源,它们在目标选择、生效范围和管理粒度上存在本质区别。

对比维度 CiliumNetworkPolicy (CNP) CiliumClusterwideNetworkPolicy (CCNP)
作用域 命名空间级别 集群级别(跨所有命名空间)
资源定义 必须指定 metadata.namespace 无需指定命名空间,全局生效
端点选择 只能选择同一命名空间内的 Pod 可选择集群内任意命名空间的 Pod
适用场景 租户隔离、微服务间细粒度控制 全局基础设施策略、多集群网关、监控系统
优先级 与 CCNP 共同生效,无显式优先级 与 CNP 共同生效,无显式优先级
典型用途 限制某命名空间内服务间的访问 允许所有命名空间访问镜像仓库
关键理解: CNP 是“命名空间内”策略,CCNP 是“跨命名空间”策略。在多集群镜像拉取场景中,镜像仓库 Pod 通常位于独立的 image-registry 命名空间,而工作负载 Pod 分布在多个命名空间甚至多个集群中,此时必须使用 CCNP 才能实现跨命名空间的访问控制。

4.2 策略匹配规则与生效逻辑

Cilium 的策略引擎遵循一套明确的匹配规则,理解这些规则是避免策略冲突和配置错误的关键。

4.2.1 默认拒绝与显式允许

  • 默认行为: 当 Cilium 在节点上启用后,如果没有匹配任何网络策略,所有流量默认被 允许(与 Kubernetes 网络策略的默认允许不同)。
  • 策略生效后: 一旦有策略匹配某个端点,该端点将进入“默认拒绝”模式,仅允许策略显式声明的流量通过。
  • 白名单机制: Cilium 策略本质上是白名单,未显式允许的流量将被丢弃。

4.2.2 策略匹配的层级与组合

当多个策略同时作用于同一个端点时,Cilium 会进行逻辑“或”组合:只要任意一个策略允许某流量,该流量即被放行。

  1. 入站规则 (Ingress): 匹配源端点(fromEndpoints、fromCIDR、fromEntities 等)和端口协议。
  2. 出站规则 (Egress): 匹配目标端点(toEndpoints、toCIDR、toFQDNs 等)和端口协议。
  3. 命名空间隔离: CNP 的 endpointSelector 只能匹配同命名空间的 Pod;CCNP 的 endpointSelector 可以匹配任意命名空间的 Pod。
  4. 标签选择器: 策略通过 Kubernetes 标签(Labels)选择 Pod,支持 matchLabels 和 matchExpressions。
实践要点: 在多集群镜像拉取场景中,建议为镜像仓库 Pod 打上固定标签(如 app: harbor),并在 CCNP 中使用 toEndpoints 匹配该标签,确保所有工作负载命名空间都能通过策略访问。

4.3 策略匹配流程可视化

下图展示了当工作负载 Pod 尝试拉取镜像时,Cilium 策略引擎的匹配决策流程:

Cilium 网络策略匹配流程 Cilium 网络策略匹配决策流程 工作负载发起流量 是否有匹配策略? 否 默认允许(放行) 是 匹配入站/出站规则 规则是否允许? 是 放行流量 否 拒绝流量(丢弃)

4.4 策略冲突与优先级说明

虽然 Cilium 策略采用“或”组合逻辑,但在实际配置中仍需注意以下冲突场景:

  • CNP 与 CCNP 共存: 当 CNP 和 CCNP 同时匹配同一 Pod 时,两者规则合并生效。例如,CNP 允许 A→B,CCNP 允许 C→B,则 B 同时接收来自 A 和 C 的流量。
  • 端口冲突: 如果 CNP 允许 80 端口,CCNP 允许 443 端口,则目标 Pod 同时开放 80 和 443 端口。
  • CIDR 冲突: 当策略同时包含 fromCIDR 和 fromEndpoints 时,只要任一匹配即放行。
避坑指南: 不要试图通过创建“拒绝策略”来覆盖其他策略。Cilium 不支持显式拒绝规则,所有拒绝行为均源于“未显式允许”。如果需要限制特定流量,应确保该流量不在任何策略的白名单中。

4.5 多集群场景下的策略选择建议

基于上述差异和匹配规则,在多集群镜像拉取场景中,推荐以下策略设计原则:

场景 推荐策略类型 说明
同一命名空间内服务间调用 CiliumNetworkPolicy (CNP) 作用域明确,管理粒度细
跨命名空间访问镜像仓库 CiliumClusterwideNetworkPolicy (CCNP) 全局生效,无需为每个命名空间重复配置
跨集群访问镜像仓库 CiliumClusterwideNetworkPolicy (CCNP) + ClusterMesh CCNP 定义策略,ClusterMesh 实现跨集群策略同步
全局基础设施策略(如 DNS、监控) CiliumClusterwideNetworkPolicy (CCNP) 统一管理,降低运维复杂度
最佳实践: 在多集群镜像拉取场景中,始终使用 CCNP 定义镜像仓库的访问策略。这样,无论工作负载 Pod 分布在哪个命名空间或集群(通过 ClusterMesh 同步),都能自动获得拉取权限,避免策略遗漏或重复配置。