专栏首页kubernetes中文社区Kubernetes 管理 Service Accounts

Kubernetes 管理 Service Accounts

User Accounts 与 Service Accounts

Kubernetes区分普通帐户(user accounts)和服务帐户(service accounts)的原因:

  • 普通帐户是针对(人)用户的,服务账户针对Pod进程。
  • 普通帐户是全局性。在集群所有namespaces中,名称具有惟一性。
  • 通常,群集的普通帐户可以与企业数据库同步,新的普通帐户创建需要特殊权限。服务账户创建目的是更轻量化,允许集群用户为特定任务创建服务账户。
  • 普通帐户和服务账户的审核注意事项不同。
  • 对于复杂系统的配置包,可以包括对该系统的各种组件的服务账户的定义。

Service account automation

三个独立的组件协作,来实现service account的自动化:

  • 一个service account准入控制器(admission controller)
  • 一个 Token controller
  • 一个service account controller

Service Account Admission Controller

通过 Admission Controller插件来实现对pod修改,它是apiserver的一部分。创建或更新pod时会同步进行修改pod。当插件处于激活状态(在大多数发行版中都默认情况)创建或修改pod时,会按以下操作执行:

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

Token controller

TokenController作为controller-manager的一部分运行。异步行为:

  • 观察serviceAccount的创建,并创建一个相应的Secret 来允许API访问。
  • 观察serviceAccount的删除,并删除所有相应的ServiceAccountToken Secret
  • 观察secret 添加,并确保关联的ServiceAccount存在,并在需要时向secret 中添加一个Token。
  • 观察secret 删除,并在需要时对应 ServiceAccount 的关联

需要使用--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。

To create additional API tokens

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

Service Account Controller在namespaces里管理ServiceAccount,并确保每个有效的namespaces中都存在一个名为“default”的ServiceAccount。

本文翻译Kubernetes官方文档

本文分享自微信公众号 - kubernetes中文社区(DailyDev),作者:Kubernetes

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 外部访问 kubernetes,知道这 3 种模式就够了

    最近,很多人问我 NodePorts,LoadBalancer和 Ingress 之间的区别是什么?它们是将外部流量引入集群的不同方式,而且它们的运行形式各不相...

    kubernetes中文社区
  • kubernetes资源清单之Pod应用

    pod.spec.containers.imagePullPolicy:镜像的拉取策略

    kubernetes中文社区
  • Kubernetes服务发现之Service详解

    Kubernetes Pod 是有生命周期的,它们可以被创建,也可以被销毁,然后一旦被销毁生命就永远结束。通过ReplicationController 能够动...

    kubernetes中文社区
  • php 执行 命令行命令

    PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。参考:http://www.jb51.net/article/...

    lin_zone
  • PHP 执行 Shell 命令

    主要有 exec() shell_exec() system()。 exec() string exec ( string $command [, array ...

    康怀帅
  • 64位内核开发第十三讲,内核中常用的链表等数据结构

    不管是Ring0还是Ring3数据结构都是必须要知道的.数据结构是一种思想. 以及怎么存储数据. 跟语言无关.平台无关.

    IBinary
  • iftop---实时流量监控工具

    官方网站:http://www.ex-parrot.com/~pdw/iftop/

    胡齐
  • 一个递归算法

    这个的思想利用动态规划来做,我们需要在判断类型的前提下来进行递归,一直找到最终的Value值,然后把当前Value值所在的路径,也就是k值记录下来。这是大神写的...

    张凝可
  • linux 网络数据收发网络流量监控

    iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息、TCP/IP连接等

    lollipop72
  • [日常] imap协议读取邮件

    陶士涵

扫码关注云+社区

领取腾讯云代金券