摘要:k8s集群中有很多pod,它们可能要向集群申请操作一些功能,比如查看pod,创建pv,service等,但是操作之前需要一个身份,也就是说不是随意就可以进行各种操作。
在上一篇中,我们使用NFS插件实现了PV动态分配,在创建插件的过程中创建了三个资源,下面对这三个资源解释一下。
k8s集群中有很多pod,它们可能要向集群申请操作一些功能,比如查看pod,创建pv,service等,但是操作之前需要一个身份,也就是说不是随意就可以进行各种操作。
举个例子:
如果一个Pod里的应用需要调用Kubernetes API查看其他Pod的状态,就必须绑定一个ServiceAccount。这个账号会告诉Kubernetes:“我是某某应用,我有权限看Pod信息”,Kubernetes验证通过后才会允许它操作。
ServiceAccount是一种资源,按照官网的归类为身份认证资源。可以把它类比于账号登录中的账号名,这样方便理解,再看实际的配置代码:
这里创建一个“账号”名为nfs-client-provisioner。
ClusterRole也是一种资源,官网归类为鉴权资源。可以类比登录系统中的“角色”,角色会明确规定能做什么事,下面是实际配置:
下面是详细说明:
对persistentvolumes(持久卷,PV)的权限
资源:persistentvolumes(集群中所有的PV)允许的操作:get、list(列出来)、watch(实时监控变化)、create(创建)、delete(删除)作用:插件需要创建PV来对应PVC的请求,也需要在PVC删除时清理对应的PV,所以需要这些权限。对persistentvolumeclaims(持久卷声明,PVC)的权限
资源:persistentvolumeclaims(所有命名空间的PVC)允许的操作:get、list(列出来)、watch(监控变化)、update(更新状态)作用:插件需要监控PVC的创建/删除请求(比如用户创建了一个PVC,插件要感知到并去创建对应的PV),并在PV和PVC绑定后更新PVC的状态。对storageclasses(存储类)的权限
资源:storageclasses(集群中的存储类)允许的操作:get、list(列出来)、watch(监控)作用:插件需要知道用户使用的存储类配置(比如存储类里定义的NFS服务器地址、路径等),才能按配置创建符合要求的PV。对events(事件)的权限
资源:events(集群中的事件)允许的操作:create(创建)、update(更新)、patch(部分更新)作用:插件在工作中遇到问题(比如创建PV失败)时,需要生成事件记录(类似“日志”),方便管理员排查问题。对endpoints(端点)的权限
资源:endpoints(服务的端点信息)允许的操作:get/list/watch/create/update/patch作用:解决“leader选举”问题(如果插件部署多个副本,需要选一个“主节点”来工作,避免冲突),endpoints用于存储选举产生的“主节点”信息,所以需要这些权限来操作。ClusterRoleBinding也是一种资源,官网归类为鉴权资源。它主要用于给账号绑定角色,下面的配置就将两者进行了绑定。
角色配置完成之后,实际运行的Pod就可以绑定一个账号,那么相应的就具有该账号绑定的角色功能。
来源:恋爱脑一点号