问题描述
应用中某些超长请求(响应时间通常超过30s)访问时出现 504 Gateway Time-out
错误。
504-gateway-timeout-01.png
问题分析
OpenShift 的 Route 是通过高速反向代理 HAProxy 作为路由器来实现的,该反向代理默认的服务器超时时间为 30s
。
我们可以通过访问 OpenShift Origin 在 Github 上的项目源码来得到其他的配置的默认值,这些值都可以通过设置 HAProxy 路由器的 Deployment Config 中的环境变量来覆盖默认值。
openshift/origin-haproxy-router 镜像源码:
解决方案
覆盖环境变量 ROUTER_DEFAULT_SERVER_TIMEOUT
的默认值为 300s
。具体操作步骤如下:
1. 为 admin 用户启用 cluster-admin 角色
oadm policy add-cluster-role-to-user cluster-admin admin
启用该角色之后,开发者以 admin 登陆 Web Console 就可以看见 OpenShift 所有的内部项目了。
2. 找到 router 的部署定义
点击 default
项进入,之后在左侧的功能菜单中选择 Applications
/ Deployments
504-gateway-timeout-02.png
点击 router 进入部署配置的定义界面并切换至 Environment
选项卡,增加环境变量 ROUTER_DEFAULT_SERVER_TIMEOUT
并设置值为 300s
,最后点击 Save 按钮保存设置。OpenShift 会自动触发一次更新部署。
504-gateway-timeout-03.png
作者:莫失已忘
链接:https://www.jianshu.com/p/61567aa93515