k8s指定命名空间kubeconfig文件生成教程

文章目录

    • 前言
      • k8sv1.24及以上版本
        • [创建 ServiceAccount](#创建 ServiceAccount)
        • [创建Role 和 RoleBinding](#创建Role 和 RoleBinding)
        • [长期 token Secret创建](#长期 token Secret创建)
        • [提取 token 和 CA](#提取 token 和 CA)
        • [生成 kubeconfig](#生成 kubeconfig)
        • 验证
      • k8sv1.24及以下版本

前言

创建指定命名空间的kubeconfig文件是为了安全考虑,有时候开发会想要admin的kubeconfig的配置文件来实现自动化管理pod,但是给管理员权限风险较大(之前开发就搞崩了几次k8s)所以创建指定命名空间的kubeconfig较好,只能操作固定命名空间的资源,k8s也有完善的防提权机制,碰不到别的命名空间。

注:1.24版本前后的创建方式不一样

k8sv1.24及以上版本

创建 ServiceAccount
powershell 复制代码
kubectl create serviceaccount monitoring-user -n monitoring
创建Role 和 RoleBinding
python 复制代码
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: monitoring-user-role
  namespace: monitoring #命名空间
rules:
- apiGroups: ["*"]  #给所有权限
  resources: ["*"] #给所有权限
  verbs: ["*"] #给所有权限
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: monitoring-user-binding
  namespace: monitoring
subjects:
- kind: ServiceAccount
  name: monitoring-user
  namespace: monitoring
roleRef:
  kind: Role
  name: monitoring-user-role
  apiGroup: rbac.authorization.k8s.io
EOF
长期 token Secret创建
powershell 复制代码
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: monitoring-user-token
  namespace: monitoring
  annotations:
    kubernetes.io/service-account.name: monitoring-user
type: kubernetes.io/service-account-token
EOF
提取 token 和 CA
powershell 复制代码
TOKEN=$(kubectl get secret monitoring-user-token -n monitoring -o jsonpath='{.data.token}' | base64 -d)
kubectl get secret monitoring-user-token -n monitoring -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
APISERVER=https://192.168.10.11:6443
生成 kubeconfig
powershell 复制代码
kubectl config set-cluster k8s-cluster \
  --certificate-authority=ca.crt \
  --embed-certs=true \
  --server=${APISERVER} \
  --kubeconfig=monitoring-user.kubeconfig

kubectl config set-credentials monitoring-user \
  --token=${TOKEN} \
  --kubeconfig=monitoring-user.kubeconfig

kubectl config set-context monitoring-user@k8s-cluster \
  --cluster=k8s-cluster \
  --user=monitoring-user \
  --namespace=monitoring \
  --kubeconfig=monitoring-user.kubeconfig

kubectl config use-context monitoring-user@k8s-cluster --kubeconfig=monitoring-user.kubeconfig
验证
powershell 复制代码
kubectl --kubeconfig=monitoring-user.kubeconfig get pods 
powershell 复制代码
kubectl --kubeconfig=monitoring-user.kubeconfig get pods -A

k8sv1.24及以下版本

k8sv1.24以下对比以上版本的区别在于不需要手动创建secret,会自动生成

创建 RBAC(SA + Role + RoleBinding)
powershell 复制代码
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: monitoring-admin
  namespace: monitoring
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: monitoring-full
  namespace: monitoring
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: monitoring-admin-binding
  namespace: monitoring
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: monitoring-full
subjects:
- kind: ServiceAccount
  name: monitoring-admin
  namespace: monitoring
EOF
生产kubeconfig文件
powershell 复制代码
NAMESPACE="monitoring"
SA="monitoring-admin"
APISERVER="https://192.168.10.11:6443"
OUTPUT="monitoring.kubeconfig"

# 1.23 自动生成了 secret,直接取
SECRET=$(kubectl get sa ${SA} -n ${NAMESPACE} -o jsonpath='{.secrets[0].name}')
TOKEN=$(kubectl get secret ${SECRET} -n ${NAMESPACE} -o jsonpath='{.data.token}' | base64 -d)
kubectl get secret ${SECRET} -n ${NAMESPACE} -o jsonpath='{.data.ca\.crt}' | base64 -d > /tmp/ca.crt

kubectl config set-cluster monitoring-cluster \
  --server=${APISERVER} \
  --certificate-authority=/tmp/ca.crt \
  --embed-certs=true \
  --kubeconfig=${OUTPUT}

kubectl config set-credentials ${SA} \
  --token=${TOKEN} \
  --kubeconfig=${OUTPUT}

kubectl config set-context monitoring-context \
  --cluster=monitoring-cluster \
  --namespace=${NAMESPACE} \
  --user=${SA} \
  --kubeconfig=${OUTPUT}

kubectl config use-context monitoring-context --kubeconfig=${OUTPUT}
相关推荐
csdn_aspnet3 小时前
如何在本地 Docker 容器中运行 Redis,并使用 Redis Insight 和 Redis CLI 进行管理
redis·docker·容器
weirong3 小时前
给 Operator 加 Admission Webhook 踩的 4 个坑(其中 3 个本可以不踩)
kubernetes
Goboy5 小时前
夯爆了,我被一个一句话接入的免费可观测平台策反了,那一刻我决定放弃用了3年的Prometheus
后端·docker·kubernetes
吴声子夜歌5 小时前
Kubernetes权威指南——深入掌握Service(一)
云原生·容器·kubernetes
java_logo15 小时前
Docker 部署 Liquibase:轻松搭建数据库变更管理
数据库·docker·容器·数据库管理·liquibase·轩辕镜像·数据库变更
IT利刃出鞘1 天前
Docker Compose--解决修改配置后不生效的问题
运维·docker·容器
java_logo1 天前
Docker 部署 CloudBeaver:轻松搭建网页数据库管理平台
数据库·docker·容器·数据库管理·dbeaver·轩辕镜像·cloudbeaver
好用斋1 天前
拾光坞安装网盘聚合LitePan:把Docker命令翻译成图形界面
运维·docker·容器
weirong1 天前
图解 client-go Informer:手写一个 mini-Informer 才敢说懂
kubernetes
.冰块.1 天前
流量大了自动加 Pod!K8s HPA 扩缩容与 ResourceQuota/LimitRange 资源管控实战
linux·云原生·容器·kubernetes·hpa·quota·limitrange