Kubernetes(十七)RBAC一user

一    RBAC的概念

RBAC是基于角色访问控制(Role-Based Access Control)

通俗的讲:

1)先定义某个'角色-->role'能做的事情-->'actions'-->'verbs'

2)再将这个角色'授予'某个人-->'授权'-->'授权的动作如何表现'

3)当'人-->user'做这些事情的时候,'校验'他的凭证'token'里面是否'携带了'对应的'角色',如果有对应的角色,则'鉴权成功',允许它做

备注: 更常用的方法是,将'role'和'用户组'绑定,给用户授权的时候,直接将用户'加入对应的用户组'即可

案例讲解

1) 定义一个'Role'-->name=admin,拥有这个'角色的用户'能够'调用'所有的'ECS API'

2) 授权给'wzj':把'admin'放入一个用户组'ECS_Admin',再将'wzj'放入用户组

3) 鉴权:'wzj'获取自己的访问凭证'token',使用凭证调用'ECS API'创建虚拟机,ECS服务解析凭证,并校验凭证'role'字段中是否含有'admin',若有则'同意'该次调用

二    k8s中RBAC的应用

开启RBAC

Java中的RBAC

之前写过的一篇简介文章

subject -->'用户、group、serviceaccount的综合'

说明: kubectl上'会绑定user',kubectl就是一个工具

三   案例讲解

(1)需求1

创建一个 'User Account-->普通用户',只能'only'访问 'kube-system' 这个命名空间,对应的'用户信息'如下所示

username: wzj

group: home

①  创建用户凭据

[root@master userrbac]#  'openssl genrsa -out wzj.key 2048'
Generating RSA private key, 2048 bit long modulus
...................................+++
........................+++
e is 65537 (0x10001)
[root@master userrbac]# 'ls'
'wzj.key'

②  使用我们刚刚创建的私钥创建一个证书签名请求文件wzj.csr

要注意需要确保在'-subj参数'中指定'用户名和组'-->'CN表示用户名,O表示组'
[root@master userrbac]# openssl req -new -key wzj.key -out wzj.csr -subj "/CN=wzj/O=home"
[root@master userrbac]# ls
'wzj.csr'  wzj.key

③  ca.crt 和 ca.key两个文件来批准上面的证书请求,生成最终的证书文件

[root@master userrbac] openssl x509 -req '-in wzj.csr' -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial '-out wzj.crt' -days 500
Signature ok
subject=/CN=wzj/O=home
Getting CA Private Key
[root@master userrbac]# ls
'wzj.crt'  wzj.csr  wzj.key

④  使用刚刚创建的证书文件和私钥文件在集群中创建新的凭证上下文(Context)

'证书-->crt'和'私钥-->key'文件
[root@master userrbac]# kubectl config set-credentials wzj --client-certificate=wzj.crt --client-key=wzj.key --embed-certs=true
User "wzj" set -->'提示信息'

把证书嵌入到yaml文件中-->'--embed-certs=true'

⑤ 创建上下文

我们可以看到一个'用户 wzj' 创建了,然后为这个用户'设置新的 Context',我们这里'指定特定'的一个 namespace

+++++++++++++++ '分割线' +++++++++++++++

[root@master userrbac]# kubectl config set-context wzj-context --cluster=kubernetes --namespace=kube-system --user=wzj
Context "wzj-context" created.

备注: 为'哪个用户-->user'设置上下文,上下文的名称'wzj-context',针对哪个集群'kubernetes'的命令空间'namespace'

注意: 'wzj-context'这个上下文关联的是'wzj'这个用户

⑥  测试

重点: ""表示是'核心组-->core'、资源'pods'、权限'list'

注意看'日志报错'

⑦  创建角色

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: wzj-role
  namespace: kube-system
rules:
- apiGroups: [""]          -->'操作资源所在的用户组;一个资源可能有多个用户组' -->'空串表示core'
  resources: ["pods"]
  verbs: ["list"]

+++++++++++++++ '分割线'

创建的role,和用户'wzj'没有任何关系,所以需要把'user和角色'绑定

⑧  角色绑定

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: wzj-rolebinding
  namespace: kube-system
subjects:
- kind: User   -->'三种类型中的一种'
  name: wzj    -->'用户的名称'
  apiGroup: ""
roleRef:
  kind: Role
  name: wzj-role
  apiGroup: rbac.authorization.k8s.io  'Role的'

⑨  运行

⑩  测试

context'已经包含namespace' -->如果不指定'ns',默认就是kube-system

user专门是给'kubectl工具'使用的

多个的形式

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值