跳过正文
Cilium 1.19:升级前该核对什么
  1. 文章/

Cilium 1.19:升级前该核对什么

·3280 字·7 分钟
NeatGuyCoding
作者
NeatGuyCoding

Cilium 1.19:升级前该核对什么
#

若你正规划从 1.18 升到 1.19.0(2026-02-04),这版 minor 的「含金量」主要在运维契约变化:Multi-Pool IPAM 从 Beta 转正、数据面 IPsec 与 BPF 主机路由可组合、Ztunnel 进入 Beta、网络策略与 Cluster Mesh 默认更严、BGP v1 Peering Policy 被移除。对平台工程师而言,值得保留的不是幻灯片逐条朗读,而是一张「升级前检查单」:策略是否跨集群、DNS 是否用 **.、BGP CRD 是否仍 v1、IPAM 是否要多池、可观测是否要开 Option 136。本期 eCHO 为 GitHub Release 走读,无现场集群 demo;下文按主题归纳可落地项,命令与 Helm 字段以 v1.19 文档 为准,口述性能数字单独标注。

升级与发布全貌
#

Release 载明约 2934 commits、1010+ 贡献者。官方明确:使用 Network Policies、Cluster Mesh、LoadBalancer IPAM 或 BGP 时,升级前应阅读 1.19 Upgrade Notes,否则可能在策略语义或 BGP CRD 上踩坑。

图:GitHub Release —「We are excited to announce the Cilium 1.19.0 release!」及「You may need to take action during upgrade… Network Policies, Cluster Mesh, LoadBalancer IPAM or BGP」提示。

Select Clusters Explicitly#40609):策略 selector 未写 cluster 时,默认只允许本集群流量。以前依赖「隐式全集群」的 Cluster Mesh 规则需要显式补 cluster 名,否则跨集群服务会突然不通 — 这是 1.19 最值得优先 diff 的 breaking 行为之一。

Actively Deny Connections#41406):egress 被 Network Policy 拒绝时,可回 ICMPv4 Destination unreachable,让客户端尽快失败,而不是黑洞式丢包。能力为 experimental,且仅 IPv4 egress

# Helm(v1.19,默认 none)
policyDenyResponse: icmp

Agent 等价:--policy-deny-response=icmp。见 Policy intro — Deny Response

图:Release 条目 —「Actively Deny Connections… ICMPv4 Destination unreachable」「Select Clusters Explicitly… default to only allowing the local cluster」。

DNS 多级通配matchPattern 支持 **.example.com 前缀,可匹配 foo.bar.example.com 等多级子域,但 不匹配 父域 example.com 本身;若策略同时要管 apex,需另写 matchName策略语言 — DNS)。升级说明指出:既有 **. 规则语义可能变化,上线前应用 staging 集群回放 DNS 策略。

