k8s 手动管理 ServiceAccount 的 Secret

v1.22 之前的 Kubernetes 版本会自动创建凭据访问 Kubernetes API。 这种更老的机制基于先创建令牌 Secret,然后将其挂载到正运行的 Pod 中。

而更新的版本的 K8s 则不会直接创建,使用kubectl describe sa xx命令可以看见 Tokens 的值为 none,此时需要进行手动创建 Sercet。

假设现在有一个名为 test 的 serviceAccount,所处的命名空间是 dev,则进行如下操作即可获取到 test 用户的 token。

# 设置 serviceAccount 环境变量
export serviceAccount=test
# 设置命名空间环境变量
export namespace=dev

# 创建通用文件
cat > sa.yaml<<EOF
apiVersion: v1
kind: Secret
metadata:
  name: sa-token
  namespace: default
  annotations:
    kubernetes.io/service-account.name: sa
type: kubernetes.io/service-account-token
EOF
# 修改文件名称和内容
mv sa.yaml sa-${serviceAccount}.yaml && \
sed -i "s/sa/${serviceAccount}/g" sa-${serviceAccount}.yaml && \
sed -i "s/default/${namespace}/g" sa-${serviceAccount}.yaml

# 创建 Secret
kubectl apply -f sa-${serviceAccount}.yaml

查看生成的 token,如下图:

post-801-63ae71da59f9d

阅读剩余
THE END