一、背景:
现象:登录服务后,无法显示页面内容,随意点击按钮,请求失败,F12进行调试,网络接口返回504
二、排查思路:
1.1 、查看集群服务状态是否正常
kubectl get po -A | grep -v Completed | grep 0/
服务正常
1.2、 根据状态码,查看网关日志
kubectl logs -f gateway-nginx --tail=100 -n default
日志记录大量服务路由报错,结合服务状态思考,可能是网络方向的问题
1.3、查看集群node节点和pod节点的网络
kubectl get nodes -o jsonpath='{range .items[*]}[name:{.metadata.name} , podCIDR:{.spec.podCIDR} , ipaddr:{.status.addresses[0].address}]{"\n"} {end}'
1.4、根据pod网络定位到node网络
ping pod_id
1.5、定位问题;若服务器禁ping,则使用CoreDNS进行解析
kubectl get pods -n kube-system -o wide | grep coredns| awk '{print $6}' | xargs -l nslookup -type=a kubernetes.default.svc.cluster1.local
三、原因可能性分析
3.1 net.ipv4.ip_forward检查是否正常
sysctl --system | grep 'ip_forward'
参数说明:
主机是否开启路由转发,0不开启,1为开启。k8s集群内主机必须开启
3.2 flannel服务或者flannel网卡状态
flannel是k8s 内部网络解决方案之一,简单来说,功能就是让集群中不同节点主机建立的docker容器都具有全集群唯一的虚拟IP ,而且还能在这些容器 pod的IP地址之间建立覆盖网络overlay,通过overlay网络,将不同的POD数据包传递给集群内其他的目标主机
3.3 安全软件导致集群网络异常