如何创建自定义权限的kubeconfig
如何创建自定义权限的kubeconfig
- 有些小伙伴问如何做自定义权限的kubeconfig
- 首先看下我们怎么了解我们控制的权限的api以及涉及的资源和动作权限从哪里可以轻松查看
- 了解了上面的,接下来就简单了,和简单的授权流程一致
- 1、创建一个账户
- 2、创建想要的角色或集群角色
- 3、将账户绑定到创建的角色或集群级别角色
- 4、创建这个账户的kubeconfig
有些小伙伴问如何做自定义权限的kubeconfig
这里就用通俗的语言简单描述下如何做一个符合自己权限需求的kubeconfig方便权限控制等等。
首先看下我们怎么了解我们控制的权限的api以及涉及的资源和动作权限从哪里可以轻松查看
使用命令kubectl api-resources -o wide
# kubectl api-resources -o wide
NAME SHORTNAMES APIVERSION NAMESPACED KIND VERBS CATEGORIES
bindings v1 true Binding create
componentstatuses cs v1 false ComponentStatus get,list
configmaps cm v1 true ConfigMap create,delete,deletecollection,get,list,patch,update,watch
上面的输出中:
NAME字段就是对应的resources,如configmaps,对应权限设置中就是resources:configmaps
APIVERSION字段就对应我们权限设置中apiGroups,如v1对应的就是apiGroups:“”,如果是apps/v1就对应apiGroups:“apps”,v1不写
NAMESPACED字段如果是true,做非全局的权限就需要注意
VERBS字段就对应了相应的动作权限,如输出内容的configmaps的VERBS就对应create,delete,deletecollection,get,list,patch,update,watch这些动作
了解了上面的,接下来就简单了,和简单的授权流程一致
1、创建一个账户
2、创建一个又特定权限集的角色或集群级别角色
3、将账户绑定到创建的角色或集群级别角色
4、创建这个账户的kubeconfig
下面一步一步来实现
1、创建一个账户
在你需要的ns创建你定义的名字的serviceaccounts
kubectl create sa xxxxx -n xxxxx
这里注意1.24后需要自己给sa手动创建token,如果是1.24前的版本会自动生成,这里针对1.24后的给个yaml样例
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: my-sa-token
namespace: xxxxx
annotations:
kubernetes.io/service-account.name: "my-sa"
使用kubectl去apply下手动建sa的token
2、创建想要的角色或集群角色
这里给个集群角色的yaml样例
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: myclusterrole
annotations:
labels:
rules:
- apiGroups:
- "*" #如果*就是所有
resources:
- "*" #如果*就是所有
verbs:
- list
- get
- watch
- apiGroups:
- apps
resources:
- deployments
verbs:
- list
- get
- watch
- patch
这个文件apply后就是创建了一个叫myclusterrole的集群角色对所有资源都有list get watch的权限,对deployments还额外拥有patch权限。
其实你这里如果少给了权限,在你使用创建的kubecong去执行相应命令时也会有具体的提示。
3、将账户绑定到创建的角色或集群级别角色
这里也给出一个将sa绑定到集群级别角色的yaml样例
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: myclusterrolebinding
annotations:
labels:
subjects:
- kind: ServiceAccount
name: xxx
namespace: xxxxx
roleRef:
kind: ClusterRole
name: myclusterrole
apiGroup: rbac.authorization.k8s.io
4、创建这个账户的kubeconfig
#获取集群ca证书
kubectl get secret my-sa-token -n xxxx -oyaml |grep ca.crt: | awk '{print $2}' |base64 -d > ca.crt
#给kubeconfig设置访问集群
kubectl config set-cluster xxxxxx --server=https://xxxxxx:6443 --certificate-authority=ca.crt --embed-certs=true --kubeconfig=xxxxx.config
#获取所创sa的token,或者用第二条命令直接把值赋给变量token
kubectl describe secret my-sa-token -n xxxxxx | awk '/token:/{print $2}'
token=$(kubectl describe secret my-sa-token -n xxxxx | awk '/token:/{print $2}')
#给kubeconfig设置用户
kubectl config set-credentials sa的名字 --token=$token --kubeconfig=xxxxx.config
#给kubeconfig设置上下文
kubectl config set-context sa的名字@集群名 --cluster=集群名 --user=sa的名字 --kubeconfig=xxxxx.config
#给kubeconfig设置当前上下文
kubectl config use-context sa的名字@集群名 --kubeconfig=xxxxxconfig
#好了可以拿着xxxxxconfig去测试权限是否符合你需求了