1.k8s集群安全-Role RoleBinding
认证(Authentication)、鉴权(Authoriaztion)、准入控制(AdmissionContorl)三步来保障其安全
Authentication(认证)
1.由一到多个认证插件完成。收到请求后,API Server依次调用为其配置的认证插件来认证客户端身份,直到其中的一个插件可以识别出请求者的身份。
2.认证方式现共有8种,可以启用一种或多种认证方式,只要有一种认证方式通过,就不再进行其它方式的认证。
3.通常启用Client Certs和Service Accout Tokens两种认证方式。
Authorization(授权)
1.由一到多个授权插件进行,负责确定那些通过认证的用户是否有权限执行其发出的资源操作请求,如创建、读取、删除或者修改指定对象等
2.授权方式现共有6种,AlwaysDeny、AlwaysAllow、ABAC、RBAC、Webhook、Node
3.默认集群强制开启RBAC(系统推荐)
Admission Control(准入控制)
通过授权检测的用户所请求的修改相关的操作还要经由一到多个准入控制插件的遍历检测,例如是否违反系统资源限制等
用户和组
用户:UserAccount与ServiceAccount
1.用户账户是针对人而言的。 服务账户是针对运行在 pod 中的进程而言的。
2.用户账户是全局性的,其名称在集群各 namespace 中都是全局唯一的。服务账户是 namespace 隔离的。
3.通常情况下,集群的用户账户可能会从企业数据库进行同步,其创建需要特殊权限,并且涉及到复杂的业务流程。
4.服务账户创建的目的是为了更轻量,允许集群用户为了具体的任务创建服务账户 ( 即权限最小化原则 )。
组
用户账号的逻辑集合。Kubernetes几个内建的用于特殊目的的组:
system:unauthenticated 未通过任何一个授权插件检验的账号会进入该组
system:authenticated 认证成功后的用户自动加入的一个组
system:serviceaccounts 包含当前系统所有的Service Account对象
system:serviceaccounts:<namespace> 包含指定名称空间内所有的Service Account对象
RBAC(Role Based Access Control):基于角色访问控制授权
允许管理员通过Kubernetes API动态配置授权策略。RBAC就是用户通过角色与权限进行关联;
RBAC只有授权,没有拒绝授权,所以只需要定义允许该用户做什么即可;
RBAC包括四种类型:Role、ClusterRole、RoleBinding、ClusterRoleBinding。
Role和ClusterRole:
1.Role是一系列的权限的集合,Role只能授予单个namespace中资源的访问权限。
2.ClusterRole作用于集群中的所有namespace,用于编写集群中的通用规则
RoleBinding和ClusterRoleBinding
1.RoleBinding是将Role中定义的权限授予给用户或者用户组。它包含一个subjects列表(users,groups,service accounts),并引用该Role。
2.RoleBinding对集群中单个namespace进行授权,ClusterRoleBinding对集群中所有namespace进行授权
3.编写ClusterRole,然后在不同的namaspace中使用RoleBinding来引用
访问k8s的API Server的客户端主要分为两类:
kubectl :用户家目录中的 .kube/config 里面保存了客户端访问API Server的密钥相关信息,这样当用kubectl访问k8s时,它就会自动读取该配置文件,向API Server发起认证,然后完成操作请求。
pod:Pod中的进程需要访问API Server,如果是人去访问或编写的脚本去访问,这类访问使用的账号为:UserAccount;而Pod自身去连接API Server时,使用的账号是:ServiceAccount,生产中后者使用居多。
kubectl向apiserver发起的命令,采用的是http方式,其实就是对URL发起增删改查的操作。
$ kubectl proxy --port=8888 &
$ curl http://localhost:8888/api/v1/namespaces/default
$ curl http://localhost:8888/apis/apps/v1/namespaces/default/deployments
以上两种api的区别是:
api它是一个特殊链接,只有在核心v1群组中的对象才能使用。
apis 它是一般API访问的入口固定格式名。
标签:用户,认证,RoleBinding,API,Role,集群,k8s From: https://www.cnblogs.com/lixunblogs/p/18167054