弃用与引擎重构:Kafka 协议匹配(beta)、ToRequires / FromRequires 字段弃用;策略引擎内部重构为后续 minor 铺路(#39906 等)— 用户面主要是弃用字段迁移。

数据面:IPsec、Multi-Pool IPAM、Gateway
#

BPF Host Routing + IPsec#41997):在 kube-proxy replacement、BPF masquerade 与 IPsec 同时开启时,转发可走 eBPF 主机路由,减少传统路由查找开销。Upgrade Notes 写明会自动启用 eBPF Host Routing;节点内核需包含 CVE-2025-37959 修复。演讲者提到短连接 CRR 约 30% 提升 — 未出现在 Release 或文档,勿写入容量规划。

Multi-Pool IPAM(Stable,#40460):Helm 设 ipam.mode=multi-poolCiliumPodIPPoolcilium.io/v2alpha1)新增 spec.podSelector,用 Pod 标签选池而无需改 Pod spec。文档要求:每个 IP family 必须且仅能匹配一个 pool,否则分配失败。Release 写明可与 IPsec + direct routing 联用,适合按池划分地址段并加密跨子网流量(multi-pool 概念)。池级注解仍包括 ipam.cilium.io/ip-pool 等。

Gateway API:Cilium 在 GAMMA 场景下支持 GRPCRoute#41936),与既有 HTTPRoute 能力对齐;gRPC 负载均衡在 Cilium 数据面已久,1.19 主要是 API 面对齐。Release 写依赖 Gateway API v1.4gateway-api 文档 页脚仍写 v1.3.0 — 以 Release 与 go.mod 为准。

Encryption strict mode:IPsec / WireGuard 均可开 strict,未加密节点间流量直接丢弃(#39239 等)— Release 有述,本期口述较简。若你已在用 WireGuard 或 IPsec 透明加密,升级时建议对照 Upgrade Notes 检查是否与 kube-proxy replacement、masquerade 模式冲突。

Ztunnel Beta(namespace 级纳管)
#

Ztunnel 标为 Beta#42766 等):Cilium 作控制面负责 workload 发现、证书签发;Pod netns 内通过 iptables 将 TCP 重定向到本地 ztunnel,实现透明加密。不支持 Pod 级开关,仅 namespace 标签;与 Cluster Mesh 不兼容ztunnel 文档)。

encryption:
  enabled: true
  type: ztunnel
# 先按文档生成 secrets,再纳管 namespace
kubectl label namespace <ns> io.cilium/mtls-enabled=true

Helm 等价:--set encryption.enabled=true --set encryption.type=ztunnel。Mutual Authentication(out-of-band)在 1.19 默认关闭#42665);若目标是 workload mTLS,文档倾向先试 Ztunnel。Beta 阶段应预留回滚路径,并在非生产集群验证与现有 CiliumNetworkPolicy 的交互。

LoadBalancer 与 port-forward:前者由云或 Cilium BGP/LB 数据面暴露 VIP;后者经 kube-apiserver 代理,适合调试。二者可并存访问同一 Service,但路径与可观测性完全不同 — 见 K8s port-forwardLoadBalancer Service(Cilium 上 LB 路径为演讲者归纳)。

Host Firewall:VRRP / IGMP
#

keepalived VIP、IGMP 组播等流量没有 TCP/UDP 端口,旧版 host firewall 常因未知 L4 被丢弃。1.19 在 host 规则中支持 VRRP / IGMP#39872#41949),需集群开启 --enable-extended-ip-protocols

# v1.19.0 examples/policies/host/allow-extended-protocols.yaml
toPorts:
  - protocol: VRRP   # 或 IGMP

图:Release —「Match New Protocols: … VRRP and IGMP protocols in host firewall rules」及相邻 Network Policy 条目。

口述中的 port: "0" 未出现在官方示例 — 部署前用 cilium policy validate 或集群实测确认 CRD 接受形态。

可观测性:IP 追踪与 Hubble 过滤
#

IPv4 Option 136(Stream ID)在路径上标记流,Hubble 用同一 ID 串联(#41306):

helm install cilium oci://quay.io/cilium/charts/cilium --version 1.19.0 \
  --namespace kube-system \
  --set bpf.monitorTraceIPOption=136

hubble observe --ip-trace-id <id>
hubble observe --encrypted      # #43096
hubble observe --unencrypted

安装字段为 bpf.monitorTraceIPOption(非口述的 bpfMonitor.trace)。CLI 上 IP 追踪用 --ip-trace-id--trace-id 是另一类过滤器(Hubble CLI)。「经 NAT 仍可追踪」为演讲者口述,官方教程未写死该场景。

FlowLog 聚合#42011):在 dynamic export 上配置 fieldAggregateaggregationIntervalfieldMask 等,向 SIEM 发送聚合事件,Hubble 仍保留完整流 — 功能在 CHANGELOG/Helm 注释中成立,尚无与 Release highlights 同级的独立教程。典型动机是降低 Elasticsearch/Splunk 写入量,同时用 includeFilters 只导出关心的 verdict 或 namespace;aggregationInterval 需与 fieldAggregate 同时非空且大于 0 才生效(见 Helm hubble.export 与仓库内 valid-flowlogs-config.yaml)。

PLPMTUD、Helm OCI、BGP 与其它网络项
#

图:Release Networking —「Packetization-Layer Path MTU Discovery」「IPv6 Underlay」「Multi-Pool IPAM is ready for wider use」及 Services/BGP 摘要。

PLPMTUD#42012):用 TCP 在 endpoint netns 探测路径 MTU;Helm 键 pmtuDiscovery.packetizationLayerPMTUDMode 等。统一最低内核版本表 Release 未给出,需查 PR 或在目标节点实测。

Helm 分发:除 helm repo add cilium https://helm.cilium.io 外,可用 OCI:

helm install cilium oci://quay.io/cilium/charts/cilium --version 1.19.0 \
  --namespace kube-system

Helm 安装 — 两种源并存,文档未宣布淘汰经典仓库。

BGP breaking changeCiliumBGPPeeringPolicy(v1)已移除,需迁移到 cilium.io/v2CiliumBGPClusterConfigCiliumBGPPeerConfigCiliumBGPAdvertisement 等(Upgrade Notes)。1.19 还增加 Interface 类型通告、可覆盖 BGP session 源地址、无 endpoint 时撤回路由等运维向能力(Release BGP 小节)— 但若仍引用 v1 Peering Policy YAML,升级会直接失败,应优先改 GitOps 清单。同页还可关注:BIG TCP in tunnels#43416)、IPv6 underlay#40324)、L2 Announcements IPv6 ND、IPv6 Service loopback — 均以 Release 为准。

未闭合边界
#

断言状态
BPF+IPsec「~30% TCP CRR」演讲者口述,无官方 benchmark
hubble observe --trace-id 做 IP 追踪应为 --ip-trace-id
Host policy port: "0"部分核验,以示例 YAML + 实测为准
PLPMTUD / BIG TCP 内核门槛需按节点查 PR/能力

Release 将 v1.19 与 Cilium 十周年并列;贡献入口 slack.cilium.ioContributing。KubeCon 阿姆斯特丹议程见 Cilium at KubeCon EU 2026。书籍发行日、下期 1.20 嘉宾等为口述,不作技术契约。

延伸阅读v1.19.0 Release · 文档首页 · Upgrade Notes · IP 包追踪教程

相关文章