簡體   English   中英

Kubernetes上Node.js + gRPC應用程序的隨機超時

[英]Random timeouts at Node.js + gRPC application on Kubernetes

我們有一個奇怪的網絡問題。

我們有一個用Node.js編寫的Hyperledger Fabric客戶端應用程序,該應用程序在Kubernetes中運行,可與外部Hyperledger Fabric網絡通信。

我們在此通信中隨機收到超時錯誤。 當Pod重新啟動時,所有狀態都會恢復一會兒,然后會出現超時錯誤,有時會自行修復,然后再次變差。

這是Azure EKS,我們使用Rancher在AWS中設置了一個快速的Kubernetes集群,並將應用程序部署在那里,並且同樣發生了超時錯誤。

我們整夜在同一容器中運行腳本,每分鍾使用cURL和小的Node.js腳本命中外部Hyperledger端點,我們甚至都沒有遇到任何錯誤。

我們在另一個VM中將應用程序作為普通Docker容器運行,那里沒有問題。

我們檢查了容器內部的網絡流量,當發生此問題時,我們可以看到使用netstat建立了連接,但是tcpdump顯示沒有流量,甚至沒有嘗試發送任何程序包。

檢查Hyperledger Fabric SDK代碼,它在后台使用gRPC協議緩沖區。

那么也許有什么線索嗎?

原來不是Kubernetes,而是掉線了。

gRPC使連接保持打開狀態,一段時間不活動之后,中間組件將斷開連接。 在Azure AKS中,這是負載平衡器,因為每個出站連接都通過負載平衡器。 有4分鍾的不可配置的空閑超時時間,之后負載均衡器將斷開連接。

該修補程序正在配置gRPC以發送保持活動的消息。

容器中的腳本可以正常工作,因為它們每次運行都會打開一個新連接。

作為普通Docker容器運行的應用程序沒有此問題,因為我們每分鍾都要訪問一次端點,因此永遠不會達到空閑超時閾值。 當我們每10分鍾點擊一次端點時,超時問題也從那里開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM