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

K8S相关小技巧《四》

需求:

我作为Kubernetes的集群管理员,前一段时间有收到一个需求,需要我创建一个受限访问的用户kubeconfig,提供给跳板机的某用户。
该kubeconfig需要在非Kubernetes节点的某跳板机上由指定的非root用户使用,该用户仅能访问kubernetes集群中的某一个namespace下的资源,仅对该namespace下的资源有完整的权限。

实现:

前置条件:登录到kubernetes的主节点上,在主节点上做以下步骤。
第一步,准备kubeconfig的模板文件命名为"config-template",以下有一些占位符等,请注意:

apiVersion: v1
clusters:
- cluster:certificate-authority-data: LS0tLS1CRUdJTiBDRVJ....server: http://<your-addr-or-delegate-ip>:6443name: kubernetes
contexts:
- context:cluster: kubernetesuser: $USERnamespace: $NAMESPACEname: $USER@kubernetes
current-context: $USER@kubernetes
kind: Config
preferences: {}
users:
- name: $USERuser:client-certificate-data: $USER_CERT client-key-data: $USER_KEY

注意:关于certificate-authority-data这部分,此处为集群使用的CA证书,不用做修改,保持不变。

第二步,准备用于限制权限的RBAC模板文件,命名为"rb-template",同样有占位符,请注意:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: $USER_NAME-adminnamespace: $NAMESPACE
subjects:- kind: Username: $USER_NAMEapiGroup: rbac.authorization.k8s.io
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: admin

第三步,准备用于生成kubeconfig的脚本,该脚本会使用openssl结合主节点的CA证书和key生成签发kubeconfig所需的certificate和key,替换第一步中的占位符等,请仔细阅读后,用root权限执行:

#! /bin/bash
USER_NAME=<your_jumpserver_username> #请手动更改此处
NAMESPACE=<your_namespace> #请手动更改此处openssl genrsa -out $USER_NAME.key 2048 &&
openssl req -new -key $USER_NAME.key -out $USER_NAME.csr -subj "/CN=$USER_NAME" &&
openssl x509 -req -in $USER_NAME.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out $USER_NAME.crt -days 3650yes | cp config-template config-$USER_NAME
yes | cp rb-template rb-$USER_NAME.yaml
USER_CERT=`openssl base64 -A -in $USER_NAME.crt`
USER_KEY=`openssl base64 -A -in $USER_NAME.key`#USER_CERT=$(echo $USER_CERT)
#USER_KEY=$(echo $USER_KEY)echo $USER_CERT | base64 -d
echo $USER_KEY | base64 -dsed -i "s/\$USER_CERT/$USER_CERT/g" config-$USER_NAME
sed -i "s/\$USER_KEY/$USER_KEY/g" config-$USER_NAME
sed -i "s/\$USER/$USER_NAME/g" config-$USER_NAME
sed -i "s/\$NAMESPACE/$NAMESPACE/g" config-$USER_NAME
sed -i "s/\$USER/$USER_NAME/g" rb-$USER_NAME.yaml
sed -i "s/\$NAMESPACE/$NAMESPACE/g" rb-$USER_NAME.yaml

第四步,经过以上三步,会得到rb-xxx.yaml和config-xxx两个文件,执行以下命令,用于添加rolebinding的权限:

kubectl apply -f rb-xxx.yaml

第五步,将config-xxx的文件拷贝到跳板机的指定用户的家目录下,并放在.kube目录下改名为config,以上四步均在kubernetes的主节点上执行,该步骤需要在跳板机执行,举例如下:

mkdir -p /home/$USER_NAME/.kube
cp config-$USER_NAME /home/$USER_NAME/.kube/config

上一篇:K8S相关小技巧《三》
下一篇:K8S相关小技巧《五》

http://www.lryc.cn/news/308811.html

相关文章:

  • Delphi 报错 Type androidx.collection.ArraySet is defined multiple times
  • Post请求中文乱码问题
  • LeetCode -- 79.单词搜索
  • 单元测试、集成测试、系统测试有什么不同?
  • 数据迁移DTS | 云上MySQL 数据库迁移至达梦数据库
  • Linux进程管理:(二)进程调度原语
  • Compose 介绍
  • 5分钟搞定Python中函数的参数
  • Gitlab: 私有化部署
  • 深入理解Linux线程(LWP):概念、结构与实现机制(2)
  • VBS脚本搞定,快速批量提取一堆Excel文件中的数据
  • 大数据分析案例-基于SVM支持向量机算法构建手机价格分类预测模型
  • WPF 滑动条样式
  • 论文设计任务书学习文档|基于Web的个性化简历职位推荐系统的设计与实现
  • Win11系统安装安卓子系统教程
  • Python实现双向链表:从基础到应用
  • c# 读取DataGridView中的数据
  • Stable Diffusion中的Clip模型
  • Python批量提取文件夹中图片的名称及路径到指定的.txt文件中
  • 微软开源 SBOM 生成工具:sbom-tool下载及使用详解
  • 【办公类-18-03】(Python)中班米罗可儿证书批量生成打印(班级、姓名)
  • js【详解】数据类型原理(含变量赋值详解-浅拷贝)
  • SAM 影像分割——地理空间数据的分段模型的数据调参和自动分割分析
  • Java底层自学大纲_设计模式篇
  • 详解字符串函数<string.h>(上)
  • 1、docker入门
  • Qt应用软件【测试篇】cppchecker静态代码检查
  • [递推与递归]数的计算
  • Cocos Creator 3.8.x 后效处理(前向渲染)
  • 【前端素材】推荐优质后台管理系统 Adminity平台模板(附源码)