Pod 通过关联的 ServiceAccount 自动获得由集群签发的 JWT Token(存于 /var/run/secrets/kubernetes.io/serviceaccount/token),配合 ca.crt 和 namespace 文件实现 API Server 认证;默认挂载 default ServiceAccount,生产环境应创建专用 ServiceAccount 并通过 RBAC 授予最小权限,还可通过 automountServiceAccountToken 控制挂载行为以加固安全。

在 Kubernetes 中,Pod 本身不直接持有 API 凭据;而是通过关联的 ServiceAccount(服务账号)自动获得一个由集群签发的、绑定到该账号的 Token(即 Secret 类型的凭证),该 Token 可用于向 API Server 安全认证和授权。
ServiceAccount 如何为 Pod 提供 API 凭据
Kubernetes 会为每个命名空间自动创建一个默认的 default ServiceAccount,并在 Pod 创建时,若未显式指定,就将其挂载进容器的 /var/run/secrets/kubernetes.io/serviceaccount/ 目录下。该目录包含三个关键文件:
-
token:JWT 格式的 bearer token,用于 API Server 认证 -
ca.crt:API Server 的 CA 证书,用于验证服务器 TLS 证书 -
namespace:当前 Pod 所在命名空间名称(纯文本)
容器内应用只需读取这些文件,就能构造合法的 HTTP 请求(如使用 curl -H "Authorization: Bearer $(cat /var/run/secrets.../token)" https://kubernetes.default.svc/api/v1/pods)访问集群 API。
自定义 ServiceAccount 并绑定 RBAC 权限
生产环境应避免使用默认账号,而应创建专用 ServiceAccount,并通过 Role / ClusterRole + RoleBinding / ClusterRoleBinding 明确授予最小必要权限:
- 创建 ServiceAccount:
kubectl create sa my-app-sa -n my-ns - 定义 Role(例如只读 pods):
apiVersion: rbac.authorization.k8s.io/v1<br>kind: Role<br>metadata:<br> name: pod-reader<br> namespace: my-ns<br>rules:<br>- apiGroups: [""]<br> resources: ["pods"]<br> verbs: ["get", "list", "watch"]
- 绑定 Role 到 ServiceAccount:
apiVersion: rbac.authorization.k8s.io/v1<br>kind: RoleBinding<br>metadata:<br> name: read-pods<br> namespace: my-ns<br>subjects:<br>- kind: ServiceAccount<br> name: my-app-sa<br> namespace: my-ns<br>roleRef:<br> kind: Role<br> name: pod-reader<br> apiGroup: rbac.authorization.k8s.io
在 Pod 中显式使用指定 ServiceAccount
在 Pod 或 Deployment 的 spec 中设置 serviceAccountName 字段即可启用自定义账号:
apiVersion: v1<br>kind: Pod<br>metadata:<br> name: app-pod<br> namespace: my-ns<br>spec:<br> serviceAccountName: my-app-sa<br> containers:<br> - name: app<br> image: my-app:latest
此时 Pod 启动后,将自动挂载 my-app-sa 对应的 Token Secret(Kubernetes 自动注入,无需手动挂载 volume)。
禁用或精简默认 Token 挂载(安全加固)
若容器不需要调用 API Server,可关闭自动挂载以降低风险:
- 在 Pod spec 中添加:
automountServiceAccountToken: false - 若需部分容器访问 API,可在容器级单独开启(v1.22+ 支持):
spec:<br> serviceAccountName: my-app-sa<br> automountServiceAccountToken: false<br> containers:<br> - name: api-worker<br> image: worker:latest<br> env:<br> - name: SERVICE_ACCOUNT_TOKEN<br> valueFrom:<br> secretKeyRef:<br> name: my-app-sa-token-xxxxx<br> key: token
(注意:需先查出对应 Secret 名称,通常为)-token-xxxxx
Token Secret 本身受 RBAC 控制——只有能读取该 Secret 的用户或 Pod 才能获取其内容,因此合理配置 RBAC 是保障凭据安全的核心。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










