未列出服务帐户机密。如何修复它?

Kav*_*hka 38 kubernetes kubectl

我曾经用来kubectl create serviceaccount sa1创建服务帐户。然后我使用kubectl get serviceaccount sa1 -oyaml命令来获取服务帐户信息。但它返回如下。

apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: "2022-05-16T08:03:50Z"
  name: sa1
  namespace: default
  resourceVersion: "19651"
  uid: fdddacba-be9d-4e77-a849-95ca243781cc
Run Code Online (Sandbox Code Playgroud)

我需要得到,

secrets:
- name: <secret>
Run Code Online (Sandbox Code Playgroud)

部分。但它不会返回秘密。如何修复它?

Dav*_*aze 90

在 Kubernetes 1.24 中,ServiceAccount 令牌密钥不再自动生成。请参阅1.24 变更日志文件中的“紧急升级说明”

LegacyServiceAccountTokenNoAutoGeneration功能门是测试版,默认启用。启用后,不再为每个 ServiceAccount 自动生成包含服务帐户令牌的 Secret API 对象。使用TokenRequest API 获取服务帐户令牌,或者如果需要未过期的令牌,请按照本指南为令牌控制器创建一个 Secret API 对象,以使用服务帐户令牌填充。(#108309@zshihang

这意味着,在 Kubernetes 1.24 中,您需要手动创建 Secrettoken该字段中的密钥将data自动为您设置。

apiVersion: v1
kind: Secret
metadata:
  name: sa1-token
  annotations:
    kubernetes.io/service-account.name: sa1
type: kubernetes.io/service-account-token
Run Code Online (Sandbox Code Playgroud)

由于您是手动创建 Secret,因此您知道它name:并且不需要在 ServiceAccount 对象中查找它。

这种方法在 Kubernetes 的早期版本中也应该可以正常工作。

  • 对我来说,这仅在设置名称空间时才有效 (3认同)

小智 10

我也为此苦苦挣扎了一段时间,但最终我能够使用以下方法获得临时登录令牌

kubectl create token [serviceaccount-name]

还是个新手啊!!