导语:所有pod报错,查看flannel的状态是一场crashloopbackoff状态。是内部服务器没有设置ip,也因此没有设置网关。

排查过程

先删除重建flannel。中途namespace 夯住了 使用下面命令强制删除

kubectl get namespace kube-flannel -o json \
            | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \
            | kubectl replace --raw /api/v1/namespaces/kube-flannel/finalize -f -

flannel报错

root@ubuntu:/srv# kubectl logs -f kube-flannel-ds-ffgrn -n kube-flannel
Error from server: Get "https://172.16.29.105:10250/containerLogs/kube-flannel/kube-flannel-ds-ffgrn/kube-flannel?follow=true": dial tcp 172.16.29.105:10250: connect: network is unreachable

这个ip应该是发货前测试的ip,现在ip已经不是这个了。

通过journalctl -f -exu kubelet 看到报错/run/flannel/subnet.env不存在

手动创建并输入以下内容

FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

重启kubelet 删除flannel pod之后依旧报错

Mar 01 15:15:15 ubuntu kubelet[325075]: E0301 15:15:15.440357 325075 kubelet_node_status.go:586] “Failed to set some node status fields” err=“can’t get ip address of node ubuntu. error: no default routes found in “/proc/net/route” or “/proc/net/ipv6_route”” node=“ubuntu”

对比/proc/net/route以及执行route -n 发现路由缺一条到网关的。

CNI 网卡在没有网关的情况下无法正常工作。CNI(Container Network Interface)是容器网络接口,它定义了容器运行时与容器网络插件之间的交互方式。在 Kubernetes 等容器编排平台中,CNI 插件负责为容器分配 IP 地址、配置网络路由等任务。

网关是连接两个网络的设备或软件,它负责在不同网络之间进行数据包的转发和路由。没有网关,容器将无法与其他网络或主机进行通信,因此 CNI 网卡也无法正常工作。

因此,为了确保 CNI 网卡能够正常工作,必须配置适当的网关,并确保网络连接正常。同时,还需要注意配置正确的网络参数,如 IP 地址、子网掩码、路由表等,以确保容器能够正确地连接到网络并进行通信。

添加一个任意路由后重启网络。k8s服务恢复

image-20240301153020679

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