什么是service account? 顾名思义,相对于user account(比如:kubectl访问APIServer时用的就是user account),service account就是Pod中的Process用于访问Kubernetes API的account,它为Pod中的Process提供了一种身份标识。相比于user account的全局性权限,service account更适合一些轻量级的task,更聚焦于授权给某些特定Pod中的Process所使用。
service account作为一种resource存在于Kubernetes cluster中,我们可以通过kubectl获取当前cluster中的service acount列表:
kubectl get serviceaccount --all-namespaces
我们查看一下kube-system namespace下名为”default”的service account的详细信息:
kubectl describe serviceaccount/default -n kube-system
我们看到service account并不复杂,只是关联了一个secret资源作为token,该token也叫service-account-token,该token才是真正在API Server验证(authentication)环节起作用的:
sa就像POD,secret,configmap一样都是资源,作用在单独的命名空间,为每个命名空间自动创建一个默认的SA。
可以通过将不同的sa赋值给pod来控制每个pod可以访问的资源。
API服务器要求客户端在服务器上执行操作之前对自己进行身份认证,POD通过发送/var/run/secret/kubernetes.io/serviceaccount/token文件来进行身份认证。
每个pod都与一个ServiceAccount相关联