Kubernetes安全:如何查看ServiceAccount的Token及相关疑问
Kubernetes ServiceAccount Token 相关问题解答
操作步骤
- 创建名为jenkins的ServiceAccount:
kubectl create serviceaccount jenkins serviceaccount/jenkins created - 为该ServiceAccount生成Token:
kubectl create token jenkins eyJhbGc****************iQS-AVXfIzA - 执行
kubectl describe serviceaccount jenkins查看Token,结果显示Tokens为None:kubectl describe serviceaccount jenkins Name: jenkins Namespace: default Labels: <none> Annotations: <none> Image pull secrets: <none> Mountable secrets: <none> Tokens: <none> <===== 此处注意! Events: <none>
技术疑问解答
1. 执行kubectl describe查看ServiceAccount jenkins时显示Tokens为None,如何确认该ServiceAccount已关联Token?
kubectl create token生成的是短期Bearer Token,这类Token不会被存储为Kubernetes Secret资源,所以kubectl describe sa的Tokens字段不会显示它(该字段仅列出绑定到SA的长期Token Secret)。要确认关联关系,可通过以下方式验证:
- 解码Token:用
echo <生成的token> | base64 -d | jq(需安装jq工具)查看payload,其中sub字段值为system:serviceaccount:<namespace>:jenkins,明确指向目标SA; - 验证权限:执行
kubectl --token=<生成的token> auth can-i <verb> <resource>,比如kubectl --token=eyJhbGc... auth can-i get pods,若返回正确权限结果,说明Token确实关联该SA; - 查看有效期:
kubectl create token默认生成1小时有效期的Token,解码后可从exp字段看到过期时间戳,也可通过--duration参数自定义时长。
2. 多次执行kubectl create token jenkins命令,Kubernetes会为该账号创建多个Token还是覆盖原有Token?
会生成多个独立的有效Token,不会覆盖原有Token。每次执行命令都会生成新的短期Token,每个Token有独立的有效期,过期前均为有效状态,彼此无关联。
3. ServiceAccount与Token的映射关系是否为1:n?
是的,ServiceAccount与Token的映射关系为1:n。一个ServiceAccount可关联多个Token:
- 手动通过
kubectl create token生成多个短期Token; - 手动创建多个Secret并通过
kubernetes.io/service-account.name注解绑定到同一SA,每个Secret对应一个长期Token; - 默认情况下Kubernetes会为SA自动创建一个默认Token Secret,加上手动创建的,一个SA可同时存在多个有效Token。
内容的提问来源于stack exchange,提问作者Ryan Lyu
相关产品推荐
相关产品推荐

