k8s 安全机制

k8s的安全机制:

核心:分布式集群管理工具,就是容器编排,安全机制的核心:API server 作为整个集群内部通信的中介,也是外控控制的入口。实验的安全机制都是围绕api server来进行设计:

请求api资源:

1,认证

2,鉴权

3,准入机制

三个条件都通过,才开源在k8s集群当中创建。

认证:Anthentcation

HTTP TOKEN:通过token失败合法用户。token是一个很差,很复杂的一个字符串,字符串是用来表达客户的一种方式。

每一个token对应一个用户名,用户名存储在apiserver能够访问的文件中。

客户端发起请求时,http headr包含token。

客户端发起请求----(请求包含)token----apiserver(用户名存储文件)-----解码------用户名-----访问集群。

http base:用户+密码的验证方式。用户名和密码都是通过base64进行加密,加密完成的字符串,http requset的haeder Atuthorization发送给服务端。服务端收到加密字符串,节目,获取用户名和密码,验证通过,登录成功。

https 证书:最严格的方式,也是最严谨的方式。基于CA根证书的客户端进行验证。

认证的访问类型:

k8s组件对api server组件的访问 kubelet kube-proxy

pod对API server的访问。pod coredns dashborad都是pod。也需要访问api

客户端 kubectl

kubelet kube-proxy:

controller manager sheduler 与 api server在一台服务器,可以直接使用api server的非安全端口访问。 (8080端口)

kubectl kubelet kube-proxy都是通过apiserver的https证书,进行双向验证,都是用6443端口进行验证

签发证书:

1,手动签发,二进制部署就是手动签发证书,ca签发---把证书匹配到每个对应组件。如何访问6443即可。

2,自动签发 kubeadm,kubelet第一次访问api server 使用token,token 通过之后,controller manager 会为kubelet生成一个证书,以后都是通过证书访问。kubeadm修改 了证书的有效期。默认1年。

3,kubeconfig 文件包含了集群的参数,CA证书,API server地址,客户端的参数(客户端的证书和私钥),集群的名称和用户名。

k8s中的组件通过启动时自动访问不同的kube config,可以分为不同的集群-----api server----namespace-----资源对象----pod-----容器

kubeconfig即是集群的描述文件,也是一个集群的保存文件,包含了集群的分为方式和认证信息。

~/.kube/config 保存的是kubectl的访问认证信息。

4,serviceAccount:

serviceAccount:就是为了方便pod中的容器访问API server。pod的动作(增删改查)动态的,每个pod手动生成一个证书就不现实了,于是k8s使用了service Account来进行循环认证,serviceAccount包含了统一的认证信息,直接进行api server访问。

5,secret,保存资源对象,

serviceAccount内部,保存的是 token service-account-token

secret保存的是自定义的报名信息。

6,serviceAccount:

1,token

2,ca.crt

3,namespace

二,鉴权:

之前的认证过程,只是确认了双方都是可信的,可以相互通信,鉴权是为了确定请求方的访问权限。

能做哪些指定的操作。

1,AlwaysDeny:拒绝所有,一般是测试

2,AlwaysAllow:允许所有,一般也是用于测试

3,ABAC attribute-based access control 基于属性的访问控制

4,webhook:外部访问集群内部的鉴权方式

5,RBAC role-base access control 基于角色的访问控制,也是k8s默认的规则机制。

角色

role

绑定角色 rolebinding :将角色绑定到指定的命名空间

集群

clusterrole :可以授权所有密码空间的资源限制

绑定集群 clusterrolebinding:将集群的角色绑定到命名空间。

准入控制:

准入控制是API server的一个准入控制器的插入类别,不同的插件可以实现不同的准入控制机制。

一般情况下建议使用官方默认的准入控制器

limitranger 命名空间的配额管理

serviceAccount

resourceQuota:命名空间的配额限制。

3,实验

------------------- 实践:创建一个用户只能管理指定的命名空间 -------------------

//创建一个用户

useradd cheng

passwd cheng

//使用这个用户进行资源操作,会发现连接 API Server 时被拒绝访问请求

su - cheng

kubectl get pods

The connection to the server localhost:8080 was refused - did you specify the right host or port?

//创建用于用户连接到 API Server 所需的证书和 kubeconfig 文件

//先上传证书生成工具 cfssl、cfssljson、cfssl-certinfo 到 /usr/local/bin 目录中

