Kubernetes 服务账户
Kubernetes 服务账户为在 pod 中运行的进程提供身份。有关更多信息,请参阅 Kubernetes 文档中的管理服务账户
服务账户令牌
Kubernetes 版本 1.21
及更高版本中默认启用 BoundServiceAccountTokenVolume
Go 版本
0.15.7
和更高版本Python 版本
12.0.0
和更高版本Java 版本
9.0.0
和更高版本JavaScript 版本
0.10.3
和更高版本Ruby
master
分支Haskell 版本
0.3.0.0
C# 版本
7.0.5
和更高版本
如果您的工作负载使用的是早期客户端,则必须予以更新。为了使客户端顺利迁移到更新的有时限的服务账户令牌,Kubernetes 版本 1.21
及更高版本在默认一小时内向服务账户令牌添加延长的到期期限。对于 Amazon EKS 集群,延长到期期限为 90 天。Amazon EKS 集群的 Kubernetes API 服务器会拒绝令牌超过 90 天的请求。我们建议您检查应用程序及其依赖项,以确保 Kubernetes 客户端开发工具包版本等于或高于之前列出的版本。
当 API 服务器收到令牌超过一小时的请求时,它会使用 annotations.authentication.k8s.io/stale-token
注释 API 审核日志事件。注释的值与以下示例类似:
subject: system:serviceaccount:common:fluent-bit, seconds after warning threshold: 4185802.
如果您的集群启用了控制面板日志记录,则注释在审计日志内。您可以使用以下 CloudWatch Logs Insights 查询,以识别 Amazon EKS 集群中使用过时令牌的所有 pods:
fields @timestamp | filter @logStream like /kube-apiserver-audit/ | filter @message like /seconds after warning threshold/ | parse @message "subject: *, seconds after warning threshold:*\"" as subject, elapsedtime
subject
指的是 pod 使用的服务账户。elapsedtime
表示读取最新令牌后的时间(以秒为单位)。对 API 服务器的请求在 elapsedtime
超过 90 天(7,776,000 秒)时被拒绝。您应该主动更新应用程序的 Kubernetes 客户端开发工具包,以使用前面列出的其中一个自动刷新令牌的版本。如果使用的服务账户令牌接近 90 天,并且您没有足够的时间在令牌到期之前更新客户端开发工具包版本,您可以终止现有 pods 并创建新的。这将导致重新获取服务账户令牌,从而为您提供额外 90 天的时间来更新客户端版本开发工具包。
如果 pod 是部署的一部分,那么在保持高可用性的同时终止 pods 的建议方法是使用以下命令执行部署。将
替换为您的部署的名称。my-deployment
kubectl rollout restart deployment/
my-deployment
集群附加组件
已更新以下集群附加组件以使用自动重新获取服务账户令牌的 Kubernetes 客户端开发工具包。我们建议确保列出的版本或更高版本已安装在 1.21
或更高版本的集群上。
-
Amazon VPC CNI plugin for Kubernetes 和指标帮助程序插件版本
1.8.0
和更高版本。要查看当前版本或进行更新,请参阅 使用 Amazon VPC CNI plugin for Kubernetes Amazon EKS 附加组件 和 cni-metrics-helper。 -
CoreDNS 版本
1.8.4
和更高版本。要查看当前版本或更新它,请参阅 使用 CoreDNS Amazon EKS 附加组件。 -
Amazon Load Balancer Controller 版本
2.0.0
和更高版本。要查看当前版本或更新它,请参阅 安装 Amazon Load Balancer Controller 附加组件。 -
kube-proxy
版本1.21.2-eksbuild.2
和更高版本。要查看当前版本或更新它,请参阅 更新 Kubernetes kube-proxy 自行管理的附加组件。 Amazon for Fluent Bit 版本
2.25.0
或更高版本。要更新当前版本,请参阅 GitHub 上的发布。 Fluentd 镜像版本 1.14.6-1.2
或更高版本以及适用于 Kubernetes 元数据的 Fluentd 筛选器插件版本 2.11.1 或更高版本。