如何将手动创建的无过期ServiceAccount令牌挂载到Pod中
问题解答
一、将手动创建的ServiceAccount令牌挂载到Pod中
如果要挂载你手动创建的build-robot-secret,而非Kubernetes自动挂载的默认令牌,需要在Pod清单里通过volumes和volumeMounts显式配置:
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: nginx:alpine volumeMounts: - name: sa-token-volume mountPath: /var/run/secrets/kubernetes.io/serviceaccount readOnly: true volumes: - name: sa-token-volume secret: secretName: build-robot-secret
说明:
- 用
volumes字段引用你手动创建的build-robot-secret - 通过
volumeMounts将该Secret挂载到指定路径(示例用了默认令牌路径,也可自定义) - 这种配置会覆盖Kubernetes自动挂载的默认ServiceAccount令牌
二、关于令牌过期时间的说明
你遇到的是Kubernetes版本迭代后的默认行为:
- 自动挂载的令牌:从Kubernetes 1.21版本开始,默认启用
ServiceAccountTokenVolumeProjection功能,自动挂载的是短期令牌,默认有效期1小时,Kubernetes会自动轮换令牌,因此你看到的令牌会有过期时间。这是为提升安全性,替代了旧版本中永不过期的长期令牌。 - 手动创建的令牌Secret:如果需要无过期时间的令牌,创建Secret时需添加
kubernetes.io/service-account.token.expirationSeconds注解并设为"0"(表示永不过期),示例如下:
kubectl apply -f - <<EOF apiVersion: v1 kind: Secret metadata: name: build-robot-secret annotations: kubernetes.io/service-account.name: build-robot kubernetes.io/service-account.token.expirationSeconds: "0" type: kubernetes.io/service-account-token EOF
注意:部分集群可能配置了强制的最大令牌有效期限制,此时设置"0"可能不生效,需联系集群管理员确认配置。
内容的提问来源于stack exchange,提问作者user2713498
相关产品推荐
相关产品推荐

