自Kubernetes 1.24版本起,服务账户(ServiceAccount)的令牌管理机制发生重大变更,传统自动生成Secret的方式已被废弃。本文手把手教你破解新版本令牌获取难题,并演示三种权限验证姿势。
一、版本变更核心影响
🚨 关键变化:
停止自动创建Legacy Token Secret 强制使用TokenRequest API 令牌绑定生命周期(默认1小时)
新旧版本对比:
二、令牌获取实战演练
2.1 创建Token Secret模板
# sa-token.yaml
apiVersion:v1
kind:Secret
metadata:
name:prom-sa-secret
namespace:kube-system
annotations:
kubernetes.io/service-account.name:"prometheus"# 关键锚定SA
type:kubernetes.io/service-account-token# 指定令牌类型复制
2.2 应用配置并提取令牌
# 创建Secret
kubectl apply -f sa-token.yaml
# 提取Base64编码令牌
TOKEN=$(kubectl -n kube-system get secret prom-sa-secret -ojsonpath='{.data.token}')复制
三、权限校验三大姿势
3.1 命令行快速验证
# --as值,所涉及的身份伪装功能
echo $TOKEN | base64 -d | awk -F. '{printf $2}' | base64 -d | python -m json.tool | grep sub
"sub": "system:serviceaccount:kube-system:prometheus"
# 校验节点读取权限
kubectl auth can-i get nodes \
--as=system:serviceaccount:kube-system:prometheus
# 检查Ingress操作权限(需对应RBAC配置)
kubectl auth can-i create ingress \
--as=system:serviceaccount:kube-system:prometheus复制
3.2 模拟API请求验证
# 使用curl测试API访问
curl -k -H "Authorization: Bearer $(echo $TOKEN | base64 -d)" \
https://${API_SERVER}/api/v1/namespaces/kube-system/pods
# 典型响应分析:
# 200 OK - 有读取权限
# 403 Forbidden - 权限不足复制
3.3 RBAC规则逆向追溯
# 查看绑定到SA的ClusterRole
kubectl get clusterrolebindings -o json | jq '.items[] | select(.subjects[0].name=="prometheus")'
# 可视化权限关系
kubectl describe clusterrole prometheus复制
四、常见故障排查
❌ 问题1:创建Secret后未生成令牌
✅ 解决步骤:
检查SA是否存在 验证annotation格式是否正确 查看kube-controller-manager日志
❌ 问题2:令牌报"Unauthorized"错误
✅ 诊断流程:
# 检查令牌有效期
kubectl get secret prom-sa-secret -o jsonpath='{.metadata.annotations.expiration-timestamp}'
# 验证RBAC绑定
kubectl get rolebinding,clusterrolebinding -A | grep prometheus复制
五、结语
Kubernetes 1.24以后服务账户(ServiceAccount)的令牌管理机制不再生成Secret。本文手把手教你破解新版本令牌获取难题
别忘了,关注我们的公众号,获取更多关于容器技术和云原生领域的深度洞察和技术实战,让我们携手在技术的海洋中乘风破浪!
文章转载自Linux运维智行录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。