update service-accounts-admin.md

reviewable/pr5354/r2
zhangqx2010 2017-09-21 12:11:37 +08:00
parent dbd35c639a
commit 7b6571da0e
1 changed files with 34 additions and 36 deletions

View File

@ -4,53 +4,53 @@ assignees:
- davidopp
- lavalamp
- liggitt
title: Managing Service Accounts
title: 管理服务帐号Service Accounts
---
*本文是 service accounts 管理员手册。需要[Service Accounts 用户手册](/cn/docs/user-guide/service-accounts)的知识背景。*
*对于 authorization 和 user accounts 支持已经在计划中,但是还未完成。为了更好地解释 service
accounts有时会提到一些未完成的功能特性。*
*本文是服务帐户管理员手册。需要[服务帐户用户手册](/docs/user-guide/service-accounts)的知识背景。*
*对于认证和用户帐号user accounts的支持已经在计划中但是还未完成。为了更好地解释用户帐户有时会提到一些未完成的功能特性。*
## 用户账号 vs 服务账号
Kubernetes 将 user account 和 service account 的概念区分开,主要基于以下几个原因:
Kubernetes 将用户账号和服务账号的概念区分开,主要基于以下几个原因:
- user account 是给人使用的。servcice account是给 pod 中运行的进程使用的。
- user account 为全局设计。命名必须在一个集群的所有命名空间中唯一,未来的用户资源不会被设计到命名空间中。
service account 是按命名空间的。
- 典型场景中,一个集群的 user account 是来自于企业数据库的,在数据库中新建用户一般需要特殊权限,并且账号是与复杂都业务流程关联的。
service account的创建往往更轻量允许集群用户为特定的任务创建service account(即,权限最小化原则)。
- 用户账号是给人使用的。服务账号是给 pod 中运行的进程使用的。
- 用户账号为全局设计的。命名必须在一个集群的所有命名空间中唯一,未来的用户资源不会被设计到命名空间中。
服务账号是在命名空间里的。
- 典型场景中,一个集群的用户账号是从企业数据库的同步来的,在数据库中新用户帐号一般需要特殊权限,并且账号是与复杂的业务流程关联的。
服务账号的创建往往更轻量,允许集群用户为特定的任务创建服务账号(即,权限最小化原则)。
- 对于人和服务的账号,审计要求会是不同的。
- 对于复杂系统而言,配置包可以包含该系统各类组件的 service account 定义,
因为 service account 可以有临时的创建需求和自己的命名空间,这类配置是便携式的。
- 对于复杂系统而言,配置包可以包含该系统各类组件的服务账号定义,
因为服务账号能被临时创建,并且有命名空间分类的名字,这类配置是便携式的。
## 服务账号自动化
service accounts 的自动化由三个独立的组建共同配合实现:
服务账号的自动化由三个独立的组件共同配合实现:
- A Service account admission controller (service account 准入控制器)
- A Token controller (令牌控制器)
- A Service account controller (service account 控制器)
- 用户账号准入控制器A Service account admission controller
- 令牌控制器A Token controller
- 服务账号控制器A Service account controller
### 服务账号准入控制器
对于 pods 的操作是通过一个叫做 [准入控制器](/cn/docs/admin/admission-controllers) 的插件实现的。它是 apiserver 的一部分。
准入控制器被创建或更新时,他会对 pod 同步进行操作。当这个插件时活动状态时(大部分版本默认是活动状态),在 pod 被创建或者更改时,
对于 pods 的操作是通过一个叫做 [准入控制器](/docs/admin/admission-controllers) 的插件plugin实现的。它是 APIserver 的一部分。
pod 被创建或更新时,它会同步更改 pod。当这个插件是活动状态时(大部分版本默认是活动状态),在 pod 被创建或者更改时,
它会做如下操作:
1. 如果 pod 没有配置 `ServiceAccount`,它会将 `ServiceAccount` 设置为 `default`
2. 它会确保被 pod 关联的 `ServiceAccount` 是存在的,否则就拒绝请求。
4. 如果 pod 没有包含任何的 `ImagePullSecrets`,那么 `ServiceAccount``ImagePullSecrets` 就会被添加到 pod。
5. 它会把一个 `volume` 添加给 pod 该 pod 包含有一个用于 API 访问的 token。
6. 它会把一个 `volumeSource` 添加到 pod 的每个 container并挂载到 `/var/run/secrets/kubernetes.io/serviceaccount`
1. 如果 pod 没有配置 `ServiceAccount`,它会将 `ServiceAccount` 设置为 `default`
2. 确保被 pod 关联的 `ServiceAccount` 是存在的,否则就拒绝请求。
3. 如果 pod 没有包含任何的 `ImagePullSecrets`,那么 `ServiceAccount``ImagePullSecrets` 就会被添加到 pod。
4. 它会把 `volume` 添加给 pod该 pod 包含有一个用于 API 访问的令牌。
5. 它会把 `volumeSource` 添加到 pod 的每个容器,挂载到 `/var/run/secrets/kubernetes.io/serviceaccount`
### 令牌控制器
@ -59,21 +59,20 @@ service accounts 的自动化由三个独立的组建共同配合实现:
令牌控制器TokenController作为 controller-manager 的一部分运行。它异步运行。它会:
- 监听对于 serviceAccount 的创建动作,并创建对应的 Secret 以允许 API 访问。
- 监听对于 serviceAccount 的删除动作,并删除所有对应的 ServiceAccountToken Secrets
- 监听对于 secret 的添加动作,确保相关联的 ServiceAccount 是存在的,并在根据需要为 secret 添加一个 token
- 监听对于 serviceAccount 的删除动作,并删除所有对应的 ServiceAccountToken Secret。
- 监听对于 secret 的添加动作,确保相关联的 ServiceAccount 是存在的,并根据需要为 secret 添加一个令牌
- 监听对于 secret 的删除动作,并根据需要删除对应 ServiceAccount 的关联。
你必须给令牌控制器token controller传递一个 service account 的私钥private key可以通过 `--service-account-private-key-file` 参数完成。
传递的私钥将被用来对 service account tokens 进行签名。类似的,你必须给 kube-apiserver 传递一个公钥public key通过 `--service-account-key-file`
参数完成。传递的公钥会被用来验证认证过程中的令牌token
你必须给令牌控制器传递一个服务帐号的私钥private key通过 `--service-account-private-key-file` 参数完成。传递的私钥将被用来对服务帐号令牌进行签名。
类似的,你必须给 kube-apiserver 传递一个公钥public key通过 `--service-account-key-file` 参数完成。传递的公钥在认证过程中会被用于验证令牌。
#### 创建额外的 API 令牌
#### 创建额外的 API 令牌API token
控制器的循环运行会确保对于每个 service account 都存在一个带有 API tokenAPI 令牌)的secret。
如需要为一个 service account 创建一个额外的 API 令牌API token,可以创建一个 `ServiceAccountToken`
类型的 secret并添加与 service account 对应的 annotation 属性,控制器会为它更新 token
控制器的循环运行会确保对于每个服务帐号都存在一个带有 API 令牌的 secret。
如需要为服务帐号创建一个额外的 API 令牌,可以创建一个 `ServiceAccountToken`
类型的 secret并添加与服务帐号对应的 annotation 属性,控制器会为它更新令牌
secret.json:
@ -97,7 +96,7 @@ kubectl describe secret mysecretname
```
#### 删除作废服务账号令牌
#### 删除/作废服务账号令牌
```shell
kubectl delete secret mysecretname
@ -107,5 +106,4 @@ kubectl delete secret mysecretname
### 服务账号控制器
Service Account Controller 在 namespaces 内管理 ServiceAccount需要保证名为 "default" 的
ServiceAccount在每个命名空间中存在。
服务帐号控制器在命名空间内管理 ServiceAccount需要保证名为 "default" 的 ServiceAccount 在每个命名空间中存在。