如何在Kong v1.1.2中设置超时时间

3
问题

我在Kong错误日志中收到一个错误消息,报告上游服务器已超时。但我知道上游进程刚刚花了一分钟左右的时间,并且当它完成后(在Kong记录错误之后),它会记录一个java错误“Broken Pipe”,这意味着Kong不再侦听响应。

当上游进程超过60秒时,就会出现这种行为。在某些情况下,它需要少于60秒,一切正常。

如何延长Kong的超时时间?

细节

Kong版本

1.1.2

Kong的错误信息(稍加编辑):

2019/12/06 09:57:10 [error] 1421#0: *1377 upstream timed out (110: Connection timed out) while reading response header from upstream, client: xyz.xyz.xyz.xyz, server: kong, request: "POST /api/...... HTTP/1.1", upstream: "http://127.0.0.1:8010/api/.....", host: "xyz.xyz.com"

以下是来自上游服务器日志的错误信息(Java/Tomcat通过SpringBoot):
Dec 06 09:57:23 gateway-gw001-99 java[319]: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
Dec 06 09:57:23 gateway-gw001-99 java[319]:         at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:364) ~[tomcat-embed-core-8.5.42.jar!/
Dec 06 09:57:23 gateway-gw001-99 java[319]:         at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:833) ~[tomcat-embed-core-8.5.42.jar!
...

我的 kong.conf(稍作编辑)

trusted_ips = 0.0.0.0/0
admin_listen = 0.0.0.0:8001
proxy_listen = 0.0.0.0:8080 proxy_protocol,  0.0.0.0:8443 ssl proxy_protocol
database = postgres
pg_host = 127.0.0.1
pg_port = 5432
pg_user = kong
pg_password = xyzxyzxyzxyzxyz
pg_database = kong
plugins = bundled,session
real_ip_header = proxy_protocol

更多背景信息

  • Kong和上游服务器都托管在同一个Ubuntu VM上
  • Ubuntu VM作为Linux容器(LXC)托管在另一个Ubuntu VM中
  • 外部VM使用NGinX接收公共流量并将其反向代理到Kong。它使用流来实现这一点。这使得Kong成为我的SSL分界点。

外部NGinX流配置:

stream {

    server {
        listen 80;
        proxy_pass xyz.xyz.xyz.xyz:8080;
        proxy_protocol on;
    }

    server {
        listen 443;
        proxy_pass xyz.xyz.xyz.xyz:8443;
        proxy_protocol on;
    }
}

我尝试过的方法

我尝试在kong.conf中添加以下行。在Kong 1.1.2版本中,您可以通过向NginX配置添加前缀并将其放置在kong.conf中来远程更改NGinX设置(https://docs.konghq.com/1.1.x/configuration/#injecting-individual-nginx-directives)。但是,这些行似乎没有任何作用:

nginx_http_keepalive_timeout=300s
nginx_proxy_proxy_read_timeout=300s
nginx_http_proxy_read_timeout=300s
nginx_proxy_send_timeout=300s
nginx_http_send_timeout=300s

你的Kong选项中是否设置了upstream_read_timeout?https://docs.konghq.com/0.10.x/proxy/#3-proxying--upstream-timeouts - undefined
啊,我怎么会忽略了那个。就是这样,谢谢。 回答我,我会给你答案的。是的,我刚刚在服务更新中添加了读写超时:https://docs.konghq.com/1.1.x/admin-api/#update-service - undefined
2个回答

9
根据文档Kong Version 0.10有三个属性可用于管理proxy连接:
  1. upstream_connect_timeout:定义与上游服务建立连接的超时时间(以毫秒为单位)。
  2. upstream_send_timeout:定义在向上游服务传输请求时两次连续写操作之间的超时时间(以毫秒为单位)。
  3. upstream_read_timeout:定义在从上游服务接收请求时两次连续读操作之间的超时时间(以毫秒为单位)。

在这种情况下,由于Kong在等待来自上游的响应时超时,您需要添加一个upstream_read_timeout属性设置。

Kong Version 1.1 文档中,Service对象现在包含这些超时属性,但名称略有不同:

  1. connect_timeout: 连接上游服务器的超时时间,以毫秒为单位。默认值为60000。
  2. write_timeout: 在将请求传输到上游服务器时,两个连续写操作之间的超时时间,以毫秒为单位。默认值为60000。
  3. read_timeout: 在将请求传输到上游服务器时,两个连续读操作之间的超时时间,以毫秒为单位。默认值为60000。

我更新了响应,并附上了我使用的1.1版本的详细信息。 - undefined
抱歉,我有一个问题:我使用Kong通过配置kong.yml文件来进行设置;在这个文件中应该在哪里/如何设置超时时间?你能给出一些示例吗? 非常感谢。 - undefined

1

如果您使用 Kubernetes,必须在服务中指定特殊注释:

konghq.com/override: {{ ingressName }}

没有明显的问题,但我在这里发现了它 https://github.com/Kong/kubernetes-ingress-controller/issues/905#issuecomment-739927116

服务示例:

apiVersion: v1
kind: Service
metadata:
  name: websocket
  annotations:
    konghq.com/override: timeout-kong-ingress
spec:
  selector:
    app: websocket
  ports:
  - port: 80
    targetPort: 8010

请点击上面的链接获取详细说明。


请解释你的答案并引用参考资料。 - undefined
1
我希望现在更好了。 - undefined
没错,我已经点赞了。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接