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 会进行逻辑“或”组合:只要任意一个策略允许某流量,该流量即被放行。
- 入站规则 (Ingress): 匹配源端点(
fromEndpoints、fromCIDR、fromEntities等)和端口协议。 - 出站规则 (Egress): 匹配目标端点(
toEndpoints、toCIDR、toFQDNs等)和端口协议。 - 命名空间隔离: CNP 的
endpointSelector只能匹配同命名空间的 Pod;CCNP 的endpointSelector可以匹配任意命名空间的 Pod。 - 标签选择器: 策略通过 Kubernetes 标签(Labels)选择 Pod,支持
matchLabels和matchExpressions。
实践要点: 在多集群镜像拉取场景中,建议为镜像仓库 Pod 打上固定标签(如
app: harbor),并在 CCNP 中使用 toEndpoints 匹配该标签,确保所有工作负载命名空间都能通过策略访问。
4.3 策略匹配流程可视化
下图展示了当工作负载 Pod 尝试拉取镜像时,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 同步),都能自动获得拉取权限,避免策略遗漏或重复配置。