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 变更、默认行为变化及对日志平台策略的影响路径:
4.5 适配清单与验证步骤
基于上述分析,日志平台在升级前应完成以下适配项:
- CRD 版本迁移: 使用
kubectl get crd | grep cilium确认当前 CRD 版本,将所有 v1beta1 策略转换为 v2。 - 默认策略模式适配: 在升级前创建全局默认允许策略,避免升级后通信中断。
- DNS 代理配置: 确保
toFQDNs规则中matchPattern或matchName正确,并验证 DNS 代理日志。 - 标签选择器审计: 检查所有策略中的
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