【kubernetes】k8s集群安全机制 保姆级攻略

news2024/11/27 0:15:17

目录

一、认证(Authentication)


Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。API Server 是集群内部各个组件通信的中介, 也是外部控制的入口。所以 Kubernetes 的安全机制基本就是围绕保护 API Server 来设计的
比如 kubectl 如果想向 API Server 请求资源,需要过三关,第一关是认证(Authentication),第二关是鉴权(Authorization), 第三关是准入控制(Admission Control),只有通过这三关才可能会被 K8S 创建资源。

 

一、认证(Authentication)

是对客户端的认证,通俗点就是用户名密码验证

这是安全机制的第一道防线。它负责确认请求者的身份。在 Kubernetes 中,认证通常通过以下几种方式实现:

1.1三种认证方式

  • HTTP Token 认证:通过一个 Token 来识别合法用户

HTTP Token 的认证是用一个很长的特殊编码方式的并且难以被模仿的 Token 字符串来表达客户的一种方式。Token 是一个很长的很复杂的字符串,每一个 Token 对应一个用户名存储在 API Server 能访问的文件中。当客户端发起 API 调用请求时,需要在 HTTP Header 里放入 Token。

 

  • HTTP Base 认证:通过用户名+密码的方式认证

用户名:密码 用 BASE64 算法进行编码后的字符串放在 HTTP Request 中的 Heather Authorization 域里发送给服务端, 服务端收到后进行解码,获取用户名及密码。

 

  • HTTPS 证书认证(最严格):基于 CA 根证书签名的客户端身份认证方式。

 #注:Token 认证和 Base 认证方式只能进行服务端对客户端的单向认证而客户端不知道服务端是否合法;而 HTTPS 证书认证方式 则可以实现双向认证 

 

1.2需要被认证的访问类型:

Kubernetes 组件对 API Server 的访问:kubectl、kubelet、kube-proxy
Kubernetes 管理的 Pod 对 API Server 的访问:Pod(coredns,dashborad 也是以 Pod 形式运行)
 

1.3安全性说明:

Controller Manager、Scheduler 与 API Server 在同一台机器,所以直接使用 API Server 的非安全端口访问(比如 8080 端口)
kubectl、kubelet、kube-proxy 访问 API Server 就都需要证书进行 HTTPS 双向认证,端口号使用 6443(对外访问)

1.4证书颁发:

手动签发:使用二进制部署时,需要先手动跟 CA 进行签发 HTTPS 证书
自动签发kubelet 首次访问 API Server 时,使用 token 做认证,通过后,Controller Manager 会为 kubelet 生成一个证书, 以后的访问都是用证书做认证了

 

1.5kubeconfig

kubeconfig 文件包含集群参数(CA 证书、API Server 地址),客户端参数(上面生成的证书和私钥),集群 context 上下文参数 (集群名称、用户名)。

Kubenetes 组件(如 kubelet、kube-proxy)通过启动时指定不同的 kubeconfig 文件可以切换到不同的集群 ,连接到 apiserver。

也就是说 kubeconfig 文件既是一个集群的描述,也是集群认证信息的填充。包含了集群的访问方式和认证信息。kubectl 文件默认位于 ~/.kube/config

 

1.6Service Account

Service Account是为了方便 Pod 中的容器访问API Server。因为 Pod 的创建、销毁是动态的,所以要为每一个 Pod 手动生成证书就不可行了。 Kubenetes 使用了 Service Account 来循环认证,从而解决了 Pod 访问API Server的认证问题。

1.7Secret 与 SA 的关系

1.7.1Kubernetes 设计了一种资源对象叫做 Secret,分为两类:
  • 用于保存 ServiceAccount 的 service-account-token
  • 用于保存用户自定义保密信息的 Opaque
1.7.2Service Account 中包含三个部分

Token:是使用 API Server 私钥签名的 Token 字符串序列号,用于访问 API Server 时,Server 端认证
ca.crt:ca 根证书,用于 Client 端验证 API Server 发送来的证书
namespace:标识这个 service-account-token 的作用域名空间

默认情况下,每个 namespace 都会有一个 Service Account,如果 Pod 在创建时没有指定 Service Account,就会使用 Pod 所属的 namespace 的 Service Account。每个 Pod 在创建后都会自动设置 spec.serviceAccount 为 default(除非指定了其他 Service Accout)

  

kubectl get sa

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

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

相关文章

CCNA 0基础入门

OSI & TCP/IP OSI参考模型 TCP/IP协议 应用层 ------↓表示层 ------>应用层会话层 ------↑传输层 ------>传输层网络层 ------>网络互联层链路层 ------>网络接口层物理层 ------>↑ 物理层 传输的信号以及网线以及接线 主要作用是产生并检测电…

怎么修改Visual Studio Code中现在github账号

git config --global user.name “你的用户名” git config --global user.email “你的邮箱” git config --global --list git push -u origin your_branch_name git remote add origin

手部出现这4种症状,可能是糖尿病先兆!务必及时监测血糖

糖尿病来袭,手部或先知!出现这 4 种症状,务必尽快监测血糖 第一,手指麻木感明显,当持续性的高血糖损害手部血管与神经末梢时,便会导致手指产生麻木以及刺痛之感。而且随着血糖不断升高,受损的血…

【QT Creator软件】解决中文乱码问题

