为何查看ServiceAccount时输出中未显示关联的Secret?
问题:ServiceAccount的SECRETS列显示为0,关联的Secret未被识别
我在minikube环境中创建了ServiceAccount、Secret、Role、RoleBinding,执行kubectl get sa查看时,test账号的SECRETS列显示为0。创建对象的命令如下:
- 创建ServiceAccount:
kubectl create sa test - 创建关联Secret:
➜ ~ kubectl apply -f - <<EOF apiVersion: v1 kind: Secret metadata: name: test annotations: kubernetes.io/service-account.name: test type: kubernetes.io/service-account-token EOF
原因分析
- Kubernetes v1.24及以后版本,默认不再为ServiceAccount自动生成关联的Secret;且手动创建的Secret仅通过
kubernetes.io/service-account.name注解与ServiceAccount建立关联,但不会自动被添加到ServiceAccount对象的secrets数组中。 kubectl get sa输出的SECRETS列,统计的是ServiceAccount对象secrets字段里的条目数量,而非所有通过注解关联的Secret数量。执行kubectl get sa test -o yaml可验证,会发现secrets字段为空数组。
解决方式
如果需要让kubectl get sa的SECRETS列显示该Secret的数量,需手动将Secret添加到ServiceAccount的secrets数组中:
- 编辑ServiceAccount:
kubectl edit sa test - 在yaml配置中添加
secrets字段(若已存在则追加条目):apiVersion: v1 kind: ServiceAccount metadata: name: test secrets: - name: test - 保存退出后,再次执行
kubectl get sa,test账号的SECRETS列会显示为1。
注意:即使SECRETS列显示为0,这个手动创建的Secret依然可以被test ServiceAccount正常使用,只是未被包含在ServiceAccount对象的引用列表中。
内容的提问来源于stack exchange,提问作者Jananath Banuka
相关产品推荐
相关产品推荐

