k8s认证授权详解

理解认证授权

1.1 为什么要认证

想理解认证,我们得从认证解决什么问题、防止什么问题的发生入手。 
防止什么问题呢?是防止有人入侵你的集群,root你的机器后让我们集群依然安全吗?不是吧,root都到手了,那就为所欲为,防不胜防了。 
其实网络安全本身就是为了解决在某些假设成立的条件下如何防范的问题。比如一个非常重要的假设就是两个节点或者ip之间的通讯网络是不可信任的,可能会被第三方窃取,也可能会被第三方篡改。就像我们上学时候给心仪的女孩传纸条,传送的过程可能会被别的同学偷看,甚至内容可能会从我喜欢你修改成我不喜欢你了。当然这种假设不是随便想出来的,而是从网络技术现状和实际发生的问题中发现、总结出来的。kubernetes的认证也是从这个问题出发来实现的。

1.2 概念梳理

为了解决上面说的问题,kubernetes并不需要自己想办法,毕竟是网络安全层面的问题,是每个服务都会遇到的问题,业内也有成熟的方案来解决。这里我们一起了解一下业内方案和相关的概念。

1.3 什么是授权

授权的概念就简单多了,就是什么人具有什么样的权限,一般通过角色作为纽带把他们组合在一起。也就是一个角色一边拥有多种权限,一边拥有多个人。这样就把人和权限建立了一个关系。

2. kubernetes的认证授权

Kubernetes集群的所有操作基本上都是通过kube-apiserver这个组件进行的,它提供HTTP RESTful形式的API供集群内外客户端调用。需要注意的是:认证授权过程只存在HTTPS形式的API中。也就是说,如果客户端使用HTTP连接到kube-apiserver,那么是不会进行认证授权的。所以说,可以这么设置,在集群内部组件间通信使用HTTP,集群外部就使用HTTPS,这样既增加了安全性,也不至于太复杂。 
对APIServer的访问要经过的三个步骤,前面两个是认证和授权,第三个是 Admission Control,它也能在一定程度上提高安全性,不过更多是资源管理方面的作用。

2.1 kubernetes的认证

kubernetes提供了多种认证方式,比如客户端证书、静态token、静态密码文件、ServiceAccountTokens等等。你可以同时使用一种或多种认证方式。只要通过任何一个都被认作是认证通过。下面我们就认识几个常见的认证方式。

  • 客户端证书认证
    客户端证书认证叫作TLS双向认证,也就是服务器客户端互相验证证书的正确性,在都正确的情况下协调通信加密方案。
    为了使用这个方案,api-server需要用--client-ca-file选项来开启。
  • 引导Token
    当我们有非常多的node节点时,手动为每个node节点配置TLS认证比较麻烦,这时就可以用到引导token的认证方式,前提是需要在api-server开启 experimental-bootstrap-token-auth 特性,客户端的token信息与预先定义的token匹配认证通过后,自动为node颁发证书。当然引导token是一种机制,可以用到各种场景中。
  • Service Account Tokens 认证
    有些情况下,我们希望在pod内部访问api-server,获取集群的信息,甚至对集群进行改动。针对这种情况,kubernetes提供了一种特殊的认证方式:Service Account。 Service Account 和 pod、service、deployment 一样是 kubernetes 集群中的一种资源,用户也可以创建自己的 Service Account。
    ServiceAccount 主要包含了三个内容:namespace、Token 和 CA。namespace 指定了 pod 所在的 namespace,CA 用于验证 apiserver 的证书,token 用作身份验证。它们都通过 mount 的方式保存在 pod 的文件系统中。

2.2 kubernetes的授权

在Kubernetes1.6版本中新增角色访问控制机制(Role-Based Access,RBAC)让集群管理员可以针对特定使用者或服务账号的角色,进行更精确的资源访问控制。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。
目前 Kubernetes 中有一系列的鉴权机制,因为Kubernetes社区的投入和偏好,相对于其它鉴权机制而言,RBAC是更好的选择。具体RBAC是如何体现在kubernetes系统中的我们会在后面的部署中逐步的深入了解。

2.3 kubernetes的AdmissionControl

AdmissionControl - 准入控制本质上为一段准入代码,在对kubernetes api的请求过程中,顺序为:先经过认证 & 授权,然后执行准入操作,最后对目标对象进行操作。这个准入代码在api-server中,而且必须被编译到二进制文件中才能被执行。
在对集群进行请求时,每个准入控制代码都按照一定顺序执行。如果有一个准入控制拒绝了此次请求,那么整个请求的结果将会立即返回,并提示用户相应的error信息。
常用组件(控制代码)如下:

  • AlwaysAdmit:允许所有请求
  • AlwaysDeny:禁止所有请求,多用于测试环境
  • ServiceAccount:它将serviceAccounts实现了自动化,它会辅助serviceAccount做一些事情,比如如果pod没有serviceAccount属性,它会自动添加一个default,并确保pod的serviceAccount始终存在
  • LimitRanger:他会观察所有的请求,确保没有违反已经定义好的约束条件,这些条件定义在namespace中LimitRange对象中。如果在kubernetes中使用LimitRange对象,则必须使用这个插件。
  • NamespaceExists:它会观察所有的请求,如果请求尝试创建一个不存在的namespace,则这个请求被拒绝。

