Kubernetes 账户详解:用户账户与服务账户全解析
在 Kubernetes(K8s)中,账户是访问集群资源的关键凭据。Kubernetes 的账户体系分为 用户账户(User Account) 和 服务账户(Service Account)。两者的职责和适用场景截然不同:用户账户是给人用的,而服务账户则是给程序用的。今天我们来深挖两种账户的使用场景、配置方法和具体案例。
一、服务账户(Service Account)
服务账户(SA)是 Kubernetes 为 Pod 提供访问 Kubernetes API 的身份凭据。每个命名空间默认会创建一个 default
服务账户,但在实际应用中,通常需要为不同的服务创建独立的服务账户以实现更精细的权限管理。
服务账户的特点
-
自动挂载令牌
- 服务账户令牌会自动挂载到 Pod 的
/var/run/secrets/kubernetes.io/serviceaccount
路径下,Pod 中的应用可以使用该令牌与 Kubernetes API 交互。
- 服务账户令牌会自动挂载到 Pod 的
-
与 RBAC 配合使用
- 服务账户通过绑定角色(Role 或 ClusterRole)来定义具体可以访问哪些资源及操作范围。
-
命名空间隔离
- 服务账户属于特定命名空间,无法直接访问其他命名空间的资源。
使用场景
-
监控工具访问集群:
Prometheus 等监控工具通过服务账户获取集群状态信息,例如 Pod、节点的运行状态。 -
自动化任务执行:
CI/CD 流水线中的任务通过服务账户操作集群,如部署新版本应用。 -
权限最小化:
不同服务使用独立的服务账户,只分配其所需的最小权限,确保安全性。
服务账户的配置与使用
1. 创建服务账户
配置文件示例:
apiVersion: v1
kind: ServiceAccount
metadata:
name: custom-sa
namespace: default
应用配置文件:
kubectl apply -f service-account.yaml