4. 版本漂移场景分析:Cilium v1.12 到 v1.14 的 API 变更、默认行为变化及对策略的影响

在日志平台从 Cilium v1.12 升级至 v1.14 的过程中,API 资源的废弃与重构、默认行为的调整,会直接导致存量网络策略失效或行为异常。本章聚焦三个核心漂移维度:CRD API 版本变更、默认端点与策略行为变化、策略匹配语义的演进,并给出对应的适配清单。

4.1 CRD API 版本变更:从 v1.12 到 v1.14 的废弃与迁移

Cilium v1.14 移除了多个 v1beta1 版本的 CRD,强制使用 v2 稳定版。以下表格列出直接影响策略定义的 API 变更:

资源类型 v1.12 可用版本 v1.14 可用版本 变更说明
CiliumNetworkPolicy v2, v1beta1 v2 v1beta1 被移除,必须使用 v2
CiliumClusterwideNetworkPolicy v2, v1beta1 v2 v1beta1 被移除,必须使用 v2
CiliumEndpoint v2, v1beta1 v2 v1beta1 被移除,v2 新增字段
CiliumNode v2, v1beta1 v2 v1beta1 被移除
CiliumIdentity v2 v2 无版本变更,但标签选择语义调整
⚠️ 适配警告: 如果日志平台中仍使用 apiVersion: cilium.io/v1beta1 的 CiliumNetworkPolicy,在 v1.14 集群中将无法被识别,导致策略完全失效。必须在升级前将所有策略的 apiVersion 迁移至 cilium.io/v2。

4.2 默认行为变化:端点策略模式与 DNS 代理

v1.14 对两个关键默认值做了调整,直接影响日志采集 Agent 与 Elasticsearch/Kafka 后端之间的通信策略:

  • 端点策略模式(Endpoint Policy Mode): v1.12 默认允许所有端点间通信(always-allow),除非显式创建 NetworkPolicy。v1.14 默认启用 default-deny 模式,未匹配策略的端点将被拒绝通信。
  • DNS 代理(DNS Proxy): v1.12 中 DNS 代理默认关闭,策略中 toFQDNs 规则依赖 kube-dns 直连。v1.14 默认开启 DNS 代理,所有 DNS 查询必须经过 Cilium Agent 代理,否则 toFQDNs 规则无法解析。
📌 日志平台影响: 升级后,Filebeat/Fluentd 与 Elasticsearch 之间的通信可能被默认拒绝,需提前创建允许策略。同时,如果使用 toFQDNs 匹配日志后端域名,必须确保 DNS 代理已启用且策略中正确配置 matchPattern 或 matchName。

4.3 策略匹配语义演进:标签选择器与命名空间隔离

v1.14 对 EndpointSelector 和 NamespaceSelector 的匹配逻辑做了精细化调整,避免跨命名空间策略泄漏:

匹配维度 v1.12 行为 v1.14 行为 适配建议
空 EndpointSelector 匹配所有端点 匹配所有端点(行为一致) 无变更
仅 NamespaceSelector 匹配该命名空间下所有端点 匹配该命名空间下所有端点(行为一致) 无变更
EndpointSelector + NamespaceSelector 交集匹配,但跨命名空间标签可能泄漏 严格交集,仅匹配同时满足两个选择器的端点 检查策略中是否依赖跨命名空间标签泄漏
toFQDNs 的 matchPattern 支持通配符前缀匹配 支持通配符前缀匹配,但要求 DNS 代理开启 确保 DNS 代理启用,否则规则不生效
💡 最佳实践: 在 v1.14 中,始终显式指定 EndpointSelector 和 NamespaceSelector,避免依赖隐式匹配。对于日志平台,建议使用 app: filebeat 和 app: elasticsearch 标签,并配合命名空间隔离。

4.4 版本漂移影响全景图

下图展示从 v1.12 到 v1.14 的 API 变更、默认行为变化及对日志平台策略的影响路径:

Cilium v1.12 到 v1.14 版本漂移影响全景 Cilium v1.12 → v1.14 版本漂移影响全景 v1.12 基线 v1.14 目标 版本漂移变化域 API 版本废弃 v1beta1 → v2 强制迁移 CiliumNetworkPolicy / CiliumEndpoint 默认行为变更 端点策略模式:always-allow → default-deny DNS 代理:关闭 → 默认开启 匹配语义演进 标签选择器严格交集 toFQDNs 依赖 DNS 代理 日志平台策略影响 • 存量策略 apiVersion 需升级 • 默认拒绝导致 Agent 通信中断 • DNS 代理未配置导致 FQDN 规则失效 🔍 核心结论: 版本漂移导致 API 版本、默认策略模式、DNS 代理三个维度同时变化,日志平台策略必须同步适配,否则升级后 Agent 与后端通信将被拒绝。

4.5 适配清单与验证步骤

基于上述分析,日志平台在升级前应完成以下适配项:

  1. CRD 版本迁移: 使用 kubectl get crd | grep cilium 确认当前 CRD 版本,将所有 v1beta1 策略转换为 v2。
  2. 默认策略模式适配: 在升级前创建全局默认允许策略,避免升级后通信中断。
  3. DNS 代理配置: 确保 toFQDNs 规则中 matchPattern 或 matchName 正确,并验证 DNS 代理日志。
  4. 标签选择器审计: 检查所有策略中的 EndpointSelector 和 NamespaceSelector,确保不依赖跨命名空间标签泄漏。
📋 验证命令示例:
# 检查 CRD 版本
kubectl get crd ciliumnetworkpolicies.cilium.io -o jsonpath='{.spec.versions[*].name}'

# 验证策略是否被识别
kubectl get cnp -A

# 检查 DNS 代理状态
cilium status | grep -i dns

# 查看端点策略模式
cilium config get policy-enforcement