ServiceAccount Token卷投影允许将ServiceAccount Token以卷挂载形式投影到容器中,使容器内的应用能够使用该Token与Kubernetes API 进行交互。
工作原理
Kubernetes(v1.20及以上版本) 集群使用 TokenRequest API 获取 Token,并将这些 Token 以 Projected Volume 的形式挂载到 Pod 容器内的指定路径下。同时,Kubelet 会在 Token 的使用时间超过其总生存时间(TTL)的 80%或使用超过 24 小时,主动请求 Token 轮,并在销毁 Pod 的时候将其失效。 容器内的应用可以通过读取这些文件来获取 Token,并在与 Kubernetes API 进行交互。
注意
请您确保应用程序负载在 Token 轮换时重新加载,避免 Token 到期失效引起的交互失败。建议将 Kubernetes client 版本更新到有自动轮转 token 的版本:
Go: >= v0.15.7
Python: >= v12.0.0
Java: >= v9.0.0
Javascript: >= v0.10.3
Ruby: master branch
Haskell: v0.3.0.0
使用前提
当前,订购 CCE 专有版集群、CCE 托管版集群时在集群高级配置中启用 ServiceAccount Token 卷投影功能,支持定义如下参数。
参数 | 参数描述 | 默认值 |
---|---|---|
service-account-issuer | 签发身份,即 ServiceAccount Token payload 中的 iss 字段 | https://kubernetes.default.svc |
api-audiences | 请求 Token 的身份,用于 APIServer 认证请求 Token 是否合法,多个 audience 通过“,”分割 | https://kubernetes.default.svc |
使用步骤
步骤一:创建 ServiceAccount 对象
该步骤可选,因每个命名空间默认有一个 default ServiceAccount。当您要为容器进程提供指定的身份标识,您可以参考如下代码创建一个 ServiceAccount。
kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: build-robot
EOF
步骤二:为 Pod 配置 ServiceAccount Token 卷投影
您可以将指定的 ServiceAccount 以卷投射的方式挂载到 Pod 中,也可以调整 Token audience 和过期时间(expirationSeconds),以下是示例代码:
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- mountPath: /var/run/secrets/tokens
name: vault-token
serviceAccountName: build-robot
volumes:
- name: vault-token
projected:
sources:
- serviceAccountToken:
path: vault-token
expirationSeconds: 7200
audience: vault
EOF
获取 my-pod 的 ServiceAccount Token
kubectl exec -t nginx -- cat /var/run/secrets/tokens/vault-token > vault-token