Kubernetes-使用集群CA证书给用户颁发客户端证书访问Api-Server

一、官网地址

证书和证书签名请求 | Kubernetes

二、Demo

        一、创建测试文件夹

cd ~
mkdir add_k8s_user_demo
cd add_k8s_user_demo

        二、创建符合X509标准的证书

openssl genrsa -out myuser.key 2048
openssl req -new -key myuser.key -out myuser.csr -subj "/CN=myuser"

 注意:

设置 CSR 的 CN 和 O 属性很重要。CN 是用户名,O 是该用户归属的组
这里CN 为 myuser , 不使用组来管理。

 

三、创建 CertificateSigningRequest

cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:name: myuser
spec:request: <替换为你的>signerName: kubernetes.io/kube-apiserver-clientexpirationSeconds: 86400  # one dayusages:- client auth
EOF

需要注意的几点:

  • usage 字段必须是 'client auth'

  • expirationSeconds 可以设置为更长(例如 864000 是十天)或者更短(例如 3600 是一个小时)

  • request 字段是 CSR 文件内容的 base64 编码值, 要得到该值,可以执行命令:

    cat myuser.csr | base64 | tr -d "\n"

 

状态为Pending.因为还没有被批准。 

 四、批准 CertificateSigningRequest

使用 kubectl 创建 CSR 并批准。

获取 CSR 列表:

kubectl get csr

批准 CSR:

kubectl certificate approve myuser

 

状态变为批准。

五、取得证书

从 CSR 取得证书:
kubectl get csr/myuser -o yaml

证书的内容使用 base64 编码,存放在字段 status.certificate

从 CertificateSigningRequest 导出颁发的证书:
kubectl get csr myuser -o jsonpath='{.status.certificate}'| base64 -d > myuser.crt

 

六、创建角色和角色绑定

创建了证书之后,为了让这个用户能访问 Kubernetes 集群资源,现在就要创建 Role 和 RoleBinding 了。

下面是为这个新用户创建 Role 的示例命令:

解释:创建一个角色叫开发者,只有更新和创建以及列出对于Pod资源的权限,没有制定命名空间则默认使用default.

kubectl create role developer --verb=create --verb=get --verb=list --verb=update --verb=delete --resource=pods
下面是为这个新用户创建 RoleBinding 的示例命令:

将上面的的开发者权限绑定到刚才颁发证书的user-myuser

kubectl create rolebinding developer-binding-myuser --role=developer --user=myuser

 七、添加到 kubeconfig

最后一步是将这个用户添加到 kubeconfig 文件。

首先,你需要添加新的凭据:
kubectl config set-credentials myuser --client-key=myuser.key --client-certificate=myuser.crt --embed-certs=true
然后,你需要添加上下文:
kubectl config set-context myuser --cluster=kubernetes --user=myuser

注意这里的cluster的值,需要匹配:

kubectl config get-clusters


 

比如我是rke2的发行版,默认是default,其他发行版类推。 

来测试一下,把上下文切换为 myuser
kubectl config use-context myuser

八、测试 以及验证

kubectl get nodes
kubectl get po 

 测试权限是否生效。

上面验证:
        1、无法列出namespace,因为role定义了只允许列出pod.

        2、下面get pod 则验证了权限配置正常以及正确。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动微分技术在 AI for science 中的应用

本文简记我在学习自动微分相关技术时遇到的知识点。 反向传播和自动微分 以 NN 为代表的深度学习技术展现出了强大的参数拟合能力&#xff0c;人们通过堆叠固定的 layer 就能轻松设计出满足要求的参数拟合器。 例如&#xff0c;大部分图神经网络均基于消息传递的架构。在推理…

Jitsi meet 退出房间后,用户还在房间内

前言 Jitsi Meet 如果客户端非正常退出会议&#xff0c;会产生用户还在房间内&#xff0c;实际用户已经退出的情况&#xff0c;需要一段时间内&#xff0c;才会在UI离开房间&#xff0c;虽然影响不大&#xff0c;但是也容易导致体验不好。 保活 Jitsi Meet 会和前端做一个保…

QT中如何将对第三方库进行翻译

1、背景 在我们的程序中,可能会加载其他人写的模块,,该模块是以库的形式提供的,那么我们程序翻译时,如何来对引入的第三方库进行翻译??? 2、方案 首先,第三方库会有自己的翻译文件,并且一般要给我们提供设置翻译的接口, 例如下:第三方库给我们暴露一个接口,我们…

带交互的卡尔曼滤滤波|一维滤波|源代码

背景 一维卡尔曼滤波的MATLAB例程&#xff0c;​背景为温度估计。 代码介绍 运行程序后&#xff0c;可以自己输入温度真实值&#xff1a; 以20℃为例&#xff0c;得到如下的估计值​&#xff1a; 滤波前的值和滤波后的值分别于期望值&#xff08;真实值&#xff09;作差…

基于Jenkins+Kubernetes+GitLab+Harbor构建CICD平台

1. 实验环境 1.1 k8s环境 1&#xff09;Kubernetes 集群版本是 1.20.6 2&#xff09;k8s控制节点&#xff1a; IP&#xff1a;192.168.140.130 主机名&#xff1a;k8s-master 配置&#xff1a;4C6G 3&#xff09;k8s工作节点 节点1&#xff1a; IP&#xff1a;192.1…

lucene 9.10向量检索基本用法

