Kong-ingress-controller Read-timeout超时时间设置

2023年4月12日18:30:35 发表评论 2,838 ℃

今天开发反馈有个项目导入接口60s就超时了,按照之前其他项目的经验,在腾讯云LB设置proxy_read_timeout和proxy_send_timeout就正常了,因为这两个参数刚好默认是60s,项目其他地方也没有配置超时时间。

但是设置以后,开发测试还是60s超时。

怀疑是ingress方面返回的超时,因为之前大部分项目使用的都是Traefik Ingress和Nginx Ingress,Traefik Ingress默认是不限制超时,Nginx Ingress的默认的超时时间也比较长。

于是让开发提供了接口请求的Headers信息,如下图:

Kong-ingress-controller Read-timeout超时时间设置

发现果然是Kong Ingress返回的超时,于是判断应该是kong ingress默认超时是60s。

于是先在Kong官网找了一通,没找到相关的配置,又百度谷歌一番搜索,解决方法到挺多。

有让在ingress里面添加nginx.ingress.kubernetes.io/proxy-read-timeout注解的.

有让在kong Deployment添加环境变量KONG_NGINX_PROXY_KEEPALIVE_TIMEOUT、KONG_NGINX_PROXY_PROXY_READ_TIMEOUT等。

可能因为版本原因,找到的方法测试都无效。

无赖又回到官网全局搜索了timeout关键词,找到了相关的注解(版本大于2.8):

konghq.com/connect-timeout

设置连接超时,以毫秒为单位。例如,将此注释设置为60000将指示代理最多等待 60 秒以完成与上游服务的初始 TCP 连接。

konghq.com/read-timeout

设置读取超时,以毫秒为单位。例如,将此注释设置为60000将指示代理在发送请求后最多等待 60 秒,然后超时并向客户端返回 504 响应。

konghq.com/write-timeout

设置写入超时,以毫秒为单位。例如,将此注释设置为60000将指示代理在关闭保持活动连接之前最多等待 60 秒而不写入数据。

konghq.com/retries

设置请求的最大重试次数。例如,将此注解设置为,3 如果遇到失败(例如超时),最多会重新发送请求 3 次。

于是马上在自己写的测试服务的ingress添加注释测试:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: atang-test-ingress
  namespace: default
  annotations:
    konghq.com/connect-timeout: '1000'
    konghq.com/write-timeout: '2000'
    konghq.com/read-timeout: '2000'
    konghq.com/retries: '0'
spec:
  ingressClassName: kong
  rules:
  - host: test.amd5.cn
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: atang-test-svc
            port:
              number: 80

奇迹没有出现,依然60s超时。

然后又是一番搜索,在Kong的crd文件里面找到timeout的一段描述:

Kong-ingress-controller Read-timeout超时时间设置

The timeout in milliseconds between two successive read operations for transmitting a request to the upstream server. Deprecated: use Service''s "konghq.com/read-timeout" annotation instead.

翻译过来就是read_timeout这个参数已经启用,需要使用Service的konghq.com/read-timeout注释。

突然反应过来注释应该添加在service里面,不是ingress里面,然后马上添加测试:

apiVersion: v1
kind: Service
metadata:
  name: atang-test-svc
  namespace: default
  annotations:
    konghq.com/connect-timeout: '1000'
    konghq.com/write-timeout: '2000'
    konghq.com/read-timeout: '2000'
    konghq.com/retries: '0'
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: atang-test
  sessionAffinity: None

奇迹终于出现了,2s就返回了超时。

Kong-ingress-controller Read-timeout超时时间设置

【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: