天天看点

【K8S运维知识汇总】第4天4:rbac原理详解

kube-system下实例了两个deployment,核心资源,一个是coredns,一个是dashboard

【K8S运维知识汇总】第4天4:rbac原理详解

traefik在daemonset里,两个pod控制器需要掌握,daemonset,deployment

【K8S运维知识汇总】第4天4:rbac原理详解

这里使用json格式来展示的yaml

【K8S运维知识汇总】第4天4:rbac原理详解

spec就是真正定义pod控制器的属性,selector就是标签选择器,

【K8S运维知识汇总】第4天4:rbac原理详解

下面就是定义一个template模版,实际上是pod的模版,pod的一些特性就被定义到了pod控制器里,pod资源本身是一组对象,启动参数,内容,挂载,存活性探针都可以定义到pod控制器里

【K8S运维知识汇总】第4天4:rbac原理详解

里面有一堆启动参数

【K8S运维知识汇总】第4天4:rbac原理详解

一个是暴露81端口,一个是用nat的网络8080

【K8S运维知识汇总】第4天4:rbac原理详解

resource是限制你pod的资源的

【K8S运维知识汇总】第4天4:rbac原理详解

从spec到这都是pod特性,可以用explain来看显示的意思

【K8S运维知识汇总】第4天4:rbac原理详解

serviceaccount服务账号,牵扯到了k8s的核心理念,rbac

【K8S运维知识汇总】第4天4:rbac原理详解

基于角色的访问控制,RBAC(role basic access control)

【K8S运维知识汇总】第4天4:rbac原理详解

对一些资源有一些权限(读get,写wirte,更新update,列出list,监视watch),用户就有用户账户,在k8s里有两种账户(用户账户user accoun UA,服务账户 service account SA)。

之前启动kubelet的时候做了一个kubeconfig配置文件,这个kubeconfig配置文件就是用户的配置文件

【K8S运维知识汇总】第4天4:rbac原理详解
【K8S运维知识汇总】第4天4:rbac原理详解

这个名字就是k8s集群里的一个用户账户,用户账户的名字就叫k8s的node

【K8S运维知识汇总】第4天4:rbac原理详解

什么样的账户什么样的权限,这个就是授权的过程,k8s基于角色的访问控制下,无法直接给账户赋予权限,只能通过中间的一个角色,先给用户账户和服务账号先去绑定响应的角色,然后给相应的角色赋予相应的权限,也就是等于中间收个过路费

【K8S运维知识汇总】第4天4:rbac原理详解

角色就完美充当了,账户要想获得集群里相应权限的中间人,无法给账户赋予直接的权限。

【K8S运维知识汇总】第4天4:rbac原理详解

在k8s里有两种角色(role普通角色(只能应用在某一个特定的名称空间下,比如kube-system名称空间,就可以给kube-system里创建相应的角色,如果create一个role资源指定了-n namespace=kube-system,name这个角色只对本名称空间有效),clusterRole集群角色,对集群整个有效)

所以绑定角色操作就有2种,role binding,clusterrolebinding,把账户绑定角色,就称为绑定角色,也是一种资源,也有对应的yaml文件

服务账户是所有在k8s里面运行的pod,是k8s最小的运行单元,所有的pod都必须有一个服务用户service account

【K8S运维知识汇总】第4天4:rbac原理详解

default名称空间,有两个起来的pod

【K8S运维知识汇总】第4天4:rbac原理详解
【K8S运维知识汇总】第4天4:rbac原理详解

对应的镜像是nginx;curl

【K8S运维知识汇总】第4天4:rbac原理详解

只要运行在k8s集群里的pod,就一定有一个服务账户,如果没有显示指定的服务账户,就给你一个默认的服务账户

【K8S运维知识汇总】第4天4:rbac原理详解

traefik的rbac的yaml文件最好看

【K8S运维知识汇总】第4天4:rbac原理详解

第一段配置声明了一个叫service account的服务用户,这个服务用户的名字叫traefik-ingress-controller。名称空间在kube-system。

实际上这段就创建了服务用户

【K8S运维知识汇总】第4天4:rbac原理详解

这一段其实在做clusterRole,相当于去声明一个集群角色,名字叫traefik-ingress-controller。然后定义了一组规则rules:定义角色的同时赋予权限

【K8S运维知识汇总】第4天4:rbac原理详解
【K8S运维知识汇总】第4天4:rbac原理详解

clusterRolebinding集群角色绑定,说白了就是把之前定义的角色和traefik-ingress-controller服务账号关联起来

【K8S运维知识汇总】第4天4:rbac原理详解

metadata是name是集群角色绑定的名字,roleref是参考哪个集群角色是traefik-ingress-controller。

subjects就是集群角色给哪个用户使用,类型是服务用户,和集群角色通过clusterrolebinding这种资源,关联起来了

【K8S运维知识汇总】第4天4:rbac原理详解

所有的rbac文件,无外乎这几步,创建账户,比如traefik是以pod身份在k8s集群工作,所以只能用服务账号。kubelet就不是工作在k8s里的,是在宿主机上二进制部署的,就不能用服务账户,而是用户账户,只能给kubelete做kubeconfig,kubecetl 4部,setuser,set creditals,seyt context ,use context,创建用户账户就需要这四步,实际上就是去创建一个用户账户的配置文件

