在 Kubernetes ?1.24 及更新版本中,創建 ServiceAccount(服務賬戶)后默認不會自動生成對應的 Secret 和 Token?。這是 Kubernetes 在安全策略上的重要變更,主要解決舊版本中永久有效 Token 的安全風險問題。
以下是新舊版本行為對比及新版操作指南:
?? 一、版本行為對比
| ?Kubernetes 版本? | ?創建 ServiceAccount 后的行為? | ?Token 特性? |
| ?≤ 1.20 版本? |
自動生成關聯的 Secret(含永久有效 Token)
|
永不過期,存在安全風險 |
| ?1.21–1.23 版本? |
自動生成 Secret,但 Token 有過期時間
|
可配置有效期 |
| ?≥ 1.24 版本(當前最新)? |
?不再自動生成 Secret 和 Token?
|
需手動創建,默認有效期 1 小時 |
?? 二、新版手動創建 Token 方法
通過 kubectl create token 命令顯式生成短期有效的 Token:
輸出示例(直接返回 Token 字符串):
eyJhbGciOiJSUzI1NiIsImtpZCI6Ik1rQTF...
?? 關鍵特性:
- ?短期有效性?
- 默認有效期 ?1 小時?,可通過
--duration 參數調整(如 --duration=24h)。
- ?動態更新機制?
- 若 Pod 使用該 ServiceAccount,kubelet 會每小時自動輪換掛載的 Token,無需手動維護。
- ?無持久化 Secret?
- 此命令生成的 Token ?不會創建 Secret 對象?,僅臨時輸出到終端。
?? 三、安全最佳實踐
-
?避免使用高權限默認 SA?
Kubernetes 自動為 Pod 分配的 default ServiceAccount 通常具有過高權限,建議綁定最小權限 Role。
-
?生產環境權限控制?
-
?定期輪換敏感 Token?
對需長期使用的 Token(如 CI/CD 系統),通過 CronJob 定期執行 kubectl create token 更新憑證。
?注意?:若需兼容舊版(自動生成 Secret),需顯式創建 Secret 并關聯 ServiceAccount 的 secrets 字段,但官方已不推薦此方式。
?? 總結
- ? Kubernetes ≥1.24 中,?ServiceAccount 不再自動生成 Token?。
- ? 必須通過
kubectl create token <sa-name> 手動創建?短期有效? Token。
- ? Pod 內掛載的 Token 由 kubelet 每小時自動更新,保障安全性。