问题背景

一个 python 服务接口由于需要处理大量数据,耗时比较长,每次请求都会报错 nginx 504 gateway timeout,应用都是通过 k8s 容器部署的,请求从客户端到达应用还需要经过一层代理分发层应用 web-proxy。

分析排查

简单分析如下:?

  1. 应用接口是用的 gunicron 服务器,显然地与 nginx 报错信息无关,所以问题不在这里
  2. 代理分发层应用 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

文完撒花?!感谢观看?!