为普通用户授权访问k8s资源(tls,rbac)

需求

为指定用户授权访问不同命名空间权限,例如:给新入职的员工zhangsan,添加权限,先给小的查询权限(default空间的pod读取权限),熟悉后,再给大的权限(所有的空间的pod的读写权限)

实施步骤:

  1. 为用户签发证书
  2. 生成kubeconfig文件
  3. RBAC授权
  4. 测试

实操步骤(带命令)

为用户签发证书

为了让普通用户能够通过认证并调用 API,需要执行几个步骤。 首先,该用户必须拥有 Kubernetes 集群签发的证书, 然后将该证书提供给 Kubernetes API。

创建私钥

[root@k8s-master access]# openssl genrsa -out zhangsan.key 2048
Generating RSA private key, 2048 bit long modulus
...........+++
.............................................................+++
e is 65537 (0x10001)
# CN 是用户名,O 是该用户归属的组,很关键
[root@k8s-master access]# openssl req -new -key zhangsan.key -out zhangsan.csr -subj "/CN=zhangsan/O=OPPO_CKA"

使用k8s集群的ca签发证书

[root@k8s-master access]# openssl x509 -req -in zhangsan.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -days 3650 -CAcreateserial -out zhangsan.crt 
Signature ok
subject=/CN=zhangsan/O=OPPO_CKA
Getting CA Private Key

注意

  1. CA是apiserver中的--client-ca-file的配置值

验证证书是否有效:

[root@k8s-master access]# openssl verify -CAfile /etc/kubernetes/pki/ca.crt zhangsan.crt
zhangsan.crt: OK

生成kubeconfig文件

kubeconfig 文件包含以下三部分:

  • clusters:name、ca、server
  • users:name、证书、私钥
  • contexts:name、cluster、user
# 生成cluster的信息(ca、server)
kubectl config --kubeconfig=zhangsan_kcf set-cluster cluster1 --server=https://10.90.118.39:6443  --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true# 生成user的信息(用户名、证书、私钥)
kubectl config --kubeconfig=zhangsan_kcf set-credentials zhangsan --client-key=zhangsan.key --client-certificate=zhangsan.crt --embed-certs=true# 生成context信息(即将集群与用户“关联”起来)
kubectl config --kubeconfig=zhangsan_kcf set-context zhangsan@cluster1 --cluster=cluster1 --user=zhangsan# 指定要使用的context
kubectl config --kubeconfig=zhangsan_kcf use-context zhangsan@cluster1

测试

将zhangsan_kcf这个kubeconfig文件下发给张三,张三拿到该文件后即可测试

# 提示资源访问没权限,说明认证已经通过了
[root@k8s-slave1 tmp]# k get po --kubeconfig=zhangsan_kcf
Error from server (Forbidden): pods is forbidden: User "zhangsan" cannot list resource "pods" in API group "" in the namespace "default"

RBAC授权

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

kubectl create role default_read --verb=get,list --resource=pods -n default
# 将role绑定到--user上
kubectl create rolebinding zhangsan-default_read --role=default_read --user=zhangsan  -n default
# 或者  将role绑定到--group上
kubectl create rolebinding g-OPPO_CKA-default_read --role=default_read --group=OPPO_CKA -n default

再次测试

[root@k8s-slave1 tmp]# kubectl get po --kubeconfig zhangsan_kcf
NAME        READY   STATUS    RESTARTS     AGE
busybox01   1/1     Running   1 (9h ago)   21h
busybox02   1/1     Running   1 (9h ago)   21h

如上测试通过。

指定kubeconfig文件有多种方式,优先级从高到底:

  1. 命令通过--kubeconfig选项指定
  2. 设置KUBECONFIG环境变量
  3. 将文件重命名放到kubectl的默认路径下:~/.kube/config

附录

为用户签发证书

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

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

相关文章

聊一聊如何在Vue中使用事件总线( Event Bus)进行组件间通信

事件总线模式允许不同的组件之间进行通信。它要求一个中央枢纽,组件可以通过它发送和接收事件,从而使组件之间的数据交换和交互更加顺畅。本文探讨了它的使用方法,以便开发人员能够充分利用它在Vue开发中的潜力。 跨通信是应用程序中组件之间…

STM32F4X定时器之基本定时器

一、定时器的概述 进行有规律的计数,每记一次数的时间都是固定的 定时器的本质:计数的总时间 记一次数的时间(时钟的频率) * 记多少次(重装载值)。 基本定时器属于片上外设,系统滴答定时器是…

GitHub下载太慢的解决方案

修改hosts文件: windows的hosts文件在 C:\Windows\System32\drivers\etc\hosts cmd管理员运行命令notepad C:\Windows\System32\drivers\etc\hosts 然后cmd命令重启网络ipconfig /flushdns windows修改hosts Ubuntu22.04修改hosts sudo vim /etc/hosts # This fil…

Java面试题-Java核心基础-第九天(泛型)

目录 一、泛型的理解 二、泛型的作用 三、泛型有哪些使用方式 四、上限、下限通配符的使用 五、泛型的原理 一、泛型的理解 泛型在jdk5中开始有的,泛型其实就是将类型进行参数话,使得类型在编译时就确定了,这种类型参数可以用在类、接口…

解决Docker安装MySQL不区分大小写问题

Docker安装MySQL忽略大小写问题的问题 连接MySQL: 查看当前mysql的大小写敏感配置 show global variables like %lower_case%; ------------------------------- | Variable_name | Value | ------------------------------- | lower_case_file_system …

openEuler 服务器安装 JumpServer (all-in-one 模式)

openEuler 服务器安装 JumpServer JumpServer 简介什么是 JumpServer ?JumpServer 的各种类型资产JumpServer 产品特色或优势JumpServer 符合 4A 规范 JumpServer 系统架构应用架构组件说明 JumpServer 安装部署环境要求网络端口网络端口列表防火墙常用命令 在线脚本…

LeetCode 414. Third Maximum Number【数组】简单

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

vlookup函数踩坑(wps)

使用wps的朋友看过来 vlookup函数踩坑,vlookup(查找值,查找范围,返回值的索引,精确查找or模糊查找) 我们要查找的数据的那一列,必须是查找范围的第一列! 案例,看下面的…

02、Python 字符串

目录 字符串的基础用法字符串包含引号字符串拼接获取用户输入长字符串原始字符串字节串字符串与字节串转换 字符串的基础用法 列字符串的内容几乎可以包含任何字符,英文字符也行,中文字符也行。 既可用单引号,也可用双引号 字符串包含引号…

shell的for循环与结构化

shell笔记 列表for循环不带列表for循环for循环举例1.例1 所有文件名大写替换为小写2. 例2 读取/etc/passwd文件,依次输出ip段3. 例3 读取/etc/hosts内容for循环,执行ping4. 例4 循环ip列表,输出对应编号5. 例5 批量添加用户 break1. 例1 brea…

C++ vector 的模拟实现

目录 1. vector 类的成员变量 2. 无参构造 3. 析构函数 4. size_t capacity() 5. size_t size() 6. void reserve(size_t n) 7. 迭代器 8. void push_back(const T& x) 9. T& operator[](size_t pos) 10. iterator insert(iterator pos, const T& val…

使用Redis发布订阅模式实现 Session共享

其实并不是实现session共享,而是通过redis的发布订阅,让所有集群的服务器,都让自己的session发送一下消息。比如说userId在第35台服务器上, 有100台服务器,那么第1台服务器收到消息,需要通知userId&#xf…

vue 组件封装 综合案例2

vue 组件封装 综合案例2 main.js import Vue from vue import App from ./App.vueVue.config.productionTip false//封装全局指令 focus Vue.directive(focus, {// 指令所在的dom元素,被插入到页面中时触发inserted(el) {el.focus();} })new Vue({render: h >…

MySQL 三大日志(bin log、redo log、undo log)

redo log redo log (重做日志) 是 InnoDB 存储引擎独有的,它让 MySQL有了崩溃恢复的能力,是事务中实现 持久化的重要操作 比如 MySQL 实例宕机了,重启时,InnoDB 存储引擎会使用 redo log 恢复数据,保证数据的持久性与…

设计模式——七大原则详解

目录 设计模式单一职责原则应用实例注意事项和细节 接口隔离原则应用实例 依赖倒转(倒置)原则基本介绍实例代码依赖关系传递的三种方式注意事项和细节 里氏替换原则基本介绍实例代码 开闭原则基本介绍实例代码 迪米特法则基本介绍实例代码注意事项和细节…

golang笔记17--编译调试go源码

golang笔记17--编译调试go源码 前置条件编译源码在 fmt 包中加自定义函数说明 当前go语言越来越流行了,各大厂商都有加大go工程师的需求,作为go语言的学习者,我们除了要了解如何使用go语言外,也有必要了解一下如何编译、调试go源码…

解决XXLJOB重复执行问题--Redis加锁+注解+AOP

基于Redis加锁注解AOP解决JOB重复执行问题 现象解决方案自定义注解定义AOP策略redis 加锁实践 现象 线上xxljob有时候会遇到同一个任务在调度的时候重复执行,如下图: 线上JOB服务运行了2个实例,有时候会重复调度到同一个实例,有…

交换机端口灯常亮 端口up状态 服务器设置ip交换机获取不到服务器网卡mac地址 不能通信

环境: 深信服防火墙 8.0.75 AF-2000-FH2130B-SC S6520X-24ST-SI交换机 version 7.1.070, Release 6530P02 问题描述: 交换机一个vlan下有3台服务器,连接端口2、3、4,2和3连接的服务器正常,交换机3端口灯常亮 端口up状态 服务器自动获取不了地址,改为手动设置ip后,交…

力扣labuladong——一刷day01

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、21. 合并两个有序链表二、力扣86. 分隔链表三、力扣23. 合并 K 个升序链表四、力扣删除链表的倒数第 N 个结点 前言 一、21. 合并两个有序链表 /*** Defin…

微信小程序 onLoad和onShow的区别

在微信小程序中,onLoad() 和 onShow() 是两个常用的生命周期函数,用于监听页面的加载和显示事件。这两个函数的区别如下: 触发时机 onLoad() 函数只会在页面加载时触发一次,而 onShow() 函数每次页面显示时都会被触发。因此&#…