全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

ServiceAccount Token安全性提升说明

最近更新时间:2023-11-01 20:50:56

ServiceAccount Token是Kubernetes中用于身份验证和授权的一种机制。在Kubernetes集群中,每个命名空间都可以创建一个或多个ServiceAccount,它们用于标识和认证特定的工作负载(如Pod)或用户。当一个工作负载使用ServiceAccount进行身份验证时,它会获得一个与该ServiceAccount关联的Token,也称为ServiceAccount Token。

过期影响

在Kubernetes 1.21以前版本的集群中,Pod中获取Token的形式是通过挂载ServiceAccount的Secret来获取Token,得到长期有效的身份验证凭据。在Kubernetes 1.22及以上的版本中,ServiceAccount Token有效期为一年,kubelet组件会定期刷新Token。

为了提升安全性,Kubernetes社区在1.21版本BoundServiceAccountTokenVolume功能已经升级为Beta版本,并默认启用。这个变更会改变容器中提供的令牌Token,将其限制为有时效性、自动刷新,并在包含的Pod被删除时使其失效。有效期之前,Kubelet会刷新该Token,保证Pod始终拥有有效的Token,并且当挂载的Pod被删除时这些Token将自动失效。

现默认将Token有效时间延长为1年,1年后Token失效,不具备证书reload能力的client将无法访问APIServer。因此,建议使用低版本Client的用户尽快升级至高版本。

排查方式

serviceaccount_stale_tokens_total 是一个指标,用于监控过期的服务账户令牌的数量。在Kubernetes中,每个服务账户都有一个关联的令牌,用于对集群资源进行身份验证和授权。这个指标可以帮助管理员了解有多少服务账户的令牌已经过期,需要及时更新。

集群内可通过kubectl get --raw "/metrics" | grep stale命令查询

如果该值大于0,则表示当前集群可能存在某些负载正在使用过低的client-go版本情况,此时请您排查自己部署的应用中是否有该情况出现。若有此类情况出现,请尽快将低版本Client升级至高版本。

升级方式

在升级之前,集群操作员需要确保以下条件:

  1. 设置功能门限TokenRequest=true(1.12版本之后默认为true)。
  2. 设置功能门限TokenRequestProjection=true(1.12版本之后默认为true)。
  3. 更新所有工作负载到官方支持的较新版本的Kubernetes客户端库,以重新加载Token:
    • Go: >= v0.15.7
    • Python: >= v12.0.0
    • Java: >= v9.0.0
    • Javascript: >= v0.10.3
    • Ruby: 主分支(master branch)
    • Haskell: v0.3.0.0
文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