Kubernetes创建带Token的ServiceAccount时kubectl exec报错求助
Kubernetes创建关联ServiceAccount的Pod并获取Token的正确命令
1. 创建cicd ServiceAccount
kubectl create serviceaccount cicd
2. 部署关联该ServiceAccount的Nginx Pod
方式一:用kubectl run快速创建
kubectl run cicd-nginx-pod --image=nginx --serviceaccount=cicd
方式二:用YAML配置文件创建
创建cicd-pod.yaml文件:
apiVersion: v1 kind: Pod metadata: name: cicd-nginx-pod spec: serviceAccountName: cicd containers: - name: nginx-container image: nginx
执行部署:
kubectl apply -f cicd-pod.yaml
3. 正确获取Pod内的ServiceAccount Token
步骤1:获取目标Pod名称
先查看运行中的Pod:
kubectl get pods
输出会显示类似cicd-nginx-pod-xxxxxx-xxxxx的Pod名称,记下来替换以下命令中的<pod-name>。
步骤2:执行正确的kubectl exec命令
使用新格式(避免弃用提示),如果Pod只有一个容器,可省略容器名:
kubectl exec <pod-name> -- cat /run/secrets/kubernetes.io/serviceaccount/token
如果Pod有多个容器,需要指定容器名(比如上面YAML中的nginx-container):
kubectl exec <pod-name> -c nginx-container -- cat /run/secrets/kubernetes.io/serviceaccount/token
4. 直接生成ServiceAccount短期Token(推荐)
你已经使用的kubectl create token命令是正确的,无需进入Pod即可生成该ServiceAccount的短期Token:
kubectl create token cicd
错误原因说明
- 你之前的
kubectl exec命令误用了ServiceAccount名称cicd作为Pod名称,必须替换为实际运行的Pod名称 - 旧格式
kubectl exec [POD] [COMMAND]已被弃用,必须使用kubectl exec <pod-name> -- <command>的新格式来分隔kubectl参数与容器内执行的命令
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

