当前位置: 首页 > article >正文

如何创建自定义权限的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去测试权限是否符合你需求了

http://www.kler.cn/a/552354.html

相关文章:

  • Cursor助力Java开发
  • PHP本地商家卡券管理系统源码
  • DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
  • 等距节点插值公式
  • 统信服务器操作系统V20 1070A 安装docker新版本26.1.4
  • MySQL Workbench 8.0不支持非SSL连接
  • Low code web framework for real world applications, in Python and Javascript
  • Linux中进程的状态3 进程的优先级1
  • Unity 获取独立显卡数量
  • LSTM-SVM故障诊断 | 基于长短期记忆神经网络-支持向量机多特征分类预测/故障诊断Matlab代码实现
  • nginx反向代理jupyter
  • C++中std::condition_variable_any、std::lock_guard 和 std::unique_
  • 【响应式驾考培训网站模板】H5自适应源码下载|含教学管理系统+在线预约功能|多终端适配|可商用授权
  • Spring的BeanFactory和FactoryBean有 什么不同
  • 电动汽车电池监测平台系统设计(论文+源码+图纸)
  • spring分层解耦(springboot)
  • c/c++蓝桥杯经典编程题100道(22)最短路径问题
  • LeetCode-76.最小覆盖子串
  • 蓝桥杯 Java B 组之哈希表应用(两数之和、重复元素判断)
  • 新型基于Go语言的恶意软件利用Telegram作为C2通信渠道