一、RBAC概述
1,k8s集群的交互逻辑(简单了解)
我们通过k8s各组件架构,知道各个组件之间是使用https进行数据加密及交互的,那么同理,我们作为“使用”k8s的各种资源的使用者,也是通过https进行数据加密的;
k8s通过我们家目录下的证书来判断我们是谁?通过证书内容来认定我们的权限;
用户证书的位置
2,k8s的安全架构(简单了解)
3,RBAC用户授权的逻辑(重要)
用户/主题Topic
1,User
2,SerciceAccount
3,Group
用户角色:
1,Role:局部资源角色
2,ClusterRole:全局资源角色
角色绑定:
1,RoleBinding
2,ClusterRoleBinding
4,查看现有的集群默认角色
二、流程介绍
1,用户的创建流程
本质上讲,在k8s系统中,用户,就是一个文件,这个文件在当前登录用户的家目录下;
这个文件config,就代表“我”是谁;
这里面并没有角色、权限信息,角色和权限信息,在其他位置;
所以,要创建用户,就是要创建这个文件;
那么如何创建这个文件呐?
· ssl流程介绍
知道了ssl原理,https请求过程,我们就了解了,ssl的安全机制;
实际上k8s当中“根证书”早就生成好了,在我们kubeadm部署的时候,就自动帮我们生成了;
k8s是模拟ca机构,给自己颁发证书,自己验证自己,所以,整数中有私钥、公钥等;
· 生成用户证书
一个用户一个证书,这个用户证书,就是用来生成,用户文件的(也就是家目录下的config)
· 生成kubeconfig用户授权文件
有了这个授权文件,我们就拥有了一个用户了;
但是,还没有任何权限,还无法使用;
2,创建角色和规则
通过资源清单的方式,创建角色和规则;
角色就是:
规则就是:这个角色的权限;能使用什么资源、不能使用什么资源,,,,
3,角色与用户的绑定
根据角色的不同,创建资源清单,对应不同的绑定资源清单的编写;
只要角色和用户绑定完成,那么,RBAC的整个流程就结束了;
我们就成功创建了一个带有特定权限的用户;就可以分发给“同事”进行使用了;
4,逻辑流程的总结
三、RBAC创建初体验
1,创建用户【user】
· 生成用户ssl证书
以往我们使用openssl的工具命令生成证书,比较繁琐,本次学习,我给大家介绍一个证书生成工具,叫做cfssl证书生成工具;
1,上传/下载cfssl证书生成工具
cfssl工具百度网盘地址:
链接:https://pan.baidu.com/s/1gDRQuxekvgInplLkpjvhQw?pwd=f31x
提取码:f31x
或者去github地址下载:Releases · cloudflare/cfssl · GitHub
2,解压cfssl工具压缩包
3,删除压缩包,将cfssl文件改名
为什么改名?为了便于使用~如果你不嫌费力,可以不改~
4,将cfssl文件编程全局命令
将这三个文件,移动到/usr/local/bin目录下,编程全局命令~
5,给cfssl执行文件加执行权限
6,编辑cfssl工具的生成用户ssl证书的配置文件
根证书
客户端验证签名证书
7,使用cfssl工具生成用户的ssl证书
参数解释:
查看证书
至此,我们用户的ssl证书申请完毕了;
· 生成用户kubeconfig文件
1,编辑生成kubeconfig文件的执行脚本
2,执行生成kubeconfig用户文件的执行脚本
正式生成用户
查看生成的kubeconfig用户文件
拓展知识:也可以使用config资源清单编写生成用户kubeconfig文件
此时使用这个用户,取查看pod,会提示你没有权限,因为咱们还没有创建、绑定角色;
至此,我们用户“xinjizhiwa”就创建完成了;
2,创建角色编写规则
· 编辑角色资源清单
上述内容中,我们知道,角色有两种,一种是全局角色ClusterRole,另一种是局部角色Role;
我们先创建一个局部的Role角色作为学习;
· 创建角色
查看角色
至此,用户和角色及规则都创建成功了;
3,绑定用户与角色
· 编辑绑定资源清单
· 创建绑定资源
4,测试用户
协议个pod资源,使用用户“xinjizhiwa”创建,发现创建不了,提示权限不够;
因为,我们在创建角色规则的时候,只给了删除、和查看的能力,没有给create创建能力;
因为我们有default默认名称空间的查看、删除权限,所以我们可以进行查看;
测试查看功能
测试删除功能
到此,普通用户的创建、角色绑定、角色配置就学习完毕了;
四、其他节点使用用户登录操作k8s
我们有了用户文件,将用户文件发送给“同事”,同事直接使用这个文件,就可以按照绑定的规则,操作k8s资源了;
1,模拟将用户文件发给同事
比如,同事正在使用k8s233,我们把用户文件发给他
2,同事在k8s233使用用户文件操作k8s资源
3,操作资源不指定文件,默认指定设置
五、用户组Group案例
1,用户组的概念
2,创建用户组Group
· 编辑cfssl证书请求文件
· 生成用户组证书
再次声明,你创建的是用户、还是用户组,取决于你的证书名称选择的签名字段,选择的是CN还是o;
· 编辑脚本生成用户组kubeconfig用户组文件
· 执行脚本生成用户组文件
3,创建角色、绑定用户组
· 编辑资源清单
· 创建用户组kubeconfig文件
此时,我们就拥有了xinjizhiwa-group这个用户组了;
4,创建用户加入用户组
· 创建用户
生成用户证书
· xjzw用户加入用户组
1,编辑生成kubeconfig用户文件的执行脚本
2,执行脚本
5,测试用户是否拥有用户组的权限
总结,只要拥有了用户组,我们创建用户的时候,签名中“O”字段,与用户组名相同,那么创建出来的用户,就拥有了用户组的权限,就不在需要配置角色、绑定了;方便了很多;
六、基于【服务账号serviceaccount】授权
serviceaccount用户,简称sa资源,用于自动化程序的用户创建;
创建sa用户,就不需要使用证书来创建了,它是k8s集群中的一个资源,sa资源;
1,创建sa资源
· 声明式创建
查看sa服务账号
· 响应式创建
查看sa用户
2,授权python程序对k8s-API的访问权限
· 创建用户
· 创建角色
· 绑定sa账号和角色
3,部署一个python的pod资源
4,进入pod中执行python代码
至此,关于k8s的RBAC的学习,就此结束;