【K8S运维知识汇总】第4天4:rbac原理详解

traefik是通过pod的方式,交付在k8s里,pod要去取得一定的权限,必须给它创建一个服务账户,第二步就是定义角色去赋予角色相应的权限,就是创建一个clusterRole,就是traefike-ingress-clusterRole。

第三步是绑定角色(账户和角色绑定起来)

这就是RBAC的本质

traefik里的daemonset一定就指定你的service accountname就是你刚才创建的serviceaccount。既然有RBAC,就是让pod具有能够调度k8s里相应资源的能力,相当于创建一个serviceaccount账户,然后给这个账户赋予相应的权限,然后要对这个账户做角色绑定。

在声明traefik控制器 的时候,要显示的指令,serviceaccountname就是traefik-ingress-controller

【K8S运维知识汇总】第4天4:rbac原理详解

dashboard比traefik稍微复杂点

【K8S运维知识汇总】第4天4:rbac原理详解

声明了一个服务账户,叫做kubernetes-dashboard-admin

【K8S运维知识汇总】第4天4:rbac原理详解

下面做了角色绑定,没有做定义角色并赋予权限。做了一个clutserRolbinding的name是kubernetes-dashboard-admin。

roleRef是参考哪个角色,这里参考了默认集群里带有的集群角色cluster-admin,集群管理员

【K8S运维知识汇总】第4天4:rbac原理详解
【K8S运维知识汇总】第4天4:rbac原理详解

默认带有一堆集群角色,有一个默认的集群角色叫cluster-admin

【K8S运维知识汇总】第4天4:rbac原理详解

这个yaml就是定义角色并赋予权限

【K8S运维知识汇总】第4天4:rbac原理详解

名字是cluster-admin

【K8S运维知识汇总】第4天4:rbac原理详解

权限是对所有api组,所有资源,所有权限,也就是具有k8s集群的最高权限

【K8S运维知识汇总】第4天4:rbac原理详解

在dashboard的rbac.yaml里,只做了两件事情,

1.创建了一个新的服务账户service account

2.把创建好的账号和集群中默认的clsuterRole角色,绑定起来

【K8S运维知识汇总】第4天4:rbac原理详解

默认的集群角色,名字是system:node

【K8S运维知识汇总】第4天4:rbac原理详解

对api组里的哪些资源有哪些权限,对哪个资源组里的什么资源有什么权限

【K8S运维知识汇总】第4天4:rbac原理详解
【K8S运维知识汇总】第4天4:rbac原理详解

这个用户是k8s-node,给这个用户账户,去绑定一个集群角色,叫system:node(集群角色)。

真正绑定的时候cluter-node和user之间 关系

【K8S运维知识汇总】第4天4:rbac原理详解

这个dashboard的pod,它的用户账户就是k8s的最高权限

【K8S运维知识汇总】第4天4:rbac原理详解

看一下官方的rbac文件

【K8S运维知识汇总】第4天4:rbac原理详解

声明了一种role资源,这个role资源称为kubernetes-dashboard。名字是kubernetes-dashboard-minimal,说明我们要给dashboard最小化权限

【K8S运维知识汇总】第4天4:rbac原理详解

给了一堆角色的权限

【K8S运维知识汇总】第4天4:rbac原理详解

做了一个roleBinding

【K8S运维知识汇总】第4天4:rbac原理详解

官方的service account写在deployment里了

【K8S运维知识汇总】第4天4:rbac原理详解
【K8S运维知识汇总】第4天4:rbac原理详解

官方也是三步,1.定义service account,2.定义一个普通角色并授予最小化权限,3.把普通角色和最小化权限做了绑定

其实告诉我们dashboard,可以不用集群管理员的形式运行

【K8S运维知识汇总】第4天4:rbac原理详解

kubenetes dashboard可以接受两种配置文件,kubeconfig是普通用户的配置文件(把普通用户做出来,然后把普通用户绑定一个集群角色,这个集群角色可以是自定义的具有某些权限的角色或者集群角色,也可能是用默认的集群角色)

dashboard就要看你登录上来 人具有什么权限

【K8S运维知识汇总】第4天4:rbac原理详解

第二种方法就是用token方式,一个服务账户service account默认会产生一个资源serect

【K8S运维知识汇总】第4天4:rbac原理详解

在default名称空间里可以看secrect

【K8S运维知识汇总】第4天4:rbac原理详解

这就是默认service account的secret

【K8S运维知识汇总】第4天4:rbac原理详解

这就是默认default service的令牌

【K8S运维知识汇总】第4天4:rbac原理详解

如果到kube-system名称空间去,serect其实有很多,有default,有coredns(也声明了serviceaccount,对应一个secret,这个serect里有自己的一个令牌)

【K8S运维知识汇总】第4天4:rbac原理详解

在dashboard-admin这个serviceaccount用户里也有令牌

【K8S运维知识汇总】第4天4:rbac原理详解

继续阅读