问题形容
下午15点左右,QA反馈灰度环境大量申请超时。kibana查问灰度网关日志,的确存在局部申请响应工夫超过60秒,HTTP状态码504。进一步剖析日志,所有504申请的上游地址都是xxxx:80。
目前该服务部署了两套环境,k8s + kvm,k8s环境上游ingress(即Nginx)端口80,kvm环境上游Golang服务端口19001。且,k8s环境该服务只部署一个pod。是单单k8s环境服务有问题吗?
登录到k8s服务终端,手动curl申请(healthCheck接口,没有简单的业务解决,间接返回数据),发现申请没有任何响应,且始终阻塞。很大概率是该Golang服务有问题了。
排查过程
healthCheck接口逻辑十分的简略,为什么会阻塞呢?服务没有接管到该申请吗?tcpdump抓包看看:
//xxxx为k8s入口ingress地址
curl http://xxxx/v1/healthCheck -H "Host:studentlive.xueersi.com"
//三次握手
10:20:21.940968 IP xxxx.40970 > server.19001: Flags [S], seq 3201212889, win 29200, length 0
10:20:21.941003 IP server.19001 > xxxx.40970: Flags [S.], seq 1905160768, ack 3201212890, win 28960, length 0
10:20:21.941175 IP xxxx.40970 > server.19001: Flags [.], ack 1