chmod +x /usr/local/bin/cfssl*

mkdir /opt/cheng

cd /opt/cheng

vim user-cert.sh

#API Server 会把客户端证书的 CN 字段作为 User,把 names.O 字段作为 Group

chmod +x user-cert.sh

./user-cert.sh

#/etc/kubernetes/pki/ 目录中会生成 cheng-key.pem、cheng.pem、cheng.csr

cd /etc/kubernetes/pki/

cfssl gencert -ca=ca.crt -ca-key=ca.key -profile=kubernetes /opt/cheng/cheng-csr.json | cfssljson -bare cheng

###############################

cd /opt/cheng

vim rbac-kubeconfig.sh

kubectl create namespace cheng-cloud

chmod +x rbac-kubeconfig.sh

./rbac-kubeconfig.sh 192.168.176.61

使用上下文参数生成 cheng.kubeconfig 文件

kubectl config use-context kubernetes --kubeconfig=cheng.kubeconfig

//查看证书

cat cheng.kubeconfig

mkdir /home/cheng/.kube

cp cheng.kubeconfig /home/cheng/.kube/config

chown -R cheng:cheng /home/cheng/.kube/

//RBAC授权

vim rbac.yaml

kubectl apply -f rbac.yaml

kubectl get role,rolebinding -n cheng-cloud

//切换用户,测试操作权限

su - cheng

vim pod-test.yaml

cheng这个用户,只有对pod 的"get", "watch", "list", "create" 这些权限。

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

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

相关文章

利用nginx宝塔免费防火墙实现禁止国外IP访问网站

本章教程,主要介绍,如何利用nginx宝塔面板中的插件免费防火墙,实现一键禁止国外IP访问网站。 目录 一、安装宝塔插件 二、 开启防火墙 一、安装宝塔插件 在宝塔面板中的软件商店,搜索防火墙关键词,找到Nginx免费防火…

myql入门

目录 安装修改密码学习资料个人git仓库文章视频官网 安装 #移除以前的mysql相关 sudo apt remove --purge mysql-\* #安装mysql sudo apt install mysql-server mysql-client #查看是否启动 systemctl status mysql #手动启动 systemctl start mysql #查看mysql版本 mysql --v…

(Unity)C#的预处理器指令和条件编译符号

C#的预处理器指令 预处理指令主要用于控制编译器的编译过程。它们在编译时被处理,而不是在运行时。这意味着预处理指令可以用来使编译器只编译满足特定条件的代码,或者在编译时输出特定的警告或错误。 #define:定义一个符号。#undef&#xff…

在线教育系统开发:构建现代化学习平台

随着科技的迅速发展,在线教育系统在教育领域扮演着越来越重要的角色。本文将深入探讨在线教育系统的开发过程,涉及关键技术和代码实现。 技术选型 在开始开发之前,我们首先需要选择适合在线教育系统的技术栈。以下是一些常见的技术选项&am…

常见的持久层框架包括

常见的持久层框架包括: Hibernate:Hibernate是Java的关系数据库持久化框架,通过对象关系映射(ORM)将对象和关系数据库进行映射。Hibernate提供了丰富的功能和灵活的查询语言,适用于复杂的数据模型和关系查询…

一些常用的数据备份脚本

Elasticsearch备份 #!/bin/shtodaydate %Y%m%dcurl --location --request PUT http://localhost:22063/_snapshot/es_bak --header Content-Type: application/json --data-raw {"type": "fs","settings":{"compress": true,"lo…

代码随想录算法训练营29期|day31 任务以及具体安排

理论基础 关于贪心算法,你该了解这些! 题目分类大纲如下: #算法公开课 《代码随想录》算法视频公开课 (opens new window):贪心算法理论基础! (opens new window),相信结合视频再看本篇题解,更有助于大家…

tdesign的使用记录

