kubernetes用户权限管理详解——普通用户[kubeconfig]

原文: 学一下icon-default.png?t=N7T8https://suxueit.com/article_detail/tdVymI4BWZdDRfKqnv1y

K8s 的用户分为两类

  • 普通用户:普通用户是指集群外部的人或系统管理,它们不由 Kubernetes 直接管理。普通用户的证书、密钥和权限管理通常由外部系统(如企业的用户目录服务)、证书颁发机构(CA)、第三方验证服务等负责。【kubeconfig就采用的普通用户】

  • 服务账号:服务账户主要用于在 Kubernetes 内部运行的进程和应用程序。它们是由 Kubernetes 自动管理的,并且可以通过 Kubernetes API 分配特定的权限。服务账户与部署它们的命名空间绑定,并且可以被分配权限来访问集群资源。这些账户的密钥和权限是由 Kubernetes 系统自动创建和管理的。【pod的服务需要访问k8s资源时,使用服务账号赋权限】

场景包括

  • 集群管理员:负责管理 Kubernetes 集群的用户,拥有最高权限,可以对集群中的资源进行任何操作

  • 开发者:在 Kubernetes 集群中部署和管理自己的应用,可能有限制的权限,仅能管理特定的命名空间或资源。

  • 第三方服务:需要与 Kubernetes 集群交互的外部系统或服务,如监控、日志管理等。

准备证书

普通用户需要通过证书进行验证,然后通过RBAC授权。因此需要先创建证书,创建证书有两种方式,通过k8s csr申请,直接通过命令创建

通过k8s csr申请

配置csr文件,用于生成密钥,配置用户为 test-user

test-user.json

{"CN": "test-user","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "BeiJing","L": "BeiJing","O": "k8s","OU": "System"}]
}

生成密钥

cfssl genkey -initca test-user.json | cfssljson -bare test-user

向k8s 申请证书

cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:name: test-user
spec:request: $(cat test-user.csr | base64 | tr -d '\n')signerName: kubernetes.io/kube-apiserver-clientusages:- client auth
EOF

# 审批证书
kubectl certificate approve test-user
# 导出证书
kubectl get csr test-user -o jsonpath='{.status.certificate}' | base64 --decode > client.crt

使用openssl生成证书
#生成私钥: 用户名.key
openssl genrsa -out test-user-key.pem 2048  
​
#使用刚刚创建的私钥创, 建证书请求签名用户名.csr,在-subj中指定用户和组
openssl req -new -key test-user-key.pem -out test-user.csr -subj "/CN=test-user/O=k8s"
​
#在/etc/kubernetes/pki,找到找到kubernetes集群认证的ca.crt、ca.key。生成最终的证书client.crt,有效期30天
openssl x509 -req -in wang.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out client.crt -days 30
​
使用cfssl生成证书

配置一个ca配置文件

通过kubernetes 这个配置进行签发,有效期720小时,30天

{"signing": {"default": {"expiry": "438000h"},"profiles": {"kubernetes": {"usages": ["client auth"],"expiry": "720h"}}}
}
​

签发证书

# 在上面的使用k8s 生成证书中
#已经用cfssl生成了密钥[test-user-key.pem]和签名【test-user.csr】文件
# 下面直接用k8s的证书签发client证书即可
​
cfssl sign -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config ca-config.json -profile=kubernetes test-user.csr | cfssljson -bare client123
​
​

创建用户

kubeconfig参数表示将设置应用于的文件,默认是 /root/.kube/config

设置一个新集群

如果在原有集群操作,则跳过这步

kubectl config set-cluster k8s \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--embed-certs=true \
--server=https://172.16.70.149:6443 \
--kubeconfig=test-config
  • --certificate-authority: 集群的ca证书

    • 如果采用kubeadm创建的集群该证书在 /etc/kubernetes/pki/ca.crt

    • 二进制安装的则是自己安装集群时生成的ca证书

  • --embed-certs: 是否将证书内嵌,如果为false则生成的文件保留的是 证书的路径

  • --server: 集群api-server的地址

设置一个用户

设置用户 test-user

kubectl config set-credentials test-user \
--client-certificate=./client.pem \
--client-key=./test-user-key.pem \
--embed-certs=true \
--kubeconfig=test-config 
  • --client-certificate: 在前面生成的客户端的证书

  • --client-key:在前面生成的 客户端公钥,在前面生成的

设置上下文

设置一个上下文,上下文名称为 default,指定集群为k8s,用户为test-user

