如何编写可复用Bash脚本生成指定ServiceAccount的Token
适配旧版kubectl的服务账户Token生成脚本
针对你因为minikube版本限制无法使用kubectl create token的场景,这里把只支持default账户的命令改写成可指定任意服务账户的可复用脚本,满足my_script another_account的调用需求:
脚本代码
#!/bin/bash # 校验输入参数 if [ $# -lt 1 ]; then echo "用法: $0 <服务账户名> [命名空间]" echo "示例: $0 another_account" echo "示例: $0 another_account my-namespace" exit 1 fi # 接收参数,命名空间默认取default SA_NAME=$1 NAMESPACE=${2:-default} # 查询并解码目标服务账户的token kubectl get secrets -n "$NAMESPACE" -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='$SA_NAME')].data.token}" | base64 --decode # 追加换行,方便复制 echo
使用步骤
- 将上述代码保存为
generate-sa-token.sh文件 - 给脚本添加执行权限:
chmod +x generate-sa-token.sh - 调用脚本:
- 生成default命名空间下
another_account的token:./generate-sa-token.sh another_account - 生成指定命名空间(比如
my-ns)下another_account的token:./generate-sa-token.sh another_account my-ns
- 生成default命名空间下
补充说明
- 脚本会自动匹配目标服务账户关联的第一个Secret(通常是最新创建的)并输出解码后的token
- 如果目标服务账户还没有关联的Secret,需要先手动创建:
kubectl create secret generic "${SA_NAME}-token" \ -n "$NAMESPACE" \ --from-literal=token=$(openssl rand -hex 32) \ --annotation kubernetes.io/service-account.name="$SA_NAME" - 确保当前kubectl上下文有访问目标命名空间Secret资源的权限
内容的提问来源于stack exchange,提问作者CaTx
相关产品推荐
相关产品推荐