1、复杂表单校验 复杂类型的数据(两级数组) const dataForm ref({configTalkTemplateProblemCoList: [{"id":"1744302859557920769","templateId":"1744302859511783426","parentId":null,"l…

大创项目推荐 题目:基于LSTM的预测算法 - 股票预测 天气预测 房价预测

文章目录 0 简介1 基于 Keras 用 LSTM 网络做时间序列预测2 长短记忆网络3 LSTM 网络结构和原理3.1 LSTM核心思想3.2 遗忘门3.3 输入门3.4 输出门 4 基于LSTM的天气预测4.1 数据集4.2 预测示例 5 基于LSTM的股票价格预测5.1 数据集5.2 实现代码 6 lstm 预测航空旅客数目数据集预…

IO多路复用-epoll

IO多路复用-epoll 1. 概述 epoll 全称 eventpoll,是 linux 内核实现IO多路转接/复用(IO multiplexing)的一个实现。 epoll是select和poll的升级版,相较于这两个前辈,epoll改进了工作方式,因此它更加高效…

P9389 [THUPC 2023 决赛] 烂柯杯 题解

目录 题目背景题目描述输入格式输出格式提示提示题目来源 题目思路AC 代码 题目背景 却说庞统迤逦前进,抬头见两山逼窄,树木丛杂;又值夏末秋初,枝叶茂盛。庞统心下甚疑,勒住马问:“此处是何地?…

问题解决:使用el-upload组件获取File文件,不需要文件上传,action为空会请求本地路径报404

可以自定义上传方法、覆盖默认的上传行为 主要是这个属性 :http-request"uploadFn" <template><span><el-uploadaction"#":on-preview"handlePreview":on-remove"handleRemove":before-remove"beforeRemove"…

WorkPlus AI智能客服解决方案,提升企业服务质量

在当今竞争激烈的商业环境中&#xff0c;提供卓越的客户服务成为企业赢得市场竞争的关键。而AI智能客服技术的不断发展&#xff0c;则成为了提高服务效率和满意度的利器。作为一款领先的AI助理解决方案&#xff0c;WorkPlus AI助理以其出色的性能和智能化的功能&#xff0c;助力…

代码随想录算法训练营打卡day1 |704. 二分查找,27. 移除元素

一、LeetCode 704 二分查找 题目链接&#xff1a;704.二分查找 解法一&#xff1a;左闭右闭 class Solution {public int search(int[] nums, int target) {int left 0, right nums.length-1;while(left < right){ //边界处理&#xff0c;左闭右闭int mid left (right-l…

使用bat批量修改文件名

批处理脚本的目的是将指定文件夹中的所有 .mp3 文件的文件名中的数字部分补零成四位&#xff0c;并将文件重命名为新的文件名。以下是脚本的详细解释&#xff1a; echo off: 这个命令用于关闭命令回显&#xff0c;即在脚本运行时不在命令提示符窗口上显示执行的命令。 setloca…

c++入门学习(十八)赋值运算符

简单赋值运算符&#xff08;&#xff09;&#xff1a; 最基本的赋值运算符是“”。它表示将右侧的值赋给左侧的变量。例如&#xff0c;x 5意味着将值5赋给变量x。 增量赋值运算符&#xff1a; 这是一组在赋值的同时对变量进行递增操作的运算符。常见的有、-、*、/等。例如&…

THM学习笔记——网络工具

ping 当我们想要测试是否可以连接到远程资源时&#xff0c;会使用 ping 命令。 ping 的基本语法&#xff1a; ping <target>。 测试是否可以与百度建立网络连接&#xff1a; traceroute 互联网由许多个不同的服务器和端点组成&#xff0c;它们都相互联网。这意味着&a…

C++(1) 命名空间

文章目录 C1. C 概述2.C 相对于 C 语言的增强2.1C 第一行代码2.2 C 补充 bool 类型2.3 作用域运算符2.4 命名空间 namespace2.4.1 命名空间基本内容和开放性2.4.2 多个命名空间操作2.4.3 命名空间函数定义和实现分离2.4.4 匿名命名空间2.4.5 命名空间别名 C 1. C 概述 C 之父…

写立扣mysql题目收获

练习大纲&#xff1a; 立扣上的sql语句题 学习中的易错点和有趣的题目 总结了下常用的关键词和技巧 SELECT: 用于选择要检索的列。FROM: 用于指定要查询的表。WHERE: 用于过滤行&#xff0c;只返回满足条件的行。GROUP BY: 用于将结果集按一列或多列分组。HAVING: 与GROUP …

《剑指 Offer》专项突破版 - 面试题 29 : 排序的循环链表(C++ 实现)

题目链接&#xff1a;LCR 029. 循环有序列表的插入 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 在一个循环链表中节点的值非递减排序&#xff0c;请设计一个算法在该循环链表中插入节点&#xff0c;并保证插入节点之后的循环链表仍然是排序的。 分析&#xf…