K8s 1.24中如何为ServiceAccount添加可挂载密钥?
解决方案
1. 修复ServiceAccount的Mountable Secrets为空问题
你需要在ServiceAccount的配置中显式关联手动创建的令牌Secret,Kubernetes 1.24+版本不会自动将手动创建的ServiceAccountToken Secret加入到Mountable Secrets列表。
更新你的ServiceAccount YAML:
apiVersion: v1 kind: ServiceAccount metadata: name: spinnaker-sa namespace: spinnaker # 添加secrets字段关联你的令牌Secret secrets: - name: sa-token
执行更新命令:
kubectl apply -f <你的SA配置文件路径>
再次执行kubectl describe serviceaccount spinnaker-sa -n spinnaker,此时Mountable secrets会显示为sa-token。
2. 确保Secret配置的正确性
检查你创建的令牌Secret是否满足以下要求:
type必须为kubernetes.io/service-account-tokenmetadata.annotations.kubernetes.io/service-account.name必须与ServiceAccount名称完全一致(这里是spinnaker-sa)kubernetes.io/enforce-mountable-secrets: "true"注解是可选的,它用于限制该Secret仅能被关联的ServiceAccount挂载,增强安全性。
3. 将令牌挂载到Pod中
如果需要将该令牌挂载到Pod,只需在Pod配置中指定对应的ServiceAccount即可,Kubernetes会自动挂载关联的令牌到默认路径/var/run/secrets/kubernetes.io/serviceaccount:
apiVersion: v1 kind: Pod metadata: name: test-pod namespace: spinnaker spec: # 指定使用的ServiceAccount serviceAccountName: spinnaker-sa containers: - name: your-container image: <你的镜像> # ... 其他容器配置
若需自定义挂载路径,可手动配置volumes和volumeMounts:
spec: serviceAccountName: spinnaker-sa volumes: - name: sa-token-vol secret: secretName: sa-token containers: - name: your-container image: <你的镜像> volumeMounts: - name: sa-token-vol mountPath: /custom/mount/path readOnly: true
内容的提问来源于stack exchange,提问作者Root
相关产品推荐
相关产品推荐

