Kubernetes 中的 Service Account 是什么?

在 Kubernetes 中,Service Account 是用于访问 Kubernetes API 的身份认证机制。它与命名空间绑定,用于标识运行在集群中的进程,并且控制哪些 API 资源可以被访问。

Service Account 的主要作用是:

  • 提供一个标识,代表在集群中运行的进程。
  • 控制这些进程可以访问哪些集群资源的权限。
  • 可以与 RBAC 结合实现细粒度的授权控制。

Service Account 包含以下几个要素:

  • ServiceAccount 对象:包含用户自动生成的私钥和对应的公钥。
  • Secret:包含用户名、密码/令牌、根证书等。
  • ImagePullSecret:包含用于拉取私有镜像仓库镜像的认证信息。
  • API权限:表示可以访问哪些API和资源,通过RBAC授权完成。

Service Account 的工作流程是:

  1. 集群启动时会自动创建一个 default Service Account。
  2. 用户创建 Pod 时如果不指定 Service Account,默认使用 default。
  3. 用户也可以创建新的 Service Account,并在 Pod 中指定使用。
  4. Pod 使用 Service Account 绑定的认证信息访问 Kubernetes API。
  5. Service Account 具有哪些权限取决于绑定的 RBAC 策略。
  6. 不同的 Pod 可以绑定不同的 Service Account 以实现权限隔离。

例如:

  1. 启动集群后自动创建 default Service Account。
  2. 创建一个新的 Service Account admin-user:
kubectl create serviceaccount admin-user
  1. 绑定 ClusterRole admin 到 admin-user 实现管理员权限:
kubectl create clusterrolebinding admin-user-binding \
  --clusterrole=admin \
  --serviceaccount=default:admin-user
  1. 创建一个 Pod 并指定使用 admin-user Service Account:
yaml
apiVersion: v1
kind: Pod
metadata:
  name: admin-pod
spec:
  serviceAccountName: admin-user
  ...
  1. admin-pod Pod 可以使用 admin-user 的权限访问管理员级别的 API。
  2. default Service Account 创建的 Pod 只有默认权限。

所以总结来说,Service Account 的主要作用是实现访问 Kubernetes API 的身份认证,其主要特征是:

  1. 与命名空间绑定,代表一类Pod的身份。
  2. 包含用于 API 访问的认证信息,如证书、Token 等。
  3. 权限由绑定的 RBAC 策略决定。
  4. 可以为不同的Pod指定不同的Service Account以隔离权限。
  5. 有一个默认的default Service Account。

它的工作流程是:

  1. Kubernetes 创建default Service Account。
  2. 用户可以创建自定义Service Account。
  3. Pod 指定使用的Service Account。
  4. Pod 使用Service Account的认证信息访问API。
  5. Service Account有哪些权限取决于RBAC授权。
  6. 不同Pod可以使用不同Service Account以实现权限隔离。