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

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

目录

一、认证(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

相关文章:

  • yg校园易购电商系统(Go+Vue)
  • DevExpress Installed
  • 人邮学院明日科技web前端开发案例教程(慕课版)第六章习题
  • java kotlin python 日志记录
  • 再度牵手,制造升级 | 毅达科技IMS OS+通用产品集+行业套件项目正式启动!
  • 【乐吾乐3D可视化组态编辑器】用开关控制巡检车和路灯
  • 艾宾浩斯winform单词系统+mysql
  • VMware导入vmdk文件(亲测有效)
  • MATLAB数学建模——数据拟合
  • Vue2事件处理(v-on)
  • 算法:11. 盛最多水的容器
  • 再论企业上ERP和MES的抉择
  • ZCC5429 异步升压芯片
  • C语言调用so/dll动态库
  • JAVA代码审计之SQL注入代码审计
  • emacs初体验
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java到底能干嘛?
  • OSS Web直传 (文件图片)
  • Redis在Web项目中的应用与实践
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 巧用 TypeScript (一)
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 一些css基础学习笔记
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • ionic入门之数据绑定显示-1
  • 大数据全解:定义、价值及挑战
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • # 计算机视觉入门
  • #define与typedef区别
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4)Elastix图像配准:3D图像
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (k8s中)docker netty OOM问题记录
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (论文阅读11/100)Fast R-CNN
  • (四)Linux Shell编程——输入输出重定向
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (五)关系数据库标准语言SQL
  • (转)winform之ListView
  • ***详解账号泄露:全球约1亿用户已泄露
  • **PHP二维数组遍历时同时赋值
  • .Net 6.0 处理跨域的方式
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net和jar包windows服务部署
  • .NET应用架构设计:原则、模式与实践 目录预览
  • /var/log/cvslog 太大