文档中心>容器服务>动态与公告>公告>TKE 集群 ServiceAccount Token 过期解决方案

TKE 集群 ServiceAccount Token 过期解决方案

最近更新时间:2024-05-17 16:16:11

我的收藏
本文主要介绍 TKE 集群在1.22及以上版本的 ServiceAccount Token 过期的背景、影响范围及解决方案。

背景信息

为提升安全性,社区在1.21版本默认启动了 BoundServiceAccountTokenVolume 功能,该功能设定了 Token 的过期时间、自动刷新机制和删除 Pod 后的失效机制。client-go 客户端版本大于等于v11.0.0和v0.15.0时,kubelet 组件支持定时刷新 Token,即定时从挂载盘重新加载 Token 来实现更新。Kubernetes 版本大于等于1.22的集群中 ServiceAccount Token 有效期为一年,kubelet 组件会定期刷新 Token。但 client-go 版本小于v11.0.0 或 v0.15.0时,系统不会自动重新加载 Token,会出现过期风险,一般呈现如下报错信息:
# 组件中日志
error xxx = Unauthorized

# API Server访问日志"
Unable to authenticate the request" err="[invalid bearer token, Token has expired.]"

影响范围

条件是集群 Kubernetes 版本大于等于1.22,且应用代码中使用的 client-go 版本小于v11.0.0 或 v0.15.0。
注意:
集群升级到1.22及以上版本时,如原有应用没有升级改造或升级后未发生重启,将导致一年后 ServiceAccount Token 过期,需重启应用恢复。

解决方案

1. TKE 组件:内置新版本的 client-go,您可前往集群内的组件管理页面查看是否有待升级的组件版本,并在控制台完成升级,具体操作可参见 组件升级
2. 业务应用:短期内可临时重启应用 Pod 快速恢复,长期解决需要将您的业务所使用的 client-go 升级到v11.0.0和v0.15.0及以上,让程序自动重新加载ServiceAccount Token。

相关链接