k8s认证与授权
认证用于身份鉴别,而授权则实现权限分派。k8s以插件化的方式实现了这两种功能,且分别存在多种可用的插件。另外,它还支持准入控制机制,用于补充授权机制以实现更精细的访问控制功能。
一、访问控制概述
apiserver作为k8s集群系统的网关,是访问及管理资源对象的唯一入口,余下所有需要访问集群资源的组件,包括kube-controller-manager、kube-scheduler、kubelet和kube-proxy等集群基础组件、CoreDNS等集群的附加组件以及此前使用的kubectl命令等都要经由此网关进行集群访问和管理。这些客户端均要经由apiserver访问或改变集群状态并完成数据存储,并由它对每一次的访问请求进行合法性检验,包括用户身份鉴别、操作权限验证以及操作是否符合全局规范的约束等。所有检查均正常且对象配置信息合法性检验无误后才能访问或存入数据于后端存储系统etcd中。
客户端认证操作由apiserver配置的一到多个认证插件完成。收到请求后,apiserver依次调用为其配置的认证插件来认证客户端身份,直到其中一个插件可以识别出请求者的身份为止。授权操作由一到多授权插件进行,它负责确定那些通过认证的用户是否有权限执行其发出的资源操作请求,如创建、删除或修改指定的对象等。随后,通过授权检测的用户所请求的修改相关的操作还要经由一到多个准入控制插件的遍历检测。
1、用户账户与用户组
k8s并不会存储由认证插件从客户端请求中提取出的用户及所属组的信息,他们仅仅用于检测用户是否有权限执行其所请求的操作。客户端访问api服务的途径通常有三种:kubectl、客户端库或者直接使用rest接口进行请求,而可以执行此类请求的主体也被k8s分为两类:现实中的人和pod对象,它们的身份分别对应于常规用户和服务账号。
useraccount(用户账号):一般是指由独立于k8s之外的其他服务管理的用户账号,例如由管理员分发的密钥、keystore一类的用户存储、甚至是包含用户名和密码列表的文件等。k8s中不存在表示此类用户账号的对象,因此不能被直接添加进k8s系统中。
serviceaccount(服务账号):是指由k8sapi管理的账号,用于为pod之中的服务进程在访问k8sapi时提供身份标识。serviceaccount通常要绑定与特定的名称空间,它们由apiserver创建,或者通过api调用手动创建,附带着一组存储为secret的用于访问apiserver的凭据。
useraccount通常用于复杂的业务逻辑管控,它作用于系统全局,故其名称必须全局唯一。相比较来说,serviceaccount隶属于名称空间,仅用于实现某些特定的操作任务,因此要轻量得多。这两类账号都可以隶属于一个或多个用户组。用户组只是用户账号的逻辑集合,它本身并没有操作权限,但附加于组上的权限可由其内部的所有用户继承,以实现高效的授权管理机制。
system: unauthenticated: 未能通过任何一个授权插件检验的账号,即未通过认证测试的用户所属的组。
system:authenticated: 认证成功后的用户自动加入的一个组,用于快捷引用所有正常通过认证的用户账号。
system:serviceaccounts:当前系统上的所有service account对象。
system:serviceaccounts:<namespace>:特定名称空间内所有的serviceaccount对象。
api请求要么与普通用户或服务账户进行绑定,要么被视为匿名请求。这意味着集群内部或外部的每个进程,包括由人类用户使用的kubectl,到节点上的kubelet,再到控制平面的成员组件,必须在向api服务器发出请求时进行身份验证,否则即被视为匿名用户。
2、认证、授权与准入控制基础
api server处理请求的过程中,认证插件负责鉴定用户身份,授权插件用于操作权限许可鉴别,而准入控制则用于在资源对象的创建、删除、更新或连接操作时实现更精细的许可检查。
kubernetes使用身份验证插件对api请求进行身份验证,支持的认证方式包括客户端证书、承载令牌、身份验证代理或http basic认证等。api server接收到访问请求时,它将调用认证插件尝试将以下属性与访问请求相关联。
Username: 用户名,如kubernetes-admin等。
UID:用户的数字标签符,用于确保用户身份的唯一性。
Groups:用户所属组,用于权限指派和继承
Extra:键值数据类型的字符串,用于提供认证时需要用到的额外信息。
api server支持同时启用多种认证机制,但至少应该分别为service account和user account各自启用一个认证插件。同时启用多种认证机制时,认证过程会以串行的方式进行,直到一种认证机制成功完成即结束。若认证失败,则服务器会响应401状态码,反之,请求者就会被识别为某个具体的用户,并且随后的操作都将以此用户身份来进行。
k8s认证与授权的更多相关文章
- k8s 基于RBAC的认证、授权介绍和实践
在K8S中,当我们试图通过API与集群资源交互时,必定经过集群资源管理对象入口kube-apiserver.显然不是随随便便来一个请求它都欢迎的,每个请求都需要经过合规检查,包括Authenticat ...
- (十二)Kubernetes 认证、授权与准入控制
访问控制概述 API Server作为Kubernetes集群系统的网关,是访问和管理资源对象的唯一入口:包括kube-controller-manager.kube-scheduler.kubele ...
- 8.k8s.认证与访问控制
#K8S认证与访问控制(RBAC) 用户证书创建 #k8s认证 #主要认证 方式 http token.https证书 k8s不提供用户管理,API Server把客户端证书的CN字段作为User,把 ...
- OAuth2.0认证和授权原理
什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密 ...
- MVC 登录认证与授权及读取登录错误码
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 最近在自学MVC,遇到的问题很多,索性一点点总结下 ...
- Python+Django+SAE系列教程17-----authauth (认证与授权)系统1
通过session,我们能够在多次浏览器请求中保持数据,接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们须要认证. 当然了,Django 也提供了 ...
- hOAuth2.0认证和授权原理
原文地址: http://www.6zou.net/tech/what_is_oauth.html http://www.phpddt.com/%E4%BA%8C%E6%AC%A1%E5%BC%80% ...
- Open开发平台,认证,授权,计费
1.申请appid和appkeyhttp://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0 appid:应用的唯一 ...
- 用户登录安全框架shiro—用户的认证和授权(一)
ssm整合shiro框架,对用户的登录操作进行认证和授权,目的很纯粹就是为了增加系统的安全线,至少不要输在门槛上嘛. 这几天在公司独立开发一个供公司内部人员使用的小管理系统,客户不多但是登录一直都是 ...
随机推荐
- 01trie
前置芝士 二进制,tire 平衡树 一种数据结构,来维护一些数,需要支持以下操作: 1.插入 xx 数 2.删除 xx 数(若有多个相同的数,因只删除一个) 3.查询 xx 数的排名(排名定义为比当前 ...
- Servlet 过滤器和异常处理
Servlet 编写过滤器 Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息.可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servl ...
- P1417 烹调方案(思维+01背包)
(点击此处查看原题) 题意 有n种食材,每种食材有三个属性,ai,bi和ci,如果在t时刻完成第i样食材则得到ai-t*bi的美味指数,用第i件食材做饭要花去ci的时间.问在T时间内,什么样的烹调方案 ...
- Python接口开发小知识
关于数据库设计 接口开发多学习数据库表操作,这是要点 不存在删除数据,每个可能被删除数据的表加一个is_active属性 不同的表可以有多个相同的字段,字段属性少用禁止非空 不要设置太多主外键(高内聚 ...
- flask 接收参数小坑
前后端分离: 1.get方式: items = dict(request.args.items()) app_name = items["app_name"].strip() 或 ...
- Sublime Text 3配置浏览默认路径为localhost
1.在 Sublime Text 3 中,安装 SideBarEnhancements 侧边栏增强插件.(注意:安装插件之前需要安装包管理工具,参考这里) 2.SideBarEnhancements ...
- golang(7):文件读写 & json & 错误处理
终端读写 操作终端相关文件句柄常量 os.Stdin // 标准输入 os.Stdout // 标准输出 (输出到终端) os.Stderr // 标准错误输出 (输出到终端) fmt 常见用法 fm ...
- The method getContextPath() from the type HttpServletRequest
在做java项目开发的时候,jsp页面很容易报出这个错误. 错误的原因很多,但是都和JRE有关. 一般在导入项目的时候容易报出这个错误,主要因为JRE(jdk版本不一致). 解决方法:就是重新配置路径 ...
- LeetCode:181.超过经理收入的员工
题目链接:https://leetcode-cn.com/problems/employees-earning-more-than-their-managers/ 题目 Employee 表包含所有员 ...
- vue入门:(模板语法与指令)
vuejs使用及HTML的模板语法,可以实现声明式将DOM绑定至底层VUE实例的数据.通过模板语法将数据渲染进DOM的系统,结合响应系统,在应用状态改变时,Vue能够计算出重新渲染组件的最小代价并应用 ...