(一)通过用户账号的方式分配单独Namespace的权限
1.案例描述
创建一个用户,仅拥有对know-system命名空间下的pods、deployments资源操作权限,采用RoleBinding绑定ClusterRole的方式来实现。
大致实现思路:
1.生成用户的证书文件key
2.通过apiserver生成证书请求
3.通过k8s的api的ca证书签发用户的证书请求
4.配置k8s设置集群、创建用户、配置上下文信息
5.创建ClusterRole、RoleBinding资源
2.创建用户账号
3.创建ClusterRole资源设置权限
创建一个ClusterRole,针对资源做一些授权,由于ClusterRole是集群级别的角色授权,可以多次复用
4.创建RoleBinding资源将用户和角色绑定
通过RoleBinding角色绑定将用户与集群角色进行绑定
5.切换knowman用户查看权限
除了deployment、pod资源之前无权操作其他资源
(二)通过kubeconfig授权文件实现特定资源的权限分配
1.案例描述
我们可以使用根证书签发一个客户端证书,在客户端证书里面指定用户名,然后在通过kubectl config命令生成一个kubeconfig授权文件,文件内容中包括了集群信息、用户信息、客户端证书信息,然后再创建一个rbac策略,将证书中的用户与创建的role角色进行绑定,即可实现通过授权文件的方式去访问集群的特定资源
最终实现目的: 将授权文件发给对应的人员,让人员只需kubectl命令的时候指定kubeconfig文件的路径即可请求集群资源
实现步骤:
1.安装cfssl工具,用k8s ca根证书签发一个客户端证书
2.用kubectl config生成授权文件
3.创建rbac授权策略
2.准备cfssl工具命令
3.利用k8s根证书签发一个客户端证书
利用k8s的ca根证书签发一个专门给某个客户端使用的证书
4.生成kubeconfig授权文件
生成一个kubeconfig授权文件,文件的内容和/root/.kube/config文件基本是一致的,只是证书内容不一样,证书内容不同所属的权限也不同,用户可以通过指定kubeconfig文件去执行k8s命令
生成授权文件需要分为三个步骤:设置集群、设置证书私钥文件路径、指定用户名,每当执行一个步骤,kubeconfig的内容就会增加上相应的配置
1.生成授权文件设置集群信息:指定根证书路径、k8sapi地址、授权文件名称
当执行了第一步设置集群信息后,查看kubeconfig的文件内容,会发现文件里面多了根证书ca的文件内容以及集群apiserver的地址
2.设置客户端认证:指定客户端证书文件路径和私钥文件路径
当第二步设置客户端证书认证完成后,kubeconfig文件就会增加客户端证书文件的内容
3.设置默认上下文:指定用户名是什么
第三步执行完成后,kubeconfig文件里面会增加用户信息配置,rbac授权也是将这个用户和某个role进行绑定
5.执行kubectl命令时指定授权文件
使用--kubeconfig
参数去指定使用哪个授权文件,到此时也就可以把授权文件发送给需要使用这个授权的人,虽然现在还是无权限获取资源的状态,但是已经可以连接到k8s集群了,只需要配置好rbac策略,即可有权限访问资源
6.配置rbac策略授权kubeconfig相应的权限
1.编写rbac yaml资源文件
创建一个role,授权对default命名空间下pod、deployment、svc资源的访问权限,并将该role与jiangxl用户进行绑定
2.创建rbac资源
7.验证kubeconfig授权文件是否有了对应的权限
(三)通过Service Account账号授权实现特定资源的权限分配
1.创建一个sa账号
2.编写rbac资源授权yaml文件
3.编写nginx pod资源并使用sa账号
4.创建所有资源并查看
文章来源于:https://blog.51cto.com/jiangxl/5076630
仅做个人备份学习使用.