在 Kubernetes 中,Service Account 是用于访问 Kubernetes API 的身份认证机制。它与命名空间绑定,用于标识运行在集群中的进程,并且控制哪些 API 资源可以被访问。
Service Account 的主要作用是:
- 提供一个标识,代表在集群中运行的进程。
- 控制这些进程可以访问哪些集群资源的权限。
- 可以与 RBAC 结合实现细粒度的授权控制。
Service Account 包含以下几个要素:
- ServiceAccount 对象:包含用户自动生成的私钥和对应的公钥。
- Secret:包含用户名、密码/令牌、根证书等。
- ImagePullSecret:包含用于拉取私有镜像仓库镜像的认证信息。
- API权限:表示可以访问哪些API和资源,通过RBAC授权完成。
Service Account 的工作流程是:
- 集群启动时会自动创建一个 default Service Account。
- 用户创建 Pod 时如果不指定 Service Account,默认使用 default。
- 用户也可以创建新的 Service Account,并在 Pod 中指定使用。
- Pod 使用 Service Account 绑定的认证信息访问 Kubernetes API。
- Service Account 具有哪些权限取决于绑定的 RBAC 策略。
- 不同的 Pod 可以绑定不同的 Service Account 以实现权限隔离。
例如:
- 启动集群后自动创建 default Service Account。
- 创建一个新的 Service Account admin-user:
kubectl create serviceaccount admin-user
- 绑定 ClusterRole admin 到 admin-user 实现管理员权限:
kubectl create clusterrolebinding admin-user-binding \
--clusterrole=admin \
--serviceaccount=default:admin-user
- 创建一个 Pod 并指定使用 admin-user Service Account:
yaml
apiVersion: v1
kind: Pod
metadata:
name: admin-pod
spec:
serviceAccountName: admin-user
...
- admin-pod Pod 可以使用 admin-user 的权限访问管理员级别的 API。
- default Service Account 创建的 Pod 只有默认权限。
所以总结来说,Service Account 的主要作用是实现访问 Kubernetes API 的身份认证,其主要特征是:
- 与命名空间绑定,代表一类Pod的身份。
- 包含用于 API 访问的认证信息,如证书、Token 等。
- 权限由绑定的 RBAC 策略决定。
- 可以为不同的Pod指定不同的Service Account以隔离权限。
- 有一个默认的
default
Service Account。
它的工作流程是:
- Kubernetes 创建
default
Service Account。 - 用户可以创建自定义Service Account。
- Pod 指定使用的Service Account。
- Pod 使用Service Account的认证信息访问API。
- Service Account有哪些权限取决于RBAC授权。
- 不同Pod可以使用不同Service Account以实现权限隔离。