安全认证

  • 0.机制说明
  • 1.访问控制概论
  • 2.认证管理
  • 案例一静态令牌认证:手动创建用户让apiserver加载
  • 3.授权管理


0.机制说明

k8s调用本地仓库的镜像_k8s调用本地仓库的镜像

上图:当外部用户(human user)对一个pod 进行操作访问apiserver,首先第一步
认证(authentication),查看你是否是被注册过得用户,然后假如你是get  pod   
的操作,那么就进入到鉴权(authentization),查看你是读还是写,假如是读操
作,那么直接在鉴权环节结束,但是当是写操作,那么要进行准入控制
(admission),查看你的写入操作是否正确,如果全部正确那么写的内容则会被运
行进行到apiserver(这三个程序都在apiserver中,但是是按照插件顺序执行的,
某个对应的插件检查正确才会被下一别执行然后直到最后一步),然后被调用分配到
node上,最后写入到etcd中

当是k8s集群内部的某个pod或service对apiserver进行访问,这种用户叫service 
account ,而这种用户就是k8s内部资源的标准化格式,pod和service的访问是直接
提交到apiserver上,然后k8s根据自己内部的etcd里面存储的信息进行对比认证的
认证:因为系统不是开放给所以用户,因而我们必须确保来访问者是我们当前系统注
册过的用户切允许使用该系统服务或资源的用户,所以他的作用就是注册让该系统识
别的用户

授权(短路模式):即便是该用户进入k8s系统了,但是不同用户所获得的不同资源权
限,对不同级别的用户或不同职能的用户赋予不同的权限

准入控制(只针对用户的写入操作):他起到一个审计的作用,假如当用户在使用控
制器创建资源清单的时候,有错误的参数或者执行不正确的操作,准入控制应当检查
出他的错误,然后进行拦截错误不被写入k8s的apiserver中,定义的某些内容是否合
乎apiserver上面的格式,和一些字段等等,都是有准入控制实现

1.访问控制概论

k8s调用本地仓库的镜像_k8s调用本地仓库的镜像_02


k8s调用本地仓库的镜像_创建用户_03


k8s调用本地仓库的镜像_名称空间_04


k8s调用本地仓库的镜像_双向认证_05

2.认证管理

k8s调用本地仓库的镜像_k8s调用本地仓库的镜像_06

k8s调用本地仓库的镜像_创建用户_07


k8s调用本地仓库的镜像_名称空间_08

k8s调用本地仓库的镜像_创建用户_09


k8s调用本地仓库的镜像_名称空间_10

k8s调用本地仓库的镜像_双向认证_11


k8s调用本地仓库的镜像_名称空间_12


k8s调用本地仓库的镜像_名称空间_13


k8s调用本地仓库的镜像_k8s调用本地仓库的镜像_14

k8s调用本地仓库的镜像_创建用户_15

案例一静态令牌认证:手动创建用户让apiserver加载

第一步:创建密码 账户 UID 所属的组

k8s调用本地仓库的镜像_k8s调用本地仓库的镜像_16

第二步:修改系统kubeapiserver.yaml文件(此步骤为认证),添加引用参数,数据卷进行引用,容器进行挂载

k8s调用本地仓库的镜像_k8s调用本地仓库的镜像_17


案例中的–basic-auth-file= 这个选项在v1.20中已经不支持了,再做测试的时候选用别的测试参数

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-apiserver/ 这里官网可以查看选项参数

k8s调用本地仓库的镜像_名称空间_18

k8s调用本地仓库的镜像_创建用户_19


k8s调用本地仓库的镜像_双向认证_20


k8s调用本地仓库的镜像_创建用户_21


k8s调用本地仓库的镜像_双向认证_22


k8s调用本地仓库的镜像_创建用户_23

----------------------------------------------------

k8s调用本地仓库的镜像_创建用户_24

k8s调用本地仓库的镜像_双向认证_25


k8s调用本地仓库的镜像_k8s调用本地仓库的镜像_26

总结:
0.访问方式有两种,一种是远程组件和近程组件访问apiserver,第二种是pod访问
1.如果是master中的组件(比如Controller Manager.scheduler)访问apiserver一般不需要认证,因为在同一台机器上
2.如果是远程的组件(kubectl、kubelet、kube-proxy)访问apiserver话需要https双向认证证书
3.如果是pod访问apiserver,由于pod经常增删,没必要频繁双向认证的话,那么需要使用sa

k8s调用本地仓库的镜像_双向认证_27

3.授权管理

k8s调用本地仓库的镜像_名称空间_28


k8s调用本地仓库的镜像_名称空间_29

在一个组织里面,具有某些权限的集合定义成一个又一个的角色,然后设定某个用户
可以扮演其中的一到多个角色,然后把用户和角色绑定,进而使用户就拥有了角色所
拥有的对应的系统的授权,RBAC是许可授权,没有拒绝的权限,他允许谁干什么,没
有说拒绝谁干什么,默认拒绝所有

k8s调用本地仓库的镜像_创建用户_30


k8s调用本地仓库的镜像_k8s调用本地仓库的镜像_31


k8s调用本地仓库的镜像_k8s调用本地仓库的镜像_32


k8s调用本地仓库的镜像_名称空间_33


k8s调用本地仓库的镜像_创建用户_34


k8s调用本地仓库的镜像_创建用户_35


授权第一步:创建角色

k8s调用本地仓库的镜像_创建用户_36

上图解释:把这个名为pod-reader的角色赋予给用户之后,这个用户可以在default名称空间下对的pod进行  获取pod信息  监听pod  列出所有pod

第二步:进行绑定

k8s调用本地仓库的镜像_创建用户_37

k8s调用本地仓库的镜像_创建用户_38

上图解释:创建名为secret-reader的集群角色,这个集群角色拥有在所有的名称空间下对secrets进行  get secrets信息  监听secrets  列出所有secrets 的操作

k8s调用本地仓库的镜像_名称空间_39


k8s调用本地仓库的镜像_名称空间_40

上图解释:由于上上个图已经创建了集群角色,名为secret-reader ,然后上图中引
用集群角色,使用roledindig的绑定方式,绑定给Dave用户,仅限于development
名称空间级别下,所以dave用户在development名称空间级别下拥有对旗下的secrets有get    
list  watch的权限

k8s调用本地仓库的镜像_双向认证_41

k8s调用本地仓库的镜像_双向认证_42


k8s调用本地仓库的镜像_双向认证_43


k8s调用本地仓库的镜像_双向认证_44


k8s调用本地仓库的镜像_双向认证_45


k8s调用本地仓库的镜像_创建用户_46


k8s调用本地仓库的镜像_创建用户_47


k8s调用本地仓库的镜像_名称空间_48


k8s调用本地仓库的镜像_双向认证_49


k8s调用本地仓库的镜像_k8s调用本地仓库的镜像_50


k8s调用本地仓库的镜像_创建用户_51


k8s调用本地仓库的镜像_名称空间_52


k8s调用本地仓库的镜像_k8s调用本地仓库的镜像_53


k8s调用本地仓库的镜像_名称空间_54