当前位置: 首页 > news >正文

k8s-----17、集群安全机制

1、集群安全机制概述

1.1 访问k8s的三个步骤

  • 1、认证

  • 2、鉴权(授权)

  • 3、准入控制

  • 进行访问的时候,过程中都需要经过apiserver,apiserver做统一协调,比如门卫。且访问过程中需要证书、token、或者用户名+密码。如果需要访问pod,需要serviceAccount。

1.2 认证

  • 传输安全:对外不会暴露8080端口,只能内部访问。对外使用端口6443
  • 认证:客户端身份认证的常用方式有三种: 1>https证书认证,基于ca证书。2> http+token认证,通过token识别用户。3>http基本认证,用户名+密码(不常用,前两种更安全)

1.3 鉴权

  • 基于RBAC进行鉴权操作
  • 基于角色进行访问控制

1.4 准入控制

  • 就是准入控制器的列表,如果该列表有请求内容,通过。没有则拒绝。

2、RBAC(基于角色的访问控制)

在这里插入图片描述

2.1 角色

  • Role,特定命名空间具体操作。 ClusterRole,所有命名空间访问权限
[root@master ~]# kubectl  get ns  # 查看命名空间
[root@master ~]# kubectl create ns role
namespace/role created
[root@master ~]# kubectl  get ns
NAME              STATUS   AGE
default           Active   63d
kube-node-lease   Active   63d
kube-public       Active   63d
kube-system       Active   63d
role              Active   3s
[root@master ~]# kubectl delete ns role 
namespace "role" deleted

2.2 角色绑定

  • roleBinding: 将角色绑定到主体上
  • ClusterroleBinding: 将集群角色绑定到主体

2.3 主体

  • user : 用户
  • group: 用户组
  • serviceAcoount: 服务账号。用于pod访问

3、RBAC实现鉴权

3.1 生成证书文件

#下载并使用cfssl证书生成工具
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64 
mv cfssl_linux-amd64 /usr/local/bin/cfssl 
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson 
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo# 生成自签证书
[root@master mary]# cat ca-config.json 
{"signing": {"default": {"expiry": "87600h"},"profiles": {"kubernetes": {"expiry": "87600h","usages": ["signing","key encipherment","server auth","client auth"]}}}
}
[root@master mary]# cat ca-csr.json 
{"CN": "kubernetes","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "Beijing","ST": "Beijing","O": "k8s","OU": "System"}]
}
[root@master mary]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -  #生成自签证书
2022/05/13 13:47:19 [INFO] generating a new CA key and certificate from CSR
2022/05/13 13:47:19 [INFO] generate received request
2022/05/13 13:47:19 [INFO] received CSR
2022/05/13 13:47:19 [INFO] generating key: rsa-2048
2022/05/13 13:47:19 [INFO] encoded CSR
2022/05/13 13:47:19 [INFO] signed certificate with serial number 533587145625742162082018478504710590695605538243
[root@master mary]# ls
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem  mary-csr.json  rabc-user.sh

3.2 创建命名空间和对应得pod

[root@master ~]# kubectl create ns roledemo
namespace/roledemo created[root@master ~]# kubectl get ns
NAME              STATUS   AGE
roledemo          Active   3s[root@master ~]# kubectl run nginx --image=nginx -n roledemo 
pod/nginx created
[root@master ~]# kubectl get pod -n roledemo 
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          36s

3.3 创建角色

[root@master Roledemo]# vim rbac-role.yaml
[root@master Roledemo]# cat rbac-role.yaml 
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:namespace: roledemoname: pod-reader
rules:
- apiGroups: [""]                  #组resources: ["pods"]              #资源verbs: ["get","watch","list"]    #角色权限[root@master Roledemo]# kubectl apply -f rbac-role.yaml 
role.rbac.authorization.k8s.io/pod-reader created[root@master Roledemo]# kubectl get role -n roledemo 
NAME         CREATED AT
pod-reader   2022-05-13T04:13:46Z

