ServiceAccount
Service account 是为了方便 Pod 里面的进程调用 Kubernetes API 或其他外部服务而设计的。它与 User account 不同
User account 是为人设计的,而 service account 则是为 Pod 中的进程调用 Kubernetes API 而设计;
User account 是跨 namespace 的,而 service account 则是仅局限它所在的 namespace;
每个 namespace 都会自动创建一个 default service account
Token controller 检测 service account 的创建,并为它们创建 secret
开启 ServiceAccount Admission Controller 后
每个 Pod 在创建后都会自动设置
spec.serviceAccountName
为 default(除非指定了其他 ServiceAccout)验证 Pod 引用的 service account 已经存在,否则拒绝创建
如果 Pod 没有指定 ImagePullSecrets,则把 service account 的 ImagePullSecrets 加到 Pod 中
每个 container 启动后都会挂载该 service account 的 token 和
ca.crt
到/var/run/secrets/kubernetes.io/serviceaccount/
注意: 从 v1.24.0 开始,ServiceAccount 不再自动生成 Secret。如果你还想要自动生成 Secret,那么可以给 kube-controller-manager 配置特性
LegacyServiceAccountTokenNoAutoGeneration=false
。
注:你可以使用 https://jwt.io/ 来查看 token 的详细信息(如 PAYLOAD、SIGNATURE 等)。
创建 Service Account
自动创建的 secret:
添加 ImagePullSecrets
授权
Service Account 为服务提供了一种方便的认证机制,但它不关心授权的问题。可以配合 RBAC 来为 Service Account 鉴权:
配置
--authorization-mode=RBAC
和--runtime-config=rbac.authorization.k8s.io/v1alpha1
配置
--authorization-rbac-super-user=admin
定义 Role、ClusterRole、RoleBinding 或 ClusterRoleBinding
比如
最后更新于