QT Creator软件解决中文乱码问题 问题描述:Qtcreator安装好后打印中文在控制台输出乱码 在网上也查找了修改编辑器的默认编码为UTF-8,但是仍然没有任何作用,于是有了以下的解决方案 原因剖析:因为项目的编码与控制台的编码不一致…

Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件

打包与运行 window版本上制作 我们要把idea中的程序抽取出来作为一个独立的jar包 把jar包放到服务器上 服务器是长期运行的 我们就能随时访问了 在Maven的生命周期中选择package 打包功能 在资源管理器中查找 java -jar 文件名.jar java -jar 文件名.jar 但是我们在测试…

kotlin 中的字符串

一、字符类访问 1、字符串的访问跟js一样,可以使用索引来访问或者直接循环。 fun main() {val a: String "2024"// 方式一:for (item in a) {println(item) // 输出每一个字符}// 方式二:println("${a[0]}, ${a[1]}, ${a[2…

纯干货科普!水浸传感器品牌该怎么选?

在现代化生产过程中,漏水是常见的安全隐患之一。特别是机房、档案馆等高精密设备较多的场合,一旦没有及时解决漏水问题,就有可能导致线路故障、设备损坏甚至业务办理。绝大部分管理人员会选择安装水浸传感器,它能够帮我们及时检测…

bugku---misc---easy_nbt

1、题目描述 2、下载附件,解压之后得到 3、查找资料发现:NBT文件是Minecraft游戏数据文件,其中包含以命名二进制标签(NBT)格式保存的数据。这种格式用于存储大量二进制数据,通常包含有关Minecraft世界的信息。NBT数据通常以.dat文…

2024 全球软件研发技术大会官宣,50+专家共话软件智能新范式!

2024年的全球软件研发技术大会(SDCon)由CSDN和高端IT咨询与教育平台Boolan联合主办,将于7月4日至5日在北京威斯汀酒店举行。本次大会的主题为“大模型驱动软件智能化新范式”,旨在探讨大模型和开源技术的发展如何引领全球软件研发…

Xmind导入纯文本TXT方法

最近有很多同事咨询我如何在xmind直接导入纯文本txt笔记或者思维导图呢? 解决办法如下: 1.先打开xmind随便打开一个思维导图-文件-导出-marldown 2.选中导出的markdown文件。右键-打开方式-苹果系统选择文本编辑,Win系统选择记事本 3.按照图示…

计算机二级Access选择题考点

在Access中,若要使用一个字段保存多个图像、图表、文档等文件,应该设置的数据类型是附件。在“销售表"中有字段:单价、数量、折扣和金额。其中,金额单价x数量x折扣,在建表时应将字段"金额"的数据类型定义为计算。若…

用Vue3实现一个3D图的在线展示

本文由ScriptEcho平台提供技术支持 项目地址:传送门 代码相关技术博客 应用场景 该代码段用于创建一个带有社交媒体链接的欢迎卡片,用于网站或应用程序的登录页面或主页。 基本功能 该欢迎卡片提供以下功能: 显示欢迎信息和感谢访问网…

25年后回顾融智学新范式(感受人机互助新时代到了的愉悦,体验人机互助新时代的理解和表达的深入浅出)

25年后回顾融智学新范式 (不仅感受人机互助新时代到了的愉悦,更体验人机互助新时代的理解和表达的深入浅出) 一句话概述: 《融智学新范式》是一种创新的理论框架,它提出了协同智能主体的概念框架,通过严…

大模型高级 RAG 检索策略之流程与模块化

我们介绍了很多关于高级 RAG(Retrieval Augmented Generation)的检索策略,每一种策略就像是机器中的零部件,我们可以通过对这些零部件进行不同的组合,来实现不同的 RAG 功能,从而满足不同的需求。 今天我们…

连接查询-外连接(FULL JOIN)、内连接(JOIN)、自身连接

一、表与表之间存在着某种联系,如果一个查询必须在多个表之间完成,则需要用到连接查询 二、连接查询的SQL查询语句 格式: SELECT A1,A2,...,Am FROM R1,R2,..,Rn WH…

大厂Java面试题:详细描述MyBatis缓存的实现原理

大家好,我是王有志。今天给大家带来的是一道来自光大科技的 MyBatis 面试题:详细描述MyBatis缓存的实现原理。 在通过源码分析 MyBatis 一二级缓存的实现原理前,我先给出我的回答。 首先是 MyBatis 一级缓存的实现原理: MyBaits…

Clion控制台打印中文乱码

第一步 第二步 第三步 ctrlaltshift/ 把run.processes,with.pty

文字悬停效果

文字悬停效果 效果展示 CSS 知识点 CSS 变量使用回顾-webkit-text-stroke 属性的运用与回顾 页面整体结构实现 <ul><li style"--clr: #e6444f"><a href"#" class"text">First</a></li><li style"--cl…

NiceGUI:让Python变身为Web应用开发大师的神器

简介 NiceGUI是一个易于使用的基于Python的UI框架&#xff0c;可以在您的Web浏览器中使用。您可以创建按钮、对话框、Markdown、3D场景、图表等等。 NiceGUI开源支持较好&#xff0c;代码更新频率较高&#xff0c;目前已经更新至: V1.4.26。 适用场景 NiceGUI非常适用于各种…

端点物联开发教程之(一)什么是端点物联

目录 一、手机端演示 二、开发套件 三、嵌入式端 四、平台端 五、手机端 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html 物…