3.4 创建角色绑定

[root@master Roledemo]# vim rbac-rolebinding.yaml
[root@master Roledemo]# cat rbac-rolebinding.yaml 
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata: name: read-podsnamespace: roledemo
subjects: 
- kind: Username: mary # Name is case sensitiveapiGroup: rbac.authorization.k8s.io
roleRef:kind: Role #this must be Role or ClusterRolename: pod-reader # this must match the name of the Role or ClusterRole you wish to bind toapiGroup: rbac.authorization.k8s.io[root@master Roledemo]# kubectl apply -f rbac-rolebinding.yaml 
rolebinding.rbac.authorization.k8s.io/read-pods created
[root@master Roledemo]# kubectl get role,rolebinding -n roledemo    #查看角色和角色绑定
NAME                                        CREATED AT
role.rbac.authorization.k8s.io/pod-reader   2022-05-13T04:13:46ZNAME                                              ROLE              AGE
rolebinding.rbac.authorization.k8s.io/read-pods   Role/pod-reader   25s

3.5 使用证书识别身份


[root@master ~]# mkdir mary         #充当用户文件夹
[root@master ~]# cd mary/   #目录下需要所有的ca文件
[root@master mary]# cat mary-csr.json 
{"CN": "mary","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "BeiJing","ST": "BeiJing"}]
}[root@master mary]# vim rabc-user.sh   ##rbac鉴权文件
[root@master mary]# cat rabc-user.sh 
cat > mary-csr.json <<EOF
{"CN": "mary","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "BeiJing","ST": "BeiJing"}]
}
EOFcfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes mary-csr.json | cfssljson -bare mary kubectl config set-cluster kubernetes \--certificate-authority=ca.pem \--embed-certs=true \--server=https://192.168.172.128:6443 \--kubeconfig=mary-kubeconfigkubectl config set-credentials mary \--client-key=mary-key.pem \--client-certificate=mary.pem \--embed-certs=true \--kubeconfig=mary-kubeconfigkubectl config set-context default \--cluster=kubernetes \--user=mary \--kubeconfig=mary-kubeconfigkubectl config use-context default --kubeconfig=mary-kubeconfig## 执行
[root@master mary]# bash rabc-user.sh 
2022/05/13 13:53:26 [INFO] generate received request
2022/05/13 13:53:26 [INFO] received CSR
2022/05/13 13:53:26 [INFO] generating key: rsa-2048
2022/05/13 13:53:26 [INFO] encoded CSR
2022/05/13 13:53:26 [INFO] signed certificate with serial number 697056282839922252602077574108282807182420364565
2022/05/13 13:53:26 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
Cluster "kubernetes" set.
User "mary" set.
Context "default" created.
Switched to context "default".
[root@master mary]# ls   ##生成了mary-kubeconfig文件
ca-config.json  ca-csr.json  ca.pem    mary-csr.json  mary-kubeconfig  rabc-user.sh
ca.csr          ca-key.pem   mary.csr  mary-key.pem   mary.pem[root@master mary]# cat mary-kubeconfig  ##里面是证书内容

3.6测试

#只有查看pod得权限,所以查看svc是没有任何东西的(不对)   #应该是这里只是使用了文件夹模拟,所以出错。需要真实得用户
[root@master mary]# kubectl get pod -n roledemo 
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          140m
[root@master mary]#  kubectl create  service clusterip test --clusterip="None" -n roledemo# 创建svc测试
[root@master mary]# kubectl get svc -n roledemo   # 但是不对
NAME   TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
test   ClusterIP   None         <none>        <none>    25m

相关文章:

k8s-----17、集群安全机制

1、集群安全机制概述 1.1 访问k8s的三个步骤 1、认证 2、鉴权(授权) 3、准入控制 进行访问的时候&#xff0c;过程中都需要经过apiserver&#xff0c;apiserver做统一协调&#xff0c;比如门卫。且访问过程中需要证书、token、或者用户名密码。如果需要访问pod&#xff0c;…...

蓝桥算法赛(铺地板)

问题描述 小蓝家要装修了&#xff0c;小蓝爸爸买来了很多块&#xff08;你可以理解为数量无限&#xff09; 23 规格的地砖&#xff0c;小蓝家的地板是 nm 规格的&#xff0c;小蓝想问你&#xff0c;能否用这些 23 的地砖铺满地板。 铺满地板&#xff1a;对于地板的每个区域&…...

浅谈AcrelEMS-GYM文体建筑能效管理解决方案-安科瑞 蒋静

1 概述 AcrelEMS-CA 文体建筑能效管理聚焦建筑的能量和信息的流向搭建平台解决方案。该系统解决方案集变电站综合自动化、电力监控、电能质量分析及治理、电气安全、能耗分析、照明控制、设备运维于一体。打破子系统孤立&#xff0c;配置方便&#xff0c;运维便捷&#xff1b;…...

在LayerUI中使用onChange事件监听复选框的值变化

在LayerUI中&#xff0c;你可以使用onChange事件监听复选框的值变化。当复选框的状态发生变化时&#xff0c;onChange事件会被触发。 以下是一个示例代码&#xff0c;演示了如何使用onChange事件监听复选框的值变化&#xff1a; jsx import React from react; import { Chec…...

决策树--ID3算法

决策树–ID3算法 概念 &#xff08;1&#xff09;信息熵 E n t r o p y ( x ) − ∑ i N c l a s s P ( x i ) l o g 2 P ( x i ) Entropy(x) -\sum_{i}^{N_{class}}P(x_i)log_2 P(x_i) Entropy(x)−i∑Nclass​​P(xi​)log2​P(xi​) 假设只有2个类别&#xff08;N2&…...

js延时加载有哪些方式

...

VSCode运行python提示No module name ‘xxx‘

在进行from * import *导入操作时&#xff0c;编辑器能够解析到module, 但是在编辑器中运行时确提示。 No module name xxx 而且单独运行该文件&#xff0c;或在其他编辑器、或terminal中python file运行&#xff0c;都能正常导入module. 解决方案&#xff1a; 在vscode的用…...

【网安大模型专题10.19】※论文5:ChatGPT+漏洞定位+补丁生成+补丁验证+APR方法+ChatRepair+不同修复场景+修复效果(韦恩图展示)

Keep the Conversation Going: Fixing 162 out of 337 bugs for $0.42 each using ChatGPT 写在最前面背景介绍自动程序修复流程Process of APR (automated program repair)1、漏洞程序2、漏洞定位模块3、补丁生成4、补丁验证 &#xff08;可以学习的PPT设计&#xff09;经典的…...

C盘满了怎么清理文件?

电脑的C盘是我们电脑存储系统文件和应用程序的一个重要盘符&#xff0c;很多人经常会遇到C盘空间不足的问题&#xff1b;虽然我们可以通过卸载程序或者删除文件来释放空间&#xff0c;但是在这个过程中往往会误删掉一些重要的文件&#xff0c;造成部分程序可能无法正常使用。 因…...

pytest方法间变量值传递--request夹具

相当于self对象&#xff0c;因为调试的时候测试用例是类似沙箱的单步运行&#xff0c;所以self对象的属性被阻挡在沙箱外边。 request.cls 是pytest中的一个属性&#xff0c;它允许您在测试类中共享数据或属性。当您使用pytest编写测试类时&#xff0c;request 夹具允许您在测…...

Linux 内核定时器(高级字符设备五)

一、Linux 内核定时器介绍 在 Linux 内核中很多函数是基于定时器进行驱动的&#xff0c;但是内核定时器的精度并不高&#xff0c;所以不能作为高精度定时器使用。并且内核定时器的运行没有周期性&#xff0c;到达计时终点后会自动关闭。如果要实现周期性定时&#xff0c;就要在…...

「快学Docker」Docker镜像和容器的创建与管理

「快学Docker」Docker镜像和容器的创建与管理 引言什么是Docker镜像&#xff1f;镜像获取和使用镜像获取镜像使用 什么是Docker容器&#xff1f;Docker容器与主机之间的交互基于Dockerfile创建镜像基于镜像创建容器总结 引言 Docker镜像和容器是当今云计算领域中最受欢迎的技术…...

Zabbix出现 404Not FoundThe requested URL /zabbix was not found on this server.

目录 一、问题&#xff1a; 二、原因&#xff1a; 三、解决方法&#xff1a; 一、问题&#xff1a; Not Found The requested URL /zabbix was not found on this server. 二、原因&#xff1a; 未找到 在此服务器上找不到请求的 URL /zabbix。 /etc/httpd/conf.d 目录…...

【STM32】标准库的引入

一、为什么要会有标志外设库 1、传统单片机软件开发方式 (1)芯片厂商提供数据手册、示例代码、开发环境 (2)单片机软件工程师面向产品功能&#xff0c;查阅数据手册&#xff0c;参考官方示例代码进行开发 (3)硬件操作的方式是用C语言对寄存器进行读写以操作硬件 (4)主要工作量…...

Redis的淘汰策略

Redis是一种基于内存的高性能键值存储数据库&#xff0c;由于内存资源有限&#xff0c;当Redis中的数据量增大时&#xff0c;会导致内存占用过多&#xff0c;可能会影响系统的性能和稳定性。为了解决这个问题&#xff0c;Redis提供了一些淘汰策略来自动清理不再使用的key&#…...

Linux友人帐之日志与备份

一、日志 1.1概述 日志文件是重要的系统信息文件&#xff0c;其中记录了许多重要的系统事件&#xff0c;包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。日志对于安全来说也很重要&#xff0c;它记录了系统每天发生的各种事情&#…...

git中如何在父仓库提交子仓库的修改

子仓库在父仓库中进行了修改&#xff0c;你需要按照以下步骤提交子仓库的修改&#xff1a; 切换到子仓库目录&#xff1a;使用cd命令进入子仓库所在的目录。拉取子仓库的最新更改&#xff1a;使用git pull命令拉取子仓库的最新更改&#xff0c;确保你的本地是最新的版本。提交…...

【【萌新的SOC学习之SD卡DMA回路读写大数据的实验】】

萌新的SOC学习之SD卡读写大数据的实验 记得先设定 FIFO 的位宽和深度 还有DMA 的大小 其他基本结构设计参照上一个SD卡读写小数据的实验 #include "xparameters.h" //包含vivado所导出的信息包含vivado的基地址 #include "xil_printf.h" //调用打印函…...

在k8s中 ,数据包是怎么从外部流转进入到pod的?

在 Kubernetes 中&#xff0c;当您创建 NodePort 类型的服务时&#xff0c;流量不会直接从主机的 IP 和端口转发到特定 Pod 的 IP 和端口。相反&#xff0c;流量被转发到集群中的一个节点&#xff0c;然后从那里转发到相应的 Pod。 1、当您创建 NodePort 类型的服务时&#xf…...

微信小程序设置 wx.showModal 提示框中 确定和取消按钮的颜色

wx官方提供的 showModal 无疑是个非常优秀的选择提示工具 但是 我们还可以让他的颜色更贴近整体的小程序风格 cancelColor 可以改变取消按钮的颜色 confirmColor 则可以控制确定按钮的颜色 参考代码如下 wx.showModal({cancelColor: #0000FF,confirmColor: #45B250,content:…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中&#xff0c;如果使用的模块多&#xff0c;一个文件内会有很多代码&#xff0c;不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里&#xff0c;在.h文件里提供外部可调用函数声明&#xff0c;其他.c文…...

【Java多线程从青铜到王者】单例设计模式(八)

wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本&#xff0c;sleep也是可以指定时间的&#xff0c;也就是说时间一到就会解除阻塞&#xff0c;继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒)&#xff0c;wait能被notify提前唤醒&#xf…...