注意:本文是关于 Service Account 的用户指南,管理指南另见 Service Account 的集群管理指南 。
本文档描述的关于 Service Account 的行为只有当您按照 Kubernetes 项目建议的方式搭建起集群的情况下才有效。您的集群管理员可能在您的集群中有自定义配置,这种情况下该文档可能并不适用。
当您(真人用户)访问集群(例如使用kubectl命令)时,apiserver 会将您认证为一个特定的 User Account(目前通常是admin,除非您的系统管理员自定义了集群配置)。Pod 容器中的进程也可以与 apiserver 联系。 当它们在联系 apiserver 的时候,它们会被认证为一个特定的 Service Account(例如default)。
使用默认的 Service Account 访问 API server
当您创建 pod 的时候,如果您没有指定一个 service account,系统会自动得在与该pod 相同的 namespace 下为其指派一个default service account。如果您获取刚创建的 pod 的原始 json 或 yaml 信息(例如使用kubectl get pods/podename -o yaml命令),您将看到spec.serviceAccountName字段已经被设置为 default。
$kubectlgetserviceaccountsdefault-oyaml>./sa.yaml$catsa.yamlapiVersion:v1kind:ServiceAccountmetadata:creationTimestamp:2015-08-07T22:02:39Zname:defaultnamespace:defaultresourceVersion:"243024"selfLink:/api/v1/namespaces/default/serviceaccounts/defaultuid:052fb0f4-3d50-11e5-b066-42010af0d7b6secrets:-name:default-token-uudge$visa.yaml[editor session not shown][delete line with key "resourceVersion"][add lines with "imagePullSecret:"]$catsa.yamlapiVersion:v1kind:ServiceAccountmetadata:creationTimestamp:2015-08-07T22:02:39Zname:defaultnamespace:defaultselfLink:/api/v1/namespaces/default/serviceaccounts/defaultuid:052fb0f4-3d50-11e5-b066-42010af0d7b6secrets:-name:default-token-uudgeimagePullSecrets:-name:myregistrykey$kubectlreplaceserviceaccountdefault-f./sa.yamlserviceaccounts/default