参考

Kubernetes v1.13 版本的文档已不再维护。您现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击 最新版本。

Edit This Page

管理 Service Accounts

这是一个关于 service accounts 的集群管理指南,它假设您了解 Service Accounts 用户指南。

计划支持授权和用户帐户,但并不完整。有时会引用不完整的功能以便更好地描述 service accounts。

用户帐户与 service accounts

Kubernetes 区分用户帐户和 service account 的概念有以下几个原因:

Service account 自动化

三个独立的组件合作实现 service accounts 的自动化:

Service Account 准入控制器

pod 的修改是通过一个名为准入控制器的插件实现的。它是 apiserver 的一部分。它可以同步操作,以便在创建或更新 pod 时对其进行修改。 当此插件处于活动状态时(默认情况下在大多数发行版中),则在创建或修改 pod 时执行以下操作:

  1. 如果 pod 没有设置 ServiceAccount,它将 ServiceAccount 设置为 default。
  2. 它确保 pod 引用的 ServiceAccount 存在,否则拒绝它。
  3. 如果 pod 不包含任何 ImagePullSecrets,则将 ServiceAccount 的 ImagePullSecrets 添加到 pod 中。
  4. 它向包含 API 访问令牌的 pod 添加了一个 volume。
  5. 它为 pod 内的每个容器添加一个 volumeSource,该 volume 被挂载到 /var/run/secrets/kubernetes.io/serviceaccount。

令牌控制器

TokenController 作为控制器-管理器的一部分异步运行。它用于:

您必须使用 --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。

反馈