Kubernetes创建ServiceAccount未自动生成可挂载Secret与Token如何配置
Kubernetes 1.24+ 创建ServiceAccount未自动生成关联Secret/Token的恢复方案
问题根因
Kubernetes 从v1.24版本开始,默认关闭了LegacyServiceAccountToken特性门控,创建ServiceAccount时不再自动生成长期有效的可挂载Secret与Token,和1.23及更早版本的默认行为存在差异。
方案1:全局配置恢复旧版本默认行为
如果需要集群内所有新建ServiceAccount都和旧版本表现完全一致,创建即自动生成关联Secret、自动挂载Token,按以下步骤调整kube-apiserver配置:
- 找到kube-apiserver的启动配置文件,kubeadm部署的集群默认路径为
/etc/kubernetes/manifests/kube-apiserver.yaml - 在容器启动命令段添加如下参数:
- --feature-gates=LegacyServiceAccountToken=true
- 保存文件后,kubelet会自动重启kube-apiserver静态Pod,配置即刻生效。后续新建的ServiceAccount会自动生成后缀为
-token-<随机字符串>的关联Secret,默认自动注入到同SA启动的Pod中。
方案2:单ServiceAccount手动绑定关联Secret(无需修改全局配置)
如果不想调整集群全局特性开关,仅需要给指定ServiceAccount(比如给Jenkins集成用的SA)生成可挂载的永久Token,可以在创建SA后,同命名空间下手动创建指定类型的Secret,Kubernetes会自动为其填充认证信息:
apiVersion: v1 kind: Secret metadata: name: <自定义Secret名称,比如jenkins-sa-token> annotations: kubernetes.io/service-account.name: <目标ServiceAccount名称> type: kubernetes.io/service-account-token
创建完成后等待1-2秒,查看Secret详情就能看到自动填充的token、ca.crt、namespace字段,和旧版本自动生成的Secret完全一致,可直接用于Jenkins集成配置、Pod挂载。
补充说明
- 旧版本自动生成的SA Token属于永久有效期凭证,全局开启
LegacyServiceAccountToken会恢复该逻辑,存在一定凭证泄露风险,官方更推荐使用TokenRequestAPI生成短期轮转的Token做服务认证。 - 目前主流版本的Jenkins Kubernetes插件已经支持短期Token认证方式,不一定需要依赖永久生效的SA Secret。
内容的提问来源于stack exchange,提问作者HHJ
相关产品推荐
相关产品推荐

