什么是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相關聯