You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

原生Kubernetes创建ServiceAccount及获取Token相关问题咨询

Kubernetes v1.25.1 中 ServiceAccount Token 获取及 kubectl exec 命令 -- 的作用说明

先解决你最初的问题:ServiceAccount 无关联 Secret 时如何获取 Token

从 Kubernetes v1.24 开始,默认不再为 ServiceAccount 自动创建关联的 Secret 类型 Token(这是出于安全考虑,避免长期 Token 泄露风险),所以你看到 secrets: [] 是正常现象。获取 Token 有两种方式:

1. 生成短期 Token(推荐)

直接用 kubectl create token 命令生成有效期为 1 小时的短期 Token,命令如下:

kubectl create token cicd

执行后会直接输出可使用的 Token,无需额外解码。

2. 创建长期关联 Secret(不推荐)

如果确实需要长期 Token,可以手动创建关联的 Secret:

apiVersion: v1
kind: Secret
metadata:
  name: cicd-sa-token
  annotations:
    kubernetes.io/service-account.name: "cicd"
type: kubernetes.io/service-account-token

保存为 sa-token-secret.yaml 后执行:

kubectl apply -f sa-token-secret.yaml

之后用以下命令提取 Token:

kubectl get secret cicd-sa-token -o jsonpath='{.data.token}' | base64 -d

关于 kubectl exec 命令中 -- 的疑问

先明确 -- 的核心作用:分隔 kubectl 自身的参数和要在容器内部执行的命令/参数。

你的两条命令是否需要加 --?

你的两条命令:

kubectl exec cicd -- cat /run/secrets/kubernetes.io/serviceaccount/token && echo
kubectl exec cicd cat /run/secrets/kubernetes.io/serviceaccount/token && echo

这两条都能正常运行,因为这里的 cat 和路径参数不会和 kubectl exec 的内置参数(比如 -n、--container 等)产生冲突。

为什么推荐加 --?

虽然当前场景下不加也能用,但加 -- 是更安全、规范的写法,能避免后续修改命令时出现意外问题。比如:
如果你要执行的容器内命令带参数(比如 echo -n hello),不加 -- 的话,-n 会被 kubectl 当成「指定 namespace」的参数处理,导致命令执行失败:

# 错误写法:kubectl 会把 -n 当成自己的参数
kubectl exec cicd echo -n hello

# 正确写法:用 -- 分隔,-n 会被传递给容器内的 echo 命令
kubectl exec cicd -- echo -n hello

总结:日常使用中,只要是在 kubectl exec 后执行容器内命令,都建议加上 --,避免踩坑。

内容的提问来源于stack exchange,提问作者Peter Penzov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:45:37