原文地址:http://blog.51cto.com/lookingdream/2108034

时间: 2024-08-29 14:25:22

k8s认证授权详解的相关文章

微信公众平台认证步骤详解及服务号和订阅号区别

微信公众号对象: 企业.媒体.以及公益.社区等组织.机构. 微信公众号作用: 通过微信公众渠道将品牌推广给上亿或者更多的微信用户. 1.极快的传播速度.极少的宣传成本: 2.提高品牌知名度,打造更具影响力的品牌形象. 3.危机公关(越来越需要) 微信公众号怎样认证: 一般企业或个人通过认证除了看努力还得看天意,当然也可以联系一些认证机构去办理相对要简单些.虽然微信公众号的口号是"再小的个体,也有自己品牌",但个体的力量毕竟不如团队的力量-- 认证条件: 1.微信公众号认证需要在业内有一

k8s之yaml详解

k8s之yaml详解 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数据/属性 name: web04-pod #资源的名字,在同一个namespace中必须唯一 labels: #设定资源的标签 k8s-app: apache version: v1 kubernetes.io/cluster-service: "true" annotations: #自

Asp.Net Core 中IdentityServer4 实战之角色授权详解

一.前言 前几篇文章分享了IdentityServer4密码模式的基本授权及自定义授权等方式,最近由于改造一个网关服务,用到了IdentityServer4的授权,改造过程中发现比较适合基于Role角色的授权,通过不同的角色来限制用户访问不同的Api资源,这里我就来分享IdentityServer4基于角色的授权详解. IdentityServer4 历史文章目录 Asp.Net Core IdentityServer4 中的基本概念 Asp.Net Core 中IdentityServer4

k8s应用配置详解

1. 概述 k8s主要通过Object定义各种部署任务(例如:部署应用.部署Ingress路由规则.部署service等等),通过kubectl命令远程操作k8s集群. Object的定义通常以Yaml格式进行描述. Yaml是一种直观的数据序列化格式,主要通过缩进的方式组织数据. Yaml例子: # 注释 house: family: name: Doe parents: # - 开始,表示数组元素 - John - Jane children: - Paul - Mark - Simone

OAuth授权详解,以新浪微博为例

/* //OAuth授权过程: 1.登陆账号 http://open.weibo.com 注册一下开发者信息,成为新浪的开发者 2.点击"移动应用",创建一个应用(勾选应用名称,应用平台就可以了),页面跳转,显示到"开发阶段即可" 3.回到主页面,点击API接口>首页>OAuth2.0授权认证 根据说明点击进入(1)OAuth2/authorize     获取code(使用get请求) 点击进入(2)OAuth2/access_token     获取

【总结】AWS的(助理)架构师认证体系详解

演讲者:黄涛 AWS高级技术讲师 下载地址:MP4完整视频下载 1. 邱洋的总结 AWS的服务和技术繁多,选择适合自己的方向,而不是什么都去学 AWS的学习资源异常丰富,包括视频.免费文档.在线实验.社区以及专家课程(收费) AWS的考试包括助理级和专家级,并且分别针对架构师.开发与运维人员 助理架构师考试主要针对:设计.实施部署.数据安全.故障排除等4个方面进行考核 AWS的架构师考试重点需要掌握7大"云设计架构"如:弹性原则.最小授权原则等等,熟悉这些非常有助于答题(就好比当初考车

linux下搭建DNS子域及相关授权详解

forward功能是本地无法解析的域名,转发给指定DNS服务器 forward only; 所有无法解析的域名,都转发给指定DNS服务器,必须有解析结果 forward first;无法解析的域名,转发给指定DNS服务器,如果指定DNS服务器也无法解析, 再通过自己的DNS服务器向根进行转发解析 forwarders { 指定DNS服务器; }; 如本地DNS无法解析,向指定DNS服务器转发解析域名 注意forward与forwarders同时使用 2.搭建主域与子域,要求如下: A.主域为wi

VPN身份认证协议详解

身份认证技术是VPN网络安全的第一道关卡.对于身份认证,是由身份认证协议来完成的.首先让大家对VPN的身份认证协议有一个感观的认知,把实践和理论结合起来. 1.PAP:密码认证协议 客户端直接发送包含用户名/口令的认证请求,服务器端处理并作回应. 优点:简单.缺点:明文传送,极容易被窃听. 2.SPAP:Shiva密码验证协议 Shiva公司开发,是一种受Shiva远程访问服务器支持的简单加密密码的身份验证协议. 优点:安全性较PAP好.缺点:单向加密.单向认证,虽然是对密码进行加密,但还是会被

sip鉴权认证算法详解及python加密

1. 认证和加密    认证(Authorization)的作用在于表明自己是谁,即向别人证明自己是谁.而相关的概念是MD5,用于认证安全.注意MD5仅仅是个hash函数而已,并不是用于加密.因为hash函数处理后的数据没法进行反向恢复,这样子的话别人没法盗取你认证身份的口令.    加密(Encryption)的作用在于对想传输的数据进行处理,在网络中即使被窃取也难以破解.加密的信息可以被破解,这需要一把钥匙--"密钥".通过密钥,我们可以对数据进行加密和解密.最有名的专用密钥加密系