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

脚本一键生成管理下游k8s集群的kubeconfig

一、场景

1.1 需要管理下游k8s集群的场景。

1.2 不希望使用默认的cluster-admin权限的config.

二、脚本

**重点参数:

2.1 配置变量。
        1、有单独namespace的权限和集群只读权限。

        2、自签名的CA证书位置要正确。

2.2 如果配置错误,需要重新生成

进入集群删除CertificateSigningRequest对应的请求CSR

2.3 修改其中的Clusterrole可以修改权限。

2.4 注意每个集群的名称和用户名不能一致。

#!/bin/bash# 配置变量
USERNAME="kody"
CLUSTER_NAME="rke2-01"
NAMESPACE="default"
PERMISSION_LEVEL="cluster-readonly"  # 可选 namespace 或 cluster-readonly
API_SERVER="https://172.31.0.32:6443"  # 指定API服务器地址
CA_CERT_PATH="/var/lib/rancher/rke2/server/tls/server-ca.crt"  # 指定CA证书路径# 生成证书
openssl genrsa -out ${USERNAME}.key 2048
openssl req -new -key ${USERNAME}.key -out ${USERNAME}.csr -subj "/CN=${USERNAME}/O=my-group"# 提交并批准 CSR
cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:name: ${USERNAME}-csr
spec:request: $(cat ${USERNAME}.csr | base64 | tr -d '\n')signerName: kubernetes.io/kube-apiserver-clientexpirationSeconds: 86400usages:- client auth
EOF
kubectl certificate approve ${USERNAME}-csr
kubectl get csr ${USERNAME}-csr -o jsonpath='{.status.certificate}' | base64 -d > ${USERNAME}.crt# 创建 RBAC 权限
if [ "$PERMISSION_LEVEL" == "namespace" ]; thencat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: ${NAMESPACE}name: ${USERNAME}-role
rules:
- apiGroups: ["", "apps", "batch"]resources: ["pods", "deployments", "jobs", "services"]verbs: ["get", "list", "watch", "create", "update", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: ${USERNAME}-role-bindingnamespace: ${NAMESPACE}
subjects:
- kind: Username: ${USERNAME}apiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: ${USERNAME}-roleapiGroup: rbac.authorization.k8s.io
EOF
elsecat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: ${USERNAME}-readonly
rules:
- apiGroups: ["*"]resources: ["*"]verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: ${USERNAME}-readonly-binding
subjects:
- kind: Username: ${USERNAME}apiGroup: rbac.authorization.k8s.io
roleRef:kind: ClusterRolename: ${USERNAME}-readonlyapiGroup: rbac.authorization.k8s.io
EOF
fi# 生成 kubeconfig
kubectl config set-cluster ${CLUSTER_NAME} \--server=${API_SERVER} \--certificate-authority=${CA_CERT_PATH} \--embed-certs=true \--kubeconfig=${USERNAME}.kubeconfigkubectl config set-credentials ${USERNAME} \--client-certificate=${USERNAME}.crt \--client-key=${USERNAME}.key \--embed-certs=true \--kubeconfig=${USERNAME}.kubeconfigkubectl config set-context ${USERNAME}-context \--cluster=${CLUSTER_NAME} \--user=${USERNAME} \--namespace=${NAMESPACE} \--kubeconfig=${USERNAME}.kubeconfigkubectl config use-context ${USERNAME}-context \--kubeconfig=${USERNAME}.kubeconfigecho "完成!用户 ${USERNAME} 的 kubeconfig 文件: ${USERNAME}.kubeconfig"

三、测试

kubectl --kubeconfig=<生成的config> get pods

四、合并Kubeconfig文件

生成了的下游config使用下面的命名合并。

KUBECONFIG=~/.kube/config:/path/to/rke2-01.config:/path/to/rke2-02.config:/path/to/rke2-03.config kubectl config view --merge --flatten > ~/.kube/merged-config

例子:

cat ~/.kube/merged-config

五、切换

六、helm部署

helm install kafka appstore/kafka --set persistence.storageClass=longhorn --set persistence.size=3Gi  --namespace=kafka --set zookeeper.enabled=true --version=23.0.7 --set kraft.enabled=false --create-namespace --kube-context=kody-rke2-03-context 

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

相关文章:

  • 数据库系统概念第六版记录 三
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-files.py
  • 微信小程序案例1——制作猫眼电影底部标签导航栏
  • 【大数据技术】搭建完全分布式高可用大数据集群(Kafka)
  • 【服务器知识】如何在linux系统上搭建一个nfs
  • 图片画质增强:轻松提升画质
  • vscode快速接入deepseek 实践操作
  • mapbox进阶,添加绘图扩展插件,绘制圆形
  • Cursor 与多语言开发:全栈开发的利器
  • 2025 CCF BDCI|“基于TPU平台的OCR模型性能优化”一等奖作品
  • FPGA的IP核接口引脚含义-快解
  • 数据库高安全—审计追踪:传统审计统一审计
  • 机器学习 - 需要了解的条件概率、高斯分布、似然函数
  • Spring Boot Web 入门
  • 神经网络|(八)概率论基础知识-二项分布及python仿真
  • 【面试场景】MySQL分布式主键选取
  • 执行git stash drop stash@{x} 时出现error: unknown switch `e‘ 的解决方式
  • 链表和 list
  • windows 蓝牙驱动开发-传输总线驱动程序常见问题
  • Qt修仙之路2-1 炼丹初成
  • 【含开题报告+文档+PPT+源码】基于SpringBoot+Vue宠物预约上门服务预约平台
  • 无线AP之详解(Detailed Explanation of Wireless AP)
  • Spring Boot Actuator与JMX集成实战
  • mac环境下,ollama+deepseek+cherry studio+chatbox本地部署
  • camera光心检测算法
  • 【MySQL】向后兼容设计规范(无回滚场景)
  • 还搞不透stm32单片机启动过程?一篇文章几百字让你彻底看懂!
  • 无界构建微前端?NO!NO!NO!多系统融合思路!
  • DeepSeek辅助段落扩写的能力怎么样?
  • 分形的魅力:数学与艺术的完美结合