一、背景
前文有整理Ingress设置http请求的超时时间,业务方因为是同步请求,需要把默认的超时时间为60秒延长到更长。
经测试,ingress设置的Http超时时间未生效,仍旧是60秒超时。
后经过http的链路跟踪,从域名解析DNS,一直到后端服务。
最后发现,slb也有超时时间,且和它的监听协议有关,http和tcp的超时时间不同。
二、http链路
1、slb监听tcp层
连接超时时间,监听协议是tcp的话,默认是900秒。
2、slb监听http层
连接超时时间,监听协议是http的话,默认是60秒。
3、ingress设置超时时间
略,详见之前的文章:阿里云ingress配置时间超时的参数
三、总结
可以看到,slb设置的监听协议是http的时候,由于slb的默认超时时间是60秒,而它最大只支持180秒。
也就是说,http连接的超时时间最大为180秒,这一点和tcp层的超时时间是不同的。
所以当你的域名是指向slb,而slb监听的是七层http协议,ingress超时时间的设置是无效的。
解决办法
- k8s内部的服务之间访问走k8s的service服务发现,使用k8s内部域名,这样就绕开了slb的超时时间受限问题。
- 服务类型由NodePort改为LoadBalancer(要求lb监听协议是tcp),服务之间的访问走内网lb地址。- - 和第一种方式不同,调用方和被调用方不要求都部署在k8s中。
- 增加slb监听协议为tcp,替代http