认证用于身份鉴别,而授权则实现权限分派。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认证与授权的更多相关文章

  1. k8s 基于RBAC的认证、授权介绍和实践

    在K8S中,当我们试图通过API与集群资源交互时,必定经过集群资源管理对象入口kube-apiserver.显然不是随随便便来一个请求它都欢迎的,每个请求都需要经过合规检查,包括Authenticat ...

  2. (十二)Kubernetes 认证、授权与准入控制

    访问控制概述 API Server作为Kubernetes集群系统的网关,是访问和管理资源对象的唯一入口:包括kube-controller-manager.kube-scheduler.kubele ...

  3. 8.k8s.认证与访问控制

    #K8S认证与访问控制(RBAC) 用户证书创建 #k8s认证 #主要认证 方式 http token.https证书 k8s不提供用户管理,API Server把客户端证书的CN字段作为User,把 ...

  4. OAuth2.0认证和授权原理

    什么是OAuth授权?   一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密 ...

  5. MVC 登录认证与授权及读取登录错误码

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    最近在自学MVC,遇到的问题很多,索性一点点总结下 ...

  6. Python+Django+SAE系列教程17-----authauth (认证与授权)系统1

    通过session,我们能够在多次浏览器请求中保持数据,接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们须要认证. 当然了,Django 也提供了 ...

  7. hOAuth2.0认证和授权原理

    原文地址: http://www.6zou.net/tech/what_is_oauth.html http://www.phpddt.com/%E4%BA%8C%E6%AC%A1%E5%BC%80% ...

  8. Open开发平台,认证,授权,计费

    1.申请appid和appkeyhttp://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0 appid:应用的唯一 ...

  9. 用户登录安全框架shiro—用户的认证和授权(一)

     ssm整合shiro框架,对用户的登录操作进行认证和授权,目的很纯粹就是为了增加系统的安全线,至少不要输在门槛上嘛. 这几天在公司独立开发一个供公司内部人员使用的小管理系统,客户不多但是登录一直都是 ...

随机推荐

  1. mysql数据库之视图、触发器

    视图 概念:通过查询得到的一张虚拟表,然后保存下来就是视图 视图的好处:如果要频繁使用某张虚拟表,那么就可以保存为视图,以后查找就直接拿这个视图就会非常方便 视图语法规则: create view t ...

  2. python列表的切片与复制

    切片,即处理一个完整列表中部分数据. 语法 变量[起始索引:终止索引:步长] 首先创建一个字符串列表 >>> cars = ['toyota', 'honda', 'mazda', ...

  3. jdk1.8 -- stream 的使用

    一.stream介绍 stream 是jdk 一个加强的api操作,翻译过来就是流的意思,主要是对Collection 集合的一些操作,流一但生成就会有方向性,类似于自来水管的水流一样,不可以重复使用 ...

  4. python 下安装pymysql应用

    前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文测试python版本:2.7.11. ...

  5. 杭电2019多校第一场,Problem I,String 2019

    题目描述 Tom has a string containing only lowercase letters. He wants to choose a subsequence of the str ...

  6. ModbusTCP报文详解【一】

    [1]功能码01H [2]功能码02H [3]功能码03H [4]功能码04H

  7. 12 Mysql之工作中常用操作

    Mysql 专题讲解 一.用户创建与权限管理 a)  创建和删除用户 创建用户: CREATE USER jack@localhost; UPDATE USER SET password=passwo ...

  8. requests 抓取网站

    import requests from requests.exceptions import RequestException import re import json def get_one_p ...

  9. Android Jetpack之WorkManager: 观察结果

    在使用WorkManager的时候,有时候需要关注任务执行的结果和状态,可以使用 LiveData<WorkInfo> liveOpStatus = WorkManager.getInst ...

  10. Fescar锁和隔离级别的理解

    前几天夜里,我老大发我一篇文章说阿里的GTS开源了. 因为一直对分布式事务比较感兴趣,立马pull了代码,进行阅读.基本的原理,实现方案我就不一一细化了,详细见官方文档(写的很棒,点赞). 在fesc ...