K8s使用Calico CNI时主节点Pod错取docker网段IP如何修复
问题根因
主节点的kubelet未正确调用Calico CNI插件分配Pod IP,容器运行时(Docker)直接使用自身默认的docker0网桥网段(172.17.0.0/16)分配地址,属于CNI调用链路异常。
解决步骤
- 检查主节点CNI相关文件是否正常
登录异常主节点,依次检查两个路径的内容:/etc/cni/net.d/目录下是否存在Calico配置文件10-calico.conflist/opt/cni/bin/目录下是否存在calico、calico-ipam等Calico CNI二进制文件
如果上述文件缺失,说明主节点上的calico-nodePod没有正常写入CNI资源,需要给calico-node的DaemonSet添加主节点污点容忍:容忍node-role.kubernetes.io/control-plane:NoSchedule和node-role.kubernetes.io/master:NoSchedule两个污点,配置完成后重启主节点上的calico-nodePod,等待文件生成。
- 确认kubelet启动参数配置
检查主节点kubelet启动参数是否包含以下配置:
缺少则添加对应参数后重启kubelet服务。--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin - 清理旧CNI配置残留
如果/etc/cni/net.d/目录下存在其他名称排序早于10-calico.conflist的CNI配置文件(如00-docker.conf、旧的flannel配置等),会导致kubelet优先调用其他CNI插件,删除非Calico的冗余配置文件后,重启kubelet和calico-nodePod。 - 验证配置生效
删除主节点上原有IP异常的Pod,等待重建后查看IP分配情况,确认IP是否已经从主节点对应的Calico地址池(你环境中为10.128.0.0/24)分配。
内容的提问来源于stack exchange,提问作者mzv
相关产品推荐
相关产品推荐

