问题定位通配符匹配到了 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 脏数据
再重新部署