【Azure Redis】部署在AKS中的應用連線Redis時候出現Unable to connect to Redis server

路边两盏灯發表於2024-03-13

問題描述

在AKS Pod中連線 Azure Redis服務,大機率出現連線不上的問題。大多數的錯誤為 RedisConnectionException: Unable to connect to Redis server: xxxxxxxxx.redis.cache.chinacloudapi.cn/52.xxx.xxx.xxx:6380

, 但是有時候的錯誤資訊為: RedisConnectionException: Unable to init enough connections amount! only 6 of 24 were initialized. Redis server: xxxxxxxxx.redis.cache.chinacloudapi.cn/52.xxx.xxx.xxx:6380 。

【Azure Redis】部署在AKS中的應用連線Redis時候出現Unable to connect to Redis server

所以,根據後面的資訊判斷,Pod並不是完全不能連線Reids伺服器,而是隻能成功建立部分連線,這是什麼問題呢?

問題解答

當出現連線Redis伺服器Timeout時,第一反應就是要檢視客戶端和服務端的網路是否連通,是否穩定。

所以進入到Pod所在的節點中,執行 paping 測試,驗證了問題在於 連線Redis伺服器6380的埠不穩定,經常出現Timeout。

paping -p 6380 xxxxxxxx.redis.cache.chinacloudapi.cn -c 10

結果如下:

【Azure Redis】部署在AKS中的應用連線Redis時候出現Unable to connect to Redis server

證明了是因為AKS所在的網路與Azure Redis之間,存在連通性穩定問題。

進一步調查AKS的網路配置,使用的是預設標準版本的Azure Load Balancer。因為Load Balancer存在出口IP埠限制,預設一個節點的出口埠為1024個,如果節點中所建立的連線過多,佔用完SNAT埠數,就會導致新的連線連線不成功 Connection timed out.

【Azure Redis】部署在AKS中的應用連線Redis時候出現Unable to connect to Redis server

(Source: https://docs.azure.cn/zh-cn/aks/load-balancer-standard#configure-the-allocated-outbound-ports

透過調大預設的SNAT埠限制數後 (1024 ---> 8192), 連線Redis的問題得到解決。

## 長Ping結果也變得穩定。

【Azure Redis】部署在AKS中的應用連線Redis時候出現Unable to connect to Redis server

參考資料

在 Azure Kubernetes 服務 (AKS) 中使用公共負載均衡器 : https://docs.azure.cn/zh-cn/aks/load-balancer-standard#configure-the-allocated-outbound-ports

使用 PSPING 測試連線 : https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-troubleshoot-connectivity#test-connectivity-using-psping

相關文章