kubernetes的ingress超时处理

今天,前端同事反应,有个稍大的文件上传的时候失败,出现504 timeout的错误,在测试环境(未使用k8s)是没有这个问题的,因此马上反应过来是k8s的ingress有超时限制。

进入ingress容器,查看nginx配置,如下:

        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;

超时时间为60秒,搜索后得知,这是ingress默认配置,需修改ingress配置。于是找到配置文件ingress.yaml,根据搜索到的解决方法增加配置内容如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: pms-ingress
  namespace: pms
  annotations:
    nginx.org/client-max-body-size: "200m"
    nginx.org/redirect-to-https: "true"
    # 这下面3行是增加的配置
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
spec:
  tls:
  - hosts:
.....

kubectl apply -f ingress.yaml后, 查看ingress容器中nginx配置,依然是60s,没有改掉!

搜了好多超时设置的文章,也去查看官方文档检查(k8s官方 ingress-nginx Custom timeouts), 配置没写错啊,为啥不好使呢?

继续搜索,发现,原来k8s的nginx负载均衡器有两种来源,一种是k8s社区基于nginx开发的Ingress-nginx ,属于k8s“官方”负载均衡控制器。还有一种,是nginx社区为k8s开发的Nginx-ingress,两种配置方式不一样,而我们环境用的是Nginx-ingress,尼玛~

找到Nginx-ingress的配置(Nginx-ingress文档),配置如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: pms-ingress
  namespace: pms
  annotations:
    nginx.org/client-max-body-size: "200m"
    nginx.org/redirect-to-https: "true"
    nginx.org/proxy-connect-timeout: "300s"
    nginx.org/proxy-send-timeout: "300s"
    nginx.org/proxy-read-timeout: "300s"
spec:
  tls:
  - hosts:
.....

修改配置成功!上传文件测试,1分40秒未超时!

参考文章: Ingress-nginx 与 Nginx-ingress

点击数:75

发表评论

您的电子邮箱地址不会被公开。

*

code