如果 automountServiceAccountToken 设置为 false,那么 pod 的服务帐户有什么用?

What's the purpose of a pod's service account, if automountServiceAccountToken is set to false?

服务帐户的 API 凭据通常安装在 pods 中,如下所示:

/var/run/secrets/kubernetes.io/serviceaccount/token

此令牌允许 pod 中的容器化进程与 API 服务器通信。

如果 automountServiceAccountToken 设置为 false,Pod 的服务帐户 (serviceAccountName) 的用途是什么?

一点理论:

让我们从应该创建 pod 时发生的事情开始。

When you create a pod, if you do not specify a service account, it is automatically assigned the default service account in the same namespace

Reference.

所以所有 pods 无论如何都链接到服务帐户(默认或在 spec 中指定)。

然后 API 始终为每个服务帐户生成访问令牌。

automountServiceAccountToken 标志定义此令牌是否会在创建后自动挂载到 pod。

设置此标志的位置有两个选项:

  • 在特定服务帐户中

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: build-robot
    automountServiceAccountToken: false
    ...
    
  • 在特定的 pod 中

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      serviceAccountName: build-robot
      automountServiceAccountToken: false
      ...
    

答案:

What's the purpose of a pod's service account (serviceAccountName), if automountServiceAccountToken is set to false?

这可能会有所不同,具体取决于 pod 创建中涉及的进程。很好的例子是 comments in GitHub issue(这个标志最终来自哪里):

There are use cases for still creating a token (for use with external systems) or still associating a service account with a pod (for use with image pull secrets), but being able to opt out of API token automount (either for a particular pod, or for a particular service account) is useful.