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.hqwc.cn/news/583989.html

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

相关文章

科创新格局·共赢双循环“2024上海智能科技与创新展览会”

2024上海智能科技与创新展览会&#xff0c;将于6月中旬在上海新国际博览中心隆重召开。作为一场盛大的科技盛会&#xff0c;此次展览会将汇聚科技前瞻趋势&#xff0c;融合产业贸易优势&#xff0c;布局初创投资赛道&#xff0c;提供全方位场景生态的跨界合作&#xff0c;构建“…

算法之美:B+树原理、应用及Mysql索引底层原理剖析

B树的一种变种形式&#xff0c;B树上的叶子结点存储关键字以及相应记录的地址&#xff0c;同等存储空间下比B-Tree存储更多Key。非叶子节点不对关键字记录的指针进行保存&#xff0c;只进行数据索引 , 树的层级会更少 , 所有叶子节点都在同一层, 叶子节点的关键字从小到大有序排…

Linux基本指令篇

在前边&#xff0c;我们已经了解过了Linux操作系统的发展和应用&#xff0c;从该篇起&#xff0c;就正式进入对Linux的学习。 今天我们就来在Xshell上远程登录我们的云服务器。首先我们要知道自己云服务器的公网ip&#xff0c;然后修改一下密码。 点击跳转 修改完密码之后我们…

跑通飞浆平台的MTMCT 跨镜跟踪示例

想跑通飞浆平台的MTMCT跨镜跟踪示例&#xff0c;真的是难上加难啊&#xff01; 改了几处代码&#xff0c;可以顺利跑通了&#xff0c;特此记录&#xff1a; 第一处&#xff1a;不要拉主线的代码&#xff0c;改成 !git clone https://gitee.com/paddlepaddle/PaddleDetection…

【unity】如何汉化unity Hub

相信大家下载安装unity后看着满操作栏的英文&#xff0c;英文不好的小伙伴们会一头雾水。但是没关系你要记住你要怎么高速运转的机器进入中国&#xff0c;请记住我给出的原理&#xff0c;不懂不代表不会用啊。现在我们就来把编译器给进行汉化。 第一步&#xff1a;我们打开Uni…

pytorch-tpu/llama推理优化之input prompt bucketing

数据更新&#xff1a; python脚本&#xff08;注意分支&#xff09;&#xff1a; HLO图分析KV-Cache更新&#xff1a; KV-Cache作为HLO图的输入输出&#xff1a;bf16[1,2048,32,128]{3,2,1,0} 128x, 2x32x2 参考链接 notes for transformer introduction by an Italian t…

引领向量数据库技术新变革,Milvus 2.4 正式上线

备受关注的 Milvus 2.4 正式上线! 作为向量数据库赛道的领军者,Zilliz 一直致力于推动向量技术的进步与创新。本次发布中,Milvus 新增支持基于 NVIDIA 的 GPU 索引—— CUDA 加速图形索引(CAGRA),突破了现有向量搜索的能力。 GPU 索引是向量数据库技术中的重要里程碑,…

做现货白银,要直面实时行情走势!

现货白银拥有完善的交易机制&#xff0c;它每天的实时行情走势中充满着交易获利的机会&#xff0c;但不见得每一位投资者都有把握住的能力。在各种资讯都触手可及的今天&#xff0c;投资者可以轻松地获得现与货白银相关的交易技巧&#xff0c;然而交易的智慧&#xff0c;则需要…

ubuntu23.10配置RUST开发环境

系统版本: gcc版本 下载rustup安装脚本: curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh下载完成后会自动执行 选择默认安装选项 添加cargo安装目录到环境变量 vim ~/.bashrc 默认已添加 使用环境变量立即生效 source ~/.bashrc 执行rust开发环境,在终端输入…

扫雷(蓝桥杯)

题目描述 小明最近迷上了一款名为《扫雷》的游戏。其中有一个关卡的任务如下&#xff0c; 在一个二维平面上放置着 n 个炸雷&#xff0c;第 i 个炸雷 (xi , yi ,ri) 表示在坐标 (xi , yi) 处存在一个炸雷&#xff0c;它的爆炸范围是以半径为 ri 的一个圆。 为了顺利通过这片土…

19-错误处理(下):如何设计错误包?

业界有很多优秀的、开源的错误包可供选择&#xff0c;例如Go标准库自带的errors包、github.com/pkg/errors包。 错误包需要具有哪些功能&#xff1f; 在我看来&#xff0c;至少需要有下面这六个功能&#xff1a; 首先&#xff0c;应该能支持错误堆栈。 假设保存在bad.go文件…

【MySQL笔记】SELECT COUNT(*) 的时候,加不加where条件有差别吗?

文章目录 前言实验结论 前言 这部分很多帖子都只在问题里罗列下&#xff0c;好像也没详细解答 其实就是跟InnoDB优先走二级索引的优化有关&#xff0c;前面也提到了”优化的前提是查询语句中不包含where条件和group by条件“ 还不太了解这个优化的朋友可以看上一篇帖子 实验 …