Lucene 9.10 中的 KnnFloatVectorQuery 是用来执行最近邻&#xff08;k-Nearest Neighbors&#xff0c;kNN&#xff09;搜索的查询类&#xff0c;它可以在一个字段中搜索与目标向量最相似的k个向量。以下是 KnnFloatVectorQuery 的基本用法和代码示例。 1. 索引向量字段 首先…

Linux 自动化升级Jar程序,指定Jar程序版本进行部署脚本

文章目录 一、环境准备二、脚本1. 自动化升级Jar程序2. 指定Jar程序版本进行部署总结一、环境准备 本文在 CentOS 7.9 环境演示,以springboot为例,打包后生成文件名加上版本号,如下打包之后为strategy-api-0.3.2.jar: pom.xml<?xml version="1.0" encoding=&…

【机器学习】基于OpenCV和TensorFlow的MobileNetV2模型的物种识别与个体相似度分析

在计算机视觉领域&#xff0c;物种识别和图像相似度比较是两个重要的研究方向。本文通过结合深度学习和图像处理技术&#xff0c;基于OpenCV和TensorFlow的MobileNetV2的预训练模型模&#xff0c;实现物种识别和个体相似度分析。本文详细介绍该实验过程并提供相关代码。 一、名…

电涡流的形成范围

电涡流的形成范围涉及多个方面&#xff0c;主要受到导体材料、磁场变化速度、导体形状和尺寸以及磁场方向的影响。以下是对这些因素的详细分析&#xff1a; 导体材料&#xff1a;金属和合金是最容易产生电涡流的材料&#xff0c;而非金属材料&#xff08;如陶瓷、塑料等&#…

JVM运行时数据区 - 程序计数器

运行时数据区 Java虚拟机在执行Java程序的过程中&#xff0c;会把它管理的内存划分成若干个不同的区域&#xff0c;这些区域有各自的用途、创建及销毁时间&#xff0c;有些区域随着虚拟机的启动一直存在&#xff0c;有些区域则随着用户线程的启动和结束而建立和销毁&#xff0…

前端组件业务数据选择功能优雅写法

1. 业务场景 后台管理在实际业务中&#xff0c;经常可见的功能为&#xff1a;在当前的页面中从其他列表中选择数据。 例如&#xff0c;在一个商品活动列表页面中 需要选择配置的商品。 2. 遇到问题 从代码划分的角度来说&#xff0c;每个业务列表代码首先分散开来&#xff0…

LeetCode刷题之HOT100之在排序数组中查找元素的第一个和最后一个位置

下午雨变小了&#xff0c;但我并未去实验室&#xff0c;难得的一天呆在宿舍。有些无聊&#xff0c;看看这个&#xff0c;弄弄那个&#xff0c;听听歌&#xff0c;消磨时间。不知觉中时间指针蹦到了九点&#xff0c;做题啦&#xff01;朋友推荐了 Eason 的 2010-DUO 演唱会&…

修改el-select默认样式

在开发过程中&#xff0c;我们一般遇到特殊的UI效果图&#xff0c;不得不修改<el-select>默认样式了。 修改el-select框样式 <template><el-selectv-model"yearValue"class"select_box"multipleplaceholder"请选择年份支持多选"…

Python 字符串索引和切片

在 Python 编程语言中&#xff0c;字符串是一种不可变的序列&#xff0c;可以通过索引和切片来访问字符串中的字符或子串。 索引&#xff1a;字符串中的每个字符都有一个对应的索引&#xff0c;索引从0开始&#xff0c;依次递增。通过索引可以访问字符串中特定位置的字符。例如…

如何利用python下载原创力文档

原创力文档是一个文档资源共享平台&#xff0c;文档内容类型丰富&#xff0c;包含计算机、高等教育、金融投资、医药卫生、汽车机械、外语学习、报告分析、法律法规、研究生考试、电子工程、经济贸易、建筑施工、幼儿小学教育、中学教育、文学历史、资格认证考试、人力资源、学…

2024年06月数据库流行度最新排名

点击查看最新数据库流行度最新排名&#xff08;每月更新&#xff09; 2024年06月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多&#xff0c;这个数据库就被认为越受欢迎。这是一个领先指标。原始数…

低代码是什么?开发系统更有什么优势?

低代码&#xff08;Low-Code&#xff09;是一种应用开发方法&#xff0c;它采用图形化界面和预构建的模块&#xff0c;使得开发者能够通过少量的手动编程来快速创建应用程序。这种方法显著减少了传统软件开发中的手动编码量&#xff0c;提高了开发效率&#xff0c;降低了技术门…

描述Python中的命名空间和作用域。

在Python中&#xff0c;命名空间&#xff08;Namespace&#xff09;和作用域&#xff08;Scope&#xff09;是两个重要的概念&#xff0c;它们帮助程序员理解和管理变量的可见性和生命周期。 命名空间 命名空间是一个从名字到对象之间的映射。Python中的每一个模块、函数和类…

thingsboard物联网平台快速入门教程

第一步&#xff0c;搭建服务器 使用我已经建好的服务器&#xff0c;thingsboard测试账号,租户管理员账号&#xff0c;物联网测试平台-CSDN博客 第二步&#xff0c;创建一个设备&#xff0c;获取设备Token 用租户管理员账户登录&#xff0c;左侧找到实体->设备&#xff0c…

持续总结中!2024年面试必问 20 道 Kafka面试题(二)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 20 道 Kafka面试题&#xff08;一&#xff09;-CSDN博客 三、什么是 Topic 和 Partition&#xff0c;它们在 Kafka 中的作用是什么&#xff1f; 在 Kafka 中&#xff0c;Topic 和 Partition 是两个核心概念&…