kubectl config set-context default \
--cluster=k8s \ # 如果第一步创建集群跳过了,这里需要填写原有config中的集群
--user="test-user" \
--kubeconfig=test-config

切换上下文

设定当前使用的上下文

kubectl config use-context default --kubeconfig=test-config

为用户授权

1、创建一个test角色,给出在kube-system 这个命令空间list pod的权限,

2、将角色与用户进行绑定

cat <<EOF | kubectl apply -f -
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:namespace: kube-systemname: test
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["list"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: test-bindingnamespace: kube-system
subjects:
- kind: Username: test-userapiGroup: ""
roleRef:kind: Rolename: testapiGroup: ""
EOF

演示

演示

 kubectl get pods -n kube-system  --kubeconfig=test-config

图片

# 这里只给了 list权限,因此get单个pod就提示权限不足了kubectl get pods -n kube-system  --kubeconfig=test-config calico-node-8r9nwError from server (Forbidden): pods "calico-node-8r9nw" is forbidden: User "test-user" cannot get resource "pods" in API group "" in the namespace "kube-system"

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

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

相关文章

【绘图案例-图形上下文栈 Objective-C语言】

一、接下来,我们来说这个“图形上下文栈” 1.我们还是把之前的copy这份儿代码复制一下,改个名字,叫做“02-图形上下文栈”, 好,我们把刚才那个圆形拿过来,那条线也拿过来,用CGContextAdd:这种方式, 把第一步,获取当前上下文,也拿过来,第三步,渲染,也拿过来, 打开…

买婴儿洗衣机怎么选择?四款优良婴儿洗衣机极力推荐

由于刚出生没多久的宝宝的肌肤相对来说会比较娇嫩&#xff0c;因此普遍的宝宝衣物都是采用纯棉材质&#xff0c;所以对于宝宝的衣服要特殊呵护&#xff0c;要求有无菌、无刺激的清洗环境。然而婴儿专用的洗衣机就应运而生&#xff01;婴儿洗衣机的优点很多&#xff0c;一是省时…

从 Azure 部署生成本地 .NET 密钥

作者&#xff1a;Frank Boucher 排版&#xff1a;Alan Wang 通常&#xff0c;示例项目以一些“魔术字符串”开始&#xff0c;这些变量包含与部署或外部资源相关的 URL 和关键信息&#xff0c;我们必须更改这些信息才能使用示例。例如在 .NET 中&#xff0c;它可能如下所示&…

Android 开发投屏软件

一、背景 作为Android开发总会有给他人share自己APP情况&#xff0c;一般在线会议投屏&#xff0c;总是需要在手机上安装对应会议软件特别麻烦~ 二、投屏 Android Studio已经自带了投屏能力&#xff0c;可以在电脑端直接控制手机&#xff0c;同步起来非常方便简单 打开步骤 …

linux ubuntu 在保存文件不被允许,但是root权限

现象&#xff1a;MobaXterm_Personal_2登录到服务器&#xff0c;切换到root用户&#xff0c;然后使用MobaXterm_Personal_2自带的编辑器&#xff0c;编写文件&#xff0c;进行保存不被允许&#xff1b;查看目录root是有权限进行修改文件的&#xff0c;然后使用vim进行修改保存&…

阿里云OSS, 跨域请求, No ‘Access-Control-Allow-Origin‘

问题 阿里云OSS, 跨域请求, No ‘Access-Control-Allow-Origin’ 错误标签&#xff1a;阿里云OSS, 跨域请求, No ‘Access-Control-Allow-Origin’ 浏览器具体报错内容&#xff1a; Access to XMLHttpRequest at ‘https://xxx.oss-cn-guangzhou.aliyuncs.com/xxx.jpg’ from …

LLM - Weight-Decomposed Low-Rank Adaptation 之 DoRA

目录 Abstract 1.Introduce 2.Related Works 2.1 Parameter-Efficient Fine-Tuning (PEFT) 2.2 LoRA (Hu et al., 2022) and its variants 3.Pattern Analysis of LoRA and FT 3.1 Low-Rank Adaptation (LoRA) 3.2. Weight Decomposition Analysis 4.Method 4.1. Wei…

在react项目用echarts绘制中国地图

文章目录 一、引入echarts二、下载地图json数据三、编写react组件四、组件使用 一、引入echarts 安装&#xff1a;npm i echarts --save 二、下载地图json数据 由于echarts内部不再支持地图数据&#xff0c;所以要绘制地图需要自己去下载数据。建议使用阿里云的。 地址&…

Chrome 设置在新窗口中打开链接(已登录google账号版)

Chrome的链接默认是在原标签页中打开的&#xff0c;如果要在新窗口中打开&#xff0c;需要自己自行设置&#xff0c;在此&#xff0c;针对已经登录google账号的chrome浏览器怎么进行设置进行说明。 一、点击登录图标->更多设置 二、选择其他设置->在新窗口中打开搜索结果…

砍树c++

题目&#xff1a; 代码&#xff1a; #include<bits/stdc.h> using namespace std; long long n,m,a[100000005]; bool jltm(int x){long long sum0;for(int i1;i<n;i){if(a[i]>x) sumsuma[i]-x;}//计算此时锯片高度砍掉的木材if(sum>m) return 1;else return 0…

怎么在UE游戏中加入原生振动效果

我是做振动触感的。人类的五感“视听嗅味触”&#xff0c;其中的“触”就是触觉&#xff0c;是指皮肤、毛发与物体接触时的感觉。触感可以带来更加逼真的沉浸式体验。但也许过于司空见惯&#xff0c;也是习以为常&#xff0c;很多人漠视了触感的价值。大家对触感的认知还远远不…

Oracle19c ADG搭建

文章目录 一、环境配置1、主机环境2、host文件配置 二、主库配置1、 开启归档2、redo日志3、修改参数文件4、配置TNS文件5、静态监听6、拷贝密码文件 三、备库配置1、开启归档2、redo日志3、修改参数文件4、配置TNS文件5、配置静态监听 四、构建DG1、验证监听2、主库登入rman&a…

排序——选择排序(直接选择排序和堆排)

本专栏和大家分享关于排序的算法,其中有插入排&#xff08;直接插入排序和希尔排序&#xff09;、选择排序&#xff08;直接选择排序和堆排&#xff09;、交换排序&#xff08;冒泡排序和快速排序&#xff09;、归并排序以及其他非基于比较的排序 本文与大家分享选择排序 目录 …

【pytest、playwright】多账号同时操作

目录 方案实现思路&#xff1a; 方案一&#xff1a; 方案二&#xff1a; 方案实现思路&#xff1a; 依照上图所见&#xff0c;就知道&#xff0c;一个账号是pytest-playwright默认的环境&#xff0c;一个是 账号登录的环境 方案一&#xff1a; 直接上代码&#xff1a; imp…

Tensorflow2.0笔记 - 自定义Layer和Model

本笔记主要记录如何在tensorflow中实现自定的Layer和Model。详细内容请参考代码中的链接。 import time import tensorflow as tf from tensorflow import keras from tensorflow.keras import datasets, layers, optimizers, Sequential, metricstf.__version__ #关于自定义l…

JRT业务开发起步

这是一段充满挑战与奋斗的旅程&#xff0c;自第一行Java代码的写下起&#xff0c;便历经重重险阻。从细微的代码行&#xff0c;逐步汇聚成实用的工具类方法&#xff1b;从工具类方法的积累&#xff0c;逐渐构建起功能强大的工具包&#xff1b;再从工具包的整合&#xff0c;最终…

走进标杆企业——成套数字化标杆观摩游学(重庆站)

为了推进工业电气加工与设计的效率提升&#xff0c;加快企业数字化、网络化和智能化管理的步伐&#xff0c;利驰软件(苏州)有限公司&#xff08;下文简称利驰软件&#xff09;在重庆于2024年3月22日举办了一场成套数字化标杆观摩游学。此次为期一天的活动吸引了湘鄂渝地区专家们…

视频素材下载哪个软件好?几个素材库视频免费下载

在浩瀚的创意海洋中&#xff0c;找到完美的无水印视频素材犹如寻宝一般&#xff0c;每一段精彩的视频片段都能为您的作品增色不少。无论您是视频制作新手&#xff0c;还是经验丰富的专业人士&#xff0c;这里有全球各地的精选视频素材网站&#xff0c;旨在激发您的灵感&#xf…

EfficientSAM 项目排坑

EfficientSAM 项目排坑 任务过程记录创建环境运行示例 任务 跑通这个项目代码 过程记录 创建环境 readme里没有说具体怎么配置环境&#xff0c;所以可能对我来说还挺困难的。 现把项目git下来&#xff1a; git clone https://github.com/yformer/EfficientSAM.git cd Effi…