前两种都是服务器验证了客户端。但是客户端并没有验证服务器的真实性。
https证书认证。
补充:kubelet和kubectl的区别
kubelet:运行在cluster所有节点上,负责启动POD和容器
Kubelet:master派到node节点代表,管理本机容器
一个集群中每个节点上运行的代理,它保证容器都运行在Pod中
负责维护容器的生命周期,同时也负责Volume(CSI) 和 网络(CNI)的管理
kubeadm:用于初始化cluster
kubectl:kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件
通过kubectl能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署
pod也访问api server比如coredns
因为都是kubeadm安装的 所以没有手动签发 都是自动签发的
就是集群认证信息的填充。
是个隐藏文件
还有证书信息以及私钥信息
包含集群的访问方式以及认证信息
如果是pod访问api server就需要借助sa
可以看到两种类型的secret
service Account:对于有些pod需要和api-server交互。比如flannel,coredns。但是api-server不是谁都可以访问的,对于pod来说就是通过service Account方案。
Opaque:编码加密方式的
dockerconfigjson:私有仓库去下载镜像,会有一些认证方案。这个认证是由docker 仓库完成的。需要嵌入用户名和密码信息。就可以通过该方式保存私有仓库认证的用户名和密码。让他在下载镜像的时候自动达成注入的方案。
第一种是由kubernets自动创建的,所以看下使用即可。
每一个命名空间下都会有一个自定义的secret
授权
资源就是deployment,pod,cpu,内存等资源
非资源就是原数据信息,比如pod的状态。
rbac都可以授予对应的权限。覆盖全面。
比如creat动作创建一个pod就是role,rolebinding就是吧role角色赋予给用户或者组或者sa,
比如创建一个role是readpod,在默认空间。将其敷于给角色zhangsan就是一个rolebinding的过程。
比如想要在不同命名空间下创建多个一样role很麻烦
所以创建一个cluserrole可以读取所有命名空间下的pod的信息。
直接通过rolebinding将cluserrole赋予给用户wangwu 和zhaoliu
相当于资源的下方
cluserRole里面管理了很多个角色(角色有相应的权限),进行RoleBinding操作,把相对应的角色赋予给某人。
将cluserRole通过CluserRoleBinding绑定给wangyang 那wangyang就有访问所有pod的权限。
可以狭义的理解为cluserrole包含全部的role
表示定义一个pod-reader的Role,规则就是如果不写组表示所有的核心组API group,对pod类型支持get,获取,监听和列出的动作。如果吧这个rule赋予给某个用户就表示这个用户就可以在default命名空间下对pod进行获取等动作。
apiVersion集群的访问接口
表示就是如果吧这个cluserrole赋予给某个用户,某个用户进行cluserRolebind绑定的话,该用户就可以在所有的命名空间下对secrets进行获取,监控,列出等操作。
RoleBinding可以绑定role和cluerrole
但是clusterRoleBInding只能绑定cluserRole
subject:对象类型
授予的api组是xxx
赋予的role类型就是pod-reader,以及进行这个role时的api组
manager组调用的api 接口
如果只有pods/log表示仅仅能看pod的日志信息
实操
一个k8s集群 比如运行很多程序
一组mysql集群。一组nginx集群
两个项目组 一个是dba. 一个是系统普通管理员sa
需要资源分割
现在比如一个用户devuser可以管理dev名称空间下的所有资源
直接使用这个用户登陆进去后访问k8s是访问不了的
需要创建改用户的证书访问信息
1.创建证书请求
用户名为devuser。组是K8s,rsa算法 2048位,host代表可以使用的主机,不写代表所有。
json方式
目录随意
证书请求
创建证书,一般情况下证书信息放在该目录下,所以切换。 -bare生成的证书文件名字
证书私钥和证书都好了
指定server
指定ca证书
指定是否需要加密的认证
指定服务器信息
创建devuser.kubeconfig的文件
就可以看到集群信息的信息以及证书等。
多了客户的信息
就是帮忙绑定到一个命名空间
需要首先创建该命名空间
写入xx文件中
可以看到又被写入一些命名空间信息
admin可以在任何命名空间下为所欲为,因为是管理员
所以该命令就是吧admin进行rolebinding,绑定到dev的名称空间,代表devuser用户可以在dev空间下为所欲为。
在此用户下建立目录
将kubeconfig拷贝过来
现在还是不能访问集群的 因为没有切换上下文
该命令其实就是让kubectl读取config信息
创建一个pod
该用户就仅仅在dev空间下具有所有的权限。