全部產品
Search
文件中心

Container Service for Kubernetes:【產品變更】升級1.22版本後ServiceAccount Token到期解決方案

更新時間:Feb 28, 2024

在1.22及以上的Kubernetes版本中,ServiceAccount Token有效期間為一年,kubelet組件會定期重新整理Token。但client-go版本小於v11.0.0或v0.15.0時,系統不會自動重新載入Token,出現到期風險。本文介紹1.22及以上版本的叢集ServiceAccount Token到期的影響範圍、影響詳情及解決方案。

為了提升安全性,Kubernetes社區在1.21版本預設啟動了BoundServiceAccountTokenVolume功能。該功能設定了ServiceAccount Token的到期時間、自動重新整理機制和刪除Pod後的Token失效機制。client-go用戶端版本大於等於v11.0.0和v0.15.0時,kubelet組件會定時重新整理Token,定時從掛載盤重新載入Token,實現Token更新。為了保持向前相容,到期後,您可以繼續使用該Token一年。但一年後,如果client-go版本小於v11.0.0或者v0.15.0,系統不會自動重新載入並更新Token,導致Token到期風險,出現如下報錯。

# 組件中日誌
Error listing resources error=Unauthorized
# API Server訪問日誌
"Unable to authenticate the request" err="[invalid bearer token, Token has expired.]"

此時,您需要重啟組件Pod,讓client-go讀取新的Token。

影響範圍

叢集Kubernetes版本為1.22及以上,且應用代碼中使用的client-go版本小於v11.0.0或者v0.15.0。

到期影響

  • 1.22版本及以上的叢集,但部署應用的client-go版本小於v11.0.0或者v0.15.0時,存在ServiceAccount Token到期一年後不會自動重新載入的風險。

  • 叢集升級到1.22及以上版本時,如原有應用沒有升級改造,也沒有發生重啟,將導致一年後ServiceAccount Token到期,需要重啟應用恢複。

解決方案

ACK組件應用

ACK組件內建新版本的client-go,如您待升級client-go版本的應用使用ACK組件,您可以升級組件以完成client-go的升級。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理

  3. 組件管理頁面,搜尋目標組件,在組件卡片單擊升級

非ACK組件應用

短期內,可臨時重啟應用Pod,快速恢複。長期解決需要將應用所使用的client-go升級到v11.0.0和v0.15.0及以上,讓程式自動重新載入ServiceAccount Token。