Kong-ingress-controller Read-timeout超時時間設置

2023年4月12日18:30:35 發表評論 1,163 ℃

今天開發反饋有個項目導入接口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 如果遇到失?。ɡ绯瑫r),最多會重新發送請求 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: