文章目录

  • 一、认证、授权、准入控制架构图
  • 二、用户账号和服务账号
  • 总结


一、认证、授权、准入控制架构图

API Server作为Kubernetes集群系统的网关,是访问和管理资源对象的唯一入口;包括kube-controller-manager、kube-scheduler、kubelet和kube-proxy等集群基础组件、CoreDNS等附加组件和kubectl命令等都需要经过网关才能进行正常的访问和管理。每一次的访问请求都需要进行合法性检验,包括用户身份验证、操作权限验证及操作规范验证等,需要通过一系列验证通过之后才能访问或存储数据到etcd中。如下图所示

Kubernetes_认证授权_初识认证授权_API


上图左边表示两种用户,Human User表示人,Pod表示k8s中的Pod资源,这两类用户分别走两种不同的账号体系:UserAccount和ServiceAccount。无论是人还是Pod,访问kubernetes集群的资源需要三个环节:认证、授权、准入控制;API Server处理请求的过程中,认证插件负责鉴定用户身份,授权插件用于操作权限许可鉴别(rbac),而准入插件则用于在资源对象的创建、删除、更新或连接(proxy)操作时实现更精细的许可检查。

二、用户账号和服务账号

用户和账号
用户一共包括三种:人(user/userGroup) 和 Pod
账户一共包括两种:userAccount 和 serviceAccount (人使用UserAccount,Pod使用ServiceAccount,UserAccount并不是k8s中的一类资源resource,不存在 kind: UserAccount 这类东西,但是ServiceAccount 是k8s中的一类资源resource,存在 kind: ServiceAccount 这类东西,命令中可以简称为sa,即 kubectl get sa -A 命令)

Use Account(用户账号):一般是指由独立于Kubernetes之外的其他服务管理的用 户账号,例如由管理员分发的密钥、Keystone一类的用户存储(账号库)、甚至是包 含有用户名和密码列表的文件等。Kubernetes中不存在表示此类用户账号的对象, 因此不能被直接添加进 Kubernetes 系统中 。

Service Account(服务账号):是指由Kubernetes API 管理的账号,用于为Pod 之中的服务进程在访问Kubernetes API时提供身份标识( identity ) 。Service Account通常要绑定于特定的命名空间,它们由 API Server 创建,或者通过 API 调用于动创建 ,附带着一组存储为Secret的用于访问API Server的凭据。

客户端访问API服务的途径通常有三种:kubectl、客户端库(如fabric8)或者直接使用 REST接口进行请求。访问API服务必须通过认证和授权,则

认证:人使用的是userAccount,使用凭证文件完成k8s认证,凭证文件有三种,分别是X509客户端证书,静态token文件,静态账号密码文件,三种方式必然居其一。Pod使用的serviceAccount,只有这一种方式。

授权方式只有一种:RABC 基于角色的授权方式

以dashboard为例,要连接k8s,可以使用 kubeconfig(即x509客户端证书) 或者 token 两种方式

Kubernetes_认证授权_初识认证授权_kubernetes_02

总结

授权认证包括三个知识点:userAccount、ServiceAccount、RBAC
其中,认证包括 userAccount 和 ServiceAccount,授权就是 rbac 授权

对于人来说,有多种方式连接 k8s 集群(即通过apiserver授权认证),无论是使用 打开匿名权限、bearer token方式、x509客户端证书,底层都是userAccount,都是具体的某个 user/userGroup 绑定了 role,才有权限操作k8s集群的;

对于pod来说,只有一种方式连接 k8s 集群(即通过apiserver授权认证),就是 serviceAccount , 但是可以是新建集群默认创建的serviceAccount,也可以是自定义的 serviceAccount 账号,不同的serviceAccount区别在于绑定的role权限不同, serviceAccount 又使用 secret 来存储。

用户账号一条线,三种连接集群方式 (要搞懂这三种方式都在哪里)

参考资料(UserAccount用户账号):

https://www.bookstack.cn/read/kubernetes-1.23-zh/c4de5a6a61b3a360.md#%E5%9C%A8%E8%AF%B7%E6%B1%82%E4%B8%AD%E6%94%BE%E5%85%A5%E6%8C%81%E6%9C%89%E8%80%85%E4%BB%A4%E7%89%8C https://zhuanlan.zhihu.com/p/554346291

对于服务账号一条线,只有sa账号一种方式来连接集群,需要搞懂:

  1. ServiceAccount和Secret的关系
  2. 熟练使用两种方式:默认的serviceAccount,自定义的ServiceAccount

serviceAccount和secret的关系参考资料: