cilium 非正常部署导致集群网络全挂

7 阅读2分钟

问题定位通配符匹配到了 bond0.xx 的 vlan 地址

** 本质上来说,只要不使用通配,肯定不会出问题。对吧?,对,完全正确。**

代码验证

// DeviceFilter.Match() 的匹配逻辑
if strings.HasSuffix(entry, "+") {
    // 通配符:前缀匹配
    prefix := strings.TrimRight(entry, "+")  // "bond+" → "bond"
    if strings.HasPrefix(dev, prefix) {      // HasPrefix("bond0.4001", "bond") → true ❌
        return true, reverse
    }
} else if dev == entry {
    // 精确匹配:完全相等
    return true, reverse                      // "bond0.4001" == "bond0" → false ✓
}

对比

配置bond0.4001 匹配结果
devices: "bond+"✅ 匹配 (HasPrefix 生效) → 出问题
devices: "bond0 bond1"❌ 不匹配 (== 精确比较) → 安全

结论

# 通配符 - 危险
devices: "bond+ eth+"           # bond0.xxx 会被匹配 ❌

# 精确指定 - 安全
devices: "bond0 bond1 eth0"     # bond0.xxx 不会被匹配 ✓

只要不用 + 通配符,VLAN 子接口就不会被误选中。

cilium 非正常部署导致集群网络(主机上的所有网卡的网络)全挂(arp 都不通):

  • 本来我应该使用本地的 helm 包部署
  • 但是我的 kubespray 还没来得及改,所以直接使用了社区的 helm 仓库
  • 但是社区应该没有我的自定义版本号
  • 但是 helm 确实运行了,也就是说拉取到了一个社区 help 包
  • 所以,我的环境部署了一个不正常的 cilium:
  • 即使 cilium valuses 是我自定义的, 镜像也是我自定义的
  • 但是,集群就是全挂了

所以只能先关闭 containerd 和 kubelet,然后开始尝试清理下,再重新本地部署



root@dal-las1:~# systemctl status kubelet
○ kubelet.service - Kubernetes Kubelet Server
     Loaded: loaded (/etc/systemd/system/kubelet.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
       Docs: https://github.com/GoogleCloudPlatform/kubernetes

root@dal-las1:~# systemctl status containerd
○ containerd.service - containerd container runtime
     Loaded: loaded (/etc/systemd/system/containerd.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
       Docs: https://containerd.io
       
# 每个节点先清理 cilium,确保其不可启动,再基于 helm 完整清理


systemctl start containerd

crictl images | awk '/cilium/ {print $3}' | sort -u | xargs -r crictl rmi


ansible all -m shell -a "systemctl enable containerd; systemctl enable kubelet"  -f=1

ansible all -m shell -a "systemctl restart containerd; systemctl restart kubelet"  -f=1

helm uninstall -n kube-system cilium



rm -rf /var/run/ovn
rm -rf /etc/origin/openvswitch/
rm -rf /etc/origin/ovn/
rm -rf /etc/cni/net.d/00-kube-ovn.conflist
rm -rf /etc/cni/net.d/01-kube-ovn.conflist
rm -rf /var/log/openvswitch
rm -rf /var/log/ovn
rm -fr /var/log/kube-ovn

cilium-dbg post-uninstall-cleanup --all-state

参考: docs.cilium.io/en/latest/c…

重启物理机,清理 cilium 脏数据

再重新部署