* ZH-trans: add service-accounts-admin.md * Update service-accounts-admin.md * Update service-accounts-admin.md
8.6 KiB
reviewers, title, content_template, weight
| reviewers | title | content_template | weight | ||||
|---|---|---|---|---|---|---|---|
|
管理 Service Accounts | templates/concept | 50 |
{{% capture overview %}}
这是一个关于 service accounts 的集群管理指南,它假设您了解 Service Accounts 用户指南。
计划支持授权和用户帐户,但并不完整。有时会引用不完整的功能以便更好地描述 service accounts。
{{% /capture %}}
{{% capture body %}}
用户帐户与 service accounts
Kubernetes 区分用户帐户和 service account 的概念有以下几个原因:
- 用户帐户是针对用户的。Service accounts 用于进程,这些进程在 pods 中运行。
- 用户帐户应该是全局性的。名称必须在集群的所有命名空间中都是唯一的,未来的用户资源将不会使用命名空间。Service accounts 使用命名空间。
- 通常,集群的用户帐户可能与企业数据库同步,在企业数据库中,新用户帐户的创建需要特殊的权限,并且与复杂的业务流程相关联。 Service account 创建的目的是更加轻量级,允许集群用户为特定任务创建 Service account (即:最小特权原则)。
- 对人员和 Service account 的审计考虑可能有所不同。
- 复杂系统的配置包可能包括该系统组件的各种 Service account 的定义。由于 Service account 可以临时创建并具有命名空间名称,因此这种配置是可移植的。
Service account 自动化
三个独立的组件合作实现 service accounts 的自动化:
- Service account 准入控制器
- 令牌控制器
- Service account 控制器
Service Account 准入控制器
pod 的修改是通过一个名为准入控制器的插件实现的。它是 apiserver 的一部分。它可以同步操作,以便在创建或更新 pod 时对其进行修改。 当此插件处于活动状态时(默认情况下在大多数发行版中),则在创建或修改 pod 时执行以下操作:
- 如果 pod 没有设置
ServiceAccount,它将ServiceAccount设置为default。 - 它确保 pod 引用的
ServiceAccount存在,否则拒绝它。 - 如果 pod 不包含任何
ImagePullSecrets,则将ServiceAccount的ImagePullSecrets添加到 pod 中。 - 它向包含 API 访问令牌的 pod 添加了一个
volume。 - 它为 pod 内的每个容器添加一个
volumeSource,该 volume 被挂载到/var/run/secrets/kubernetes.io/serviceaccount。
令牌控制器
TokenController 作为控制器-管理器的一部分异步运行。它用于:
- 观察 serviceAccount 创建并创建相应的 Secret 以允许 API 访问。
- 观察 serviceAccount 删除并删除所有相应的 ServiceAccountToken Secrets。
- 观察 secret 添加,并确保引用的 ServiceAccount 存在,并在需要时向该 secret 添加令牌。
- 观察 secret 删除并在需要时从相应的 ServiceAccount 中删除引用。
您必须使用 --service-account-private-key-file 选项将 service account 私钥文件传递给控制器-管理器中的令牌控制器。
私钥将用于签署生成的 service account 令牌。同样,您必须使用 --service-account-key-file 选项将相应的公钥传递给
kube-apiserver。公钥将用于在身份验证期间验证令牌。
创建其他 API 令牌
控制器循环确保每个 service account 都存在具有 API 令牌的 secret。要为 service account 创建其他 API 令牌, 请使用 ServiceAccountToken 引用 service account 的注解创建类型的 secret,控制器将使用生成的令牌更新它:
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 令牌
kubectl delete secret mysecretname
Service Account 控制器
Service Account 控制器在命名空间中管理 ServiceAccount,并确保每个活动命名空间中都存在一个名为 default 的 ServiceAccount。
{{% /capture %}}