问题背景
一个 python 服务接口由于需要处理大量数据,耗时比较长,每次请求都会报错 nginx 504 gateway timeout,应用都是通过 k8s 容器部署的,请求从客户端到达应用还需要经过一层代理分发层应用 web-proxy。
分析排查
简单分析如下:?
- 应用接口是用的 gunicron 服务器,显然地与 nginx 报错信息无关,所以问题不在这里
- 代理分发层应用 web-proxy 部署时需要用到 ingress,大胆怀疑报错来自这里
可以通过查看 nginx-ingress-controller
pod 日志,搜索报错的 api url,来验证猜想:
如果找不到 nginx-ingress-controller
pod,可能是因为其在另外的 namesapce 下,可以使用命令 kubectl get pods --all-namespaces | grep ingress
查询所有命名空间的 ingress pod。
解决方案
验证猜想正确后,就需要动手修改 web-proxy 的ingress 配置了。根据 https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#custom-timeouts 文档,修改后的 Ingress 配置如下:
---apiVersion: extensions/v1beta1kind: Ingressmetadata: name: web-proxy-ingress annotations: kubernetes.io/ingress.class: "nginx" # 按自己实际所需配置 nginx.ingress.kubernetes.io/proxy-connect-timeout: "600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
参考
- custom-timeouts
文完撒花?!感谢观看?!