calico 切换为 cilium:地址段前后一致

59 阅读5分钟

要在 Kubernetes 环境中切换到 Cilium,同时保持前后 Pod CIDR 完全一致,通常需要从网络范围规划、IPAM 配置以及集成步骤全流程考虑,避免在切换后出现 CIDR 重叠或路由冲突。下面给出一个可执行的高层方案与要点清单,帮助你实现无缝迁移。

核心目标与前提

  • 目标前提:你当前集群已有明确的 Pod CIDR(例如 Kubernetes 控制平面或 kubeadm 初始化时指定的 --pod-network-cidr),并且希望在切换到 Cilium 时,该 Pod CIDR 保持不变。
  • 约束点:Cilium 的 IPAM 配置需要与现有 Pod CIDR 区段对齐,且要避免与节点子网、服务网段以及其他网络组件的冲突。

分阶段执行要点

  1. 评估与准备
  • 确定现有 Pod CIDR、服务 CIDR、节点网络段以及现有网络插件对 CIDR 的依赖关系。确认为避免冲突,当前 Pod CIDR 与其他网段之间没有重叠。必要时记录成文档以作为后续对照依据。
  • ** 备份当前集群网络配置与**重要的日志配置,确保在回滚时有可用的参考点。
  • 收集当前 CNI 相关信息(如果有临时替代方案或历史配置),用作迁移对照。
  1. 规划 IPAM 与 CIDR 对齐
  • 在 Cilium 中,Pod CIDR 由 Cilium 的集群级 IPAM 池(cluster-pool IPv4 CIDR)来管理,确保该池的 CIDR 与你现有的 Pod CIDR 完全一致,且子网划分、掩码位数保持一致。
  • 如果当前集群是通过 kubeadm 启动的,Pod CIDR 可能来自 kube-controller-manager 的 --pod-network-cidr 配置。需要确保 Cilium 的 cluster-pool-ipv4-cidr 设置与此值一致。
  • 同时检查本地路由与节点之间的互通,避免迁移后 Pod IP 地址分配出现重复或不可达。
  1. 安装/切换流程(保持 CIDR 不变)
  • 在目标环境中先安装 Cilium 但暂不更改 Pod CIDR 配置,以确保现有工作流持续可用。常用做法是:

    • 部署 Cilium 时,将 cluster-pool IPv4 CIDR 设置为与现有 Pod CIDR 相同的网段(例如:10.244.0.0/16,若现有 Pod CIDR 是该范围)。
    • 同步 Kubernetes 控制平面对 Pod CIDR 的理解,确保 kube-controller-manager、kube-apiserver 以及节点的路由信息保持一致。
  • 逐节点迁移策略:

    • 采用滚动替换:逐个节点地将网络插件从原有实现切换为 Cilium,确保切换点前后 Pod 能通信并且新分配的 Pod IP 属于目标 CIDR。
    • 对已分配的正在运行的 Pod,通常在 Cilium 完全就绪后,新的 Pod 会按新的 IPAM 池分配;现有 Pod 的 IP 不会被立即改变,直到被重新调度或重新创建。若强制需要“前后 CIDR 一致”的效果,需在非高峰期执行逐节点重建或通过控控策略实现重新调度。
  • 关键参数对齐:

    • Cilium 配置中的 cluster-pool-ipv4-cidr 必须与现有 Pod CIDR 完全一致。
    • 确认 Kubernetes 控制平面的 IPv4 Pod CIDR 设置(ipv4-pod CIDR)与 Cilium 的 IPAM 池没有冲突。
  • 测试与验证阶段:

    • 验证节点间 Pod 通信、跨节点通信、服务访问、以及 DNS 的行为。
    • 使用 Cilium CLI(本地可用)检查状态,确保 IPAM、Networking、Policy 等模块健康。
    • 验证日志中没有与 CIDR 冲突相关的错误信息。
  1. 回滚与容错
  • 保留原网络组件的配置备份与回滚路径,以便趋势分析和快速回滚。
  • 如果迁移后遇到不可接受的问题(如大范围丢包、不可达 Pod),可以快速回滚到原先的网络方案,并在问题定位清晰后再尝试迁移。

常见 pitfalls 与解决思路

  • CIDR 重叠:若现有 Pod CIDR 与集群中其他网段(如服务网段、节点子网、外部网络)发生重叠,需在迁移前调整相关网段,或通过网络策略/路由规则实现分段隔离。解决时优先选择非破坏性调整,尽量不在生产高峰期直接修改路由。
  • IPAM 冲突与地址回收:确保在迁移过程中对已分配的 Pod IP 有可控的生命周期,避免因为 IP 池未清空而导致新的 Pod 分配冲突。
  • 兼容性与插件版本:确保 Cilium 版本与当前 Kubernetes 版本、以及集群中的其他组件兼容,避免因为版本差异引发的网络行为变化。

执行前的最后核对

  • 你确认现有 Pod CIDR 与集群其他网段没有冲突,同时你希望完全保持 Pod CIDR 不变,对吗?
  • 你现在的环境是使用 kubeadm、k3s、或其他发行版?是否需要我给出基于你实际环境的逐步命令模板?

如果你愿意,我可以基于你当前的 Pod CIDR、服务 CIDR、以及你使用的 Kubernetes 发行版,给出一份逐步的命令清单(包括 Cilium 安装前的准备、IPAM 配置、滚动替换步骤以及回滚要点),确保迁移过程中的 CIDR 完整保留不变。请提供以下信息以便定制:

  • 当前 Pod CIDR(如 10.244.0.0/16)和服务 CIDR(如 10.96.0.0/12)。
  • Kubernetes 版本与发行版(如 k8s 1.26 via kubeadm)。
  • 现有网络插件(如果有)以及是否已有跨节点加速/路由方案(如 Calico、Flannel 等)。
  • 允许的停机窗口长度与期望的迁移节奏(滚动逐步替换还是一次性切换)。