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 字段 | //kubernetes.default.svc |
| api-audiences | 請求 Token 的身份,用于 APIServer 認證請求 Token 是否合法,多個 audience 通過“,”分割 | //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