Kubernetes区分普通帐户(user accounts)和服务帐户(service accounts)的原因:
三个独立的组件协作,来实现service account的自动化:
通过 Admission Controller插件来实现对pod修改,它是apiserver的一部分。创建或更新pod时会同步进行修改pod。当插件处于激活状态(在大多数发行版中都默认情况)创建或修改pod时,会按以下操作执行:
TokenController作为controller-manager的一部分运行。异步行为:
需要使用--service-account-private-key-file 参数选项将Service Account 密匙(key)文件传递给controller-manager中的Token controller。key用于 Service Account Token签名。同样,也需要使用--service-account-key-file 参数选项将相应的(public key)公匙传递给kube-apiserver ,公钥用于在认证期间验证Token。
controller loop能确保每个Service Account都存在一个带有API Token的secret 。如要为Service Account创建额外的API Token,可以使用创建ServiceAccountToken类型的secret,添加与Service Account对应的 annotation 属性,controller会更新令牌:
secret.json:
{
"kind": "Secret",
"apiVersion": "v1",
"metadata": {
"name": "mysecretname",
"annotations": {
"kubernetes.io/service-account.name": "myserviceaccount"
}
},
"type": "kubernetes.io/service-account-token"
}
kubectl create -f ./secret.json
kubectl describe secret mysecretname
要删除/使Service Account token无效
kubectl delete secret mysecretname
Service Account Controller在namespaces里管理ServiceAccount,并确保每个有效的namespaces中都存在一个名为“default”的ServiceAccount。
本文翻译Kubernetes官方文档
本文分享自 kubernetes中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!