权限介绍
k8s的资源访问控制支持多种模式,对于资源的管理模式基于RBAC(role basic access control)。主要涉及到以下个k8s对象类型:
- serviceaccout
- role
- rolebinding
- clusterrole
- clusterrolebinding
role 和 clusterrole 的一个区别在于,role授予的权限只能是在所属的namespace,而clusterrole是全局的。在k8s资源中,有些资源是有namespace scope的,可以通过kubectl api-resources 进行查看
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
对于serviceaccount(以下简称sa)类型的用户,在1.24版本之前,创建sa用户时,会对应生成一个secret用于访问认证,1.24版本之后,官方建议使用kubectl create token serviceaccount来进行生成,可以对token的使用期限,对象进行控制,比较安全。
K8s的资源访问严格遵循resetful风格,从3方面进行资源限制
-
apiGroups
对服务器的api端口进行控制
-
resources
对k8s的资源类型进行控制
-
verbs
对k8s的资源进行操作控制
详细的控制权限可以看官方文档:https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/authorization/
操作实践
笔者的版本为1.26,所以在创建完成sa之后,没有生成对应的secret来存储token,需要使用kubectl create token来进行生成。
以下来进行演示一个role权限
-
创建测试的命名空间
笔者建议使用一个新的命名空间来进行测试
kubectl create ns authority-test
-
创建serviceaccount用户myuser
kubectl create serviceaccount myuser
-
创建role角色myrole并设置权限
kubectl create role myrole kubectl edit role myrole
设置权限规则如下:
rules: - apiGroups: - "*" resources: - '*' verbs: