news 2026/4/15 4:31:01

kubernetes-对node的kubeconfig安全加固

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
kubernetes-对node的kubeconfig安全加固

kubernetes-对node的kubeconfig安全加固

​ 日拱一卒,功不唐捐。大家好,目前我的kubernetes集群遇到一个安全问题,因为有些集群部署kubeadm部署方式部署的,所以有些集群中kubelet启动的时候使用的admin权限的kubeconfig,这个在生产环境下是存在安全风险的,所以考虑对其进行安全加固。

​ 我们知道kubelet启动的时候需要传kubeconfig,如果使用的是admin权限的kubeconfig,那如果被黑客利用了有很大的安全风险,那如何解决呢?我们自然会想到要么降低权限大小要么选择加密对吧,加密自然麻烦一些你得改kubernetes代码,加密倒不是不可以,主要是还得自己维护代码,所以这里选择降低权限,选择降低node权限使其只能访问本节点数据,不能横向访问其他节点数据。其实是借助了kubernetes的Node Authorizer + NodeRestriction, 限制kubelet只能访问本node的相关资源。

完整流程
admin kubeconfig(仅用于创建 CSR) ↓ 创建 kubelet CSR(system:node:<nodeName>) ↓ approve + 签发证书 ↓ 生成 kubelet 专用 kubeconfig ↓ 重启 kubelet ↓ 删除 admin kubeconfig

假设node的主机名称是 node1.localdomain

1. 控制节点参数
apiserver启用Node+RBAC
--authorization-mode=Node,RBAC
apiserver启用NodeRestriction Admission
--enable-admission-plugins=NodeRestriction
controller-manager
--cluster-signing-cert-file=/etc/kubernetes/pki/ca.pem --cluster-signing-key-file=/etc/kubernetes/pki/ca-key.pem
2. 为node生成证书

生成私钥

#openssl genrsa -out kubelet.key 2048

CSR 资源用于请求指定签名者签发证书,流程如下:

设置 CSR 的 CN 和 O 属性非常重要。CN 是用户的名称,O 是此用户所属的群组。 你可以参阅 RBAC 了解标准的群组。

#openssl req -new \ -key kubelet.key \ -subj "/CN=system:node:node1.localdomain/O=system:nodes" \ -out kubelet.csr

创建 CertificateSigningRequest 并通过 kubectl 将其提交到 Kubernetes 集群, 并 批准CerfificateSigningRequest,确保状态是Approved,Issued

#cat <<EOF | kubectl --kubeconfig config-cluster-test apply -f - apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: node1.localdomain-kubelet-client spec: signerName: kubernetes.io/kube-apiserver-client-kubelet request: $(base64 -w0 kubelet.csr) usages: - client auth - digital signature - key encipherment EOF #kubectl --kubeconfig config-cluster-test certificate approve node1.localdomain-kubelet-client

证书值以 Base64 编码格式显示在.status.certificate下, 从 CertificateSigningRequest 导出已颁发的证书。

#kubectl --kubeconfig config-cluster-test get csr node1.localdomain-kubelet-client -o jsonpath='{.status.certificate}' | base64 -d > kubelet-client.crt

将证书配置到 kubeconfig 中并生成新的 /var/lib/kubelet/kubeconfig

#kubectl --kubeconfig config-cluster-test config set-cluster kubernetes \ --server=https://10.236.111.57:6443 \ --certificate-authority=/etc/kubernetes/ca.crt \ --embed-certs=true \ --kubeconfig=/var/lib/kubelet/kubeconfig #kubelet-client.crt和kubelet-client.key为前面生成的私钥和crt #kubectl --kubeconfig config-cluster-test config set-credentials system:node:node1.localdomain \ --client-certificate=/var/lib/kubelet/pki/kubelet-client.crt \ --client-key=/var/lib/kubelet/pki/kubelet-client.key \ --embed-certs=true \ --kubeconfig=/var/lib/kubelet/kubeconfig #kubectl --kubeconfig config-cluster-test config set-context default \ --cluster=kubernetes \ --user=system:node:node1.localdomain \ --kubeconfig=/var/lib/kubelet/kubeconfig #kubectl --kubeconfig config-cluster-test config use-context default \ --kubeconfig=/var/lib/kubelet/kubeconfig
测试
#kubectl --kubeconfig=/var/lib/kubelet/kubeconfig auth can-i get pods
测试效果

实测不能list ns以及configmap/secret, 只能获取本pod相关的configmap以及pod以及secret都能获取,同时能list获取nodes以及pod,但不能exec pod.

# kubectl --kubeconfig=/var/lib/kubelet/kubeconfig -n my-test get secrets Error from server (Forbidden): secrets is forbidden: User "system:node:node1.localdomain" cannot list resource "secrets" in API group "" in the namespace "my-test": No Object name found

附脚本:

#!/bin/sh #用于集群生成node证书 #------ 变量 -------# NODE_HOSTNAME=`hostname` #当前worker节点主机名 API_ENDPOINT="https://10.236.111.57:3141" #集群api的地址 CA_PUB_PATH="/etc/kubernetes/ca.crt" #集群的ca证书 ADMIN_KUBECONFIG="/root/admin-kubeconfig" #集群的admin的kubeconfig DST_KUBECONFIG_PATH="/var/lib/kubelet/kubeconfig.node.new" #最终新的kubeconfig #--------------------# #cd /root openssl genrsa -out kubelet-client.key 2048 openssl req -new \ -key kubelet-client.key \ -subj "/CN=system:node:$HOSTNAME/O=system:nodes" \ -out kubelet-client.csr kubectl --kubeconfig $ADMIN_KUBECONFIG delete csr $NODE_HOSTNAME-kubelet-client cat <<EOF | kubectl --kubeconfig $ADMIN_KUBECONFIG apply -f - apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: $NODE_HOSTNAME-kubelet-client spec: signerName: kubernetes.io/kube-apiserver-client-kubelet request: $(base64 -w0 kubelet-client.csr) usages: - client auth - digital signature - key encipherment EOF sleep 3 kubectl --kubeconfig $ADMIN_KUBECONFIG certificate approve $NODE_HOSTNAME-kubelet-client kubectl --kubeconfig $ADMIN_KUBECONFIG get csr $NODE_HOSTNAME-kubelet-client -o jsonpath='{.status.certificate}' | base64 -d > kubelet-client.crt kubectl --kubeconfig $ADMIN_KUBECONFIG config set-cluster kubernetes \ --server=$API_ENDPOINT \ --certificate-authority=$CA_PUB_PATH \ --embed-certs=true \ --kubeconfig=$DST_KUBECONFIG_PATH kubectl --kubeconfig $ADMIN_KUBECONFIG config set-credentials system:node:$NODE_HOSTNAME \ --client-certificate=./kubelet-client.crt \ --client-key=./kubelet-client.key \ --embed-certs=true \ --kubeconfig=$DST_KUBECONFIG_PATH kubectl --kubeconfig $ADMIN_KUBECONFIG config set-context default \ --cluster=kubernetes \ --user=system:node:$NODE_HOSTNAME \ --kubeconfig=$DST_KUBECONFIG_PATH kubectl --kubeconfig $ADMIN_KUBECONFIG config use-context default \ --kubeconfig=$DST_KUBECONFIG_PATH #覆盖原来使用的kubeconfig cat $DST_KUBECONFIG_PATH > /etc/kubernetes/admin.config

参考:

https://kubernetes.io/zh-cn/docs/tasks/tls/certificate-issue-client-csr/

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/9 16:36:57

终极Modbus调试工具OpenModScan:从入门到精通的完整指南

终极Modbus调试工具OpenModScan&#xff1a;从入门到精通的完整指南 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan 在工业自动化和物联网设备调试过程中&#xff0c;M…

作者头像 李华
网站建设 2026/4/13 12:16:57

实战指南:深度解析开源语音数据集的架构设计与高效应用

实战指南&#xff1a;深度解析开源语音数据集的架构设计与高效应用 【免费下载链接】cv-dataset Metadata and versioning details for the Common Voice dataset 项目地址: https://gitcode.com/gh_mirrors/cv/cv-dataset 开源语音数据集为AI语音技术研发提供了海量多…

作者头像 李华
网站建设 2026/4/10 18:11:35

基于Mamba注意力机制的YOLOv11改进方案:MLLA模块实现目标检测性能突破

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有! 文章目录 基于Mamba注意力机制的YOLOv11改进方案:MLLA模块实现目标检测性能突破 Mamba注意力机制原理分析 YOLOv11集成MLLA模块的详细实现 环境配置与代码结构准备…

作者头像 李华
网站建设 2026/4/11 10:29:25

youlai-mall 微服务商城:5分钟快速部署完整电商系统

youlai-mall 微服务商城&#xff1a;5分钟快速部署完整电商系统 【免费下载链接】youlai-mall youlaitech/youlai-mall: youlai-mall 是优莱科技开发的一个开源商城系统&#xff0c;基于Java Spring Boot技术栈构建&#xff0c;集成了多种电商功能模块&#xff0c;如商品管理、…

作者头像 李华
网站建设 2026/4/9 11:41:40

暗黑破坏神2重制版终极自动化指南:Botty让你告别重复操作

暗黑破坏神2重制版终极自动化指南&#xff1a;Botty让你告别重复操作 【免费下载链接】botty D2R Pixel Bot 项目地址: https://gitcode.com/gh_mirrors/bo/botty 还在为无尽的刷怪和跑图感到厌倦吗&#xff1f;&#x1f914; 每天重复着相同的路线&#xff0c;点击着相…

作者头像 李华
网站建设 2026/4/13 5:14:52

27、深入了解IIS:从安装到管理的全面指南

深入了解IIS:从安装到管理的全面指南 1. IIS概述 Windows Server 2003自带Internet Information Services(IIS)6.0,这是一款强大的软件,可用于创建和管理网站,提供了丰富的选项来配置网站内容、性能和访问控制。 2. 使用IIS的好处 IIS具有以下显著优势: - 与Windows…

作者头像 李华