Kubernetes服务账户关联的Secret未被计数显示的问题咨询
你好,我来帮你分析这个问题~
你手动定义了ServiceAccount和对应的Token Secret,执行kubectl apply后创建了资源,但查看ServiceAccount时发现Secrets计数是0,这其实是Kubernetes的默认行为导致的:
问题原因
Kubernetes里ServiceAccount的secrets计数,只会统计由集群自动为该ServiceAccount创建的Token Secret,我们手动创建的关联Secret,并不会被自动添加到ServiceAccount的secrets字段列表里,所以在get serviceaccount的摘要输出中就看不到这个计数。
验证方式
你可以查看ServiceAccount的完整配置来确认这一点,执行命令:
kubectl -n default get serviceaccount myserviceaccount -o yaml
输出里的secrets字段会是空数组,哪怕你已经创建了带有kubernetes.io/service-account.name注解的Secret。
解决办法
如果想要让这个手动创建的Secret被计入ServiceAccount的Secrets计数,你需要手动把它添加到ServiceAccount的secrets列表中,用kubectl patch命令就能快速完成:
kubectl -n default patch serviceaccount myserviceaccount -p '{"secrets": [{"name": "myserviceaccount-token"}]}'
执行完这个命令后,再重新查看ServiceAccount:
kubectl -n default get service account/myserviceaccount
就能看到Secrets计数变成1啦。
另外提个小补充:从Kubernetes 1.24版本开始,集群默认已经不会自动为ServiceAccount创建持久化的Token Secret了,官方更推荐使用TokenRequest API来获取短期有效的临时令牌,但如果你有特殊场景需要手动创建并关联的话,上面的方法完全适用。
备注:内容来源于stack exchange,提问作者Bob5421

