前面说了k8s如何做认证,如何做鉴权,分别判断你是谁,你有什么样的操作权限,你有某个对象的操作权限但是并不代表这个对象是合法的,所以apiserver里面会有更加深层次的一个行为,它还是需要去校验你的对象,这个环节叫做准入。

为资源增加自定义属性


  • 作为多租户集群方案中的一环,我们需要在 namespace的准入控制中,获取用户信息,并将用户信息更新的namespace的annotation。
  • 只有当namespace中有有效用户信息时,我们才可以在namespace创建时,自动绑定用户权限,namespace才可用。

准入控制通常有两种主要的目的,一个是你给了我request,这个request长的这个样子,是你填的所有的属性,但是我从平台的一个层面,我希望给它添加一些附加属性。比如说有些值你没有赋值,我希望给它默认值,或者对其中某些值做调整,那么需要对原始对象去做变形的,也就是增加自定义属性。

还有一种方式就是做完变形之后,或者不变形,不管变不变行我都要去校验你这个对象是否是合法的,包括你自身是不是合法,同时在集群内部的请求是不是合法的。

准入控制使用场景


一个最常用的场景就是配额管理,为什么要做配额管理呢?通常一个集群的管理规模和承受能力是有上线的,集群的计算资源也是有限的。如果将集群给出去,不可能让用户无休止的创建对象,这个是需要管控的,将资源均分。

作为多租户的集群,希望使用配额来做管控来控制谁能够使用多少计算资源。

其次etcd里面有存储配额,它有自己的存储上限,那么就不能让每个用户都无休止的创建对象,创建100w,200w个的话,那么etcd的配额很快就会用完。

超出了配额和认证鉴权没有关系,是准入控制环节出现了问题。

如果对每个namespace都创建resourcequota,那么就能够精确的控制namespace建立多少个对象。这样就能够合理的分配集群的资源。

准入控制(Admission Control)在授权后对请求做进一步的验证或添加默认参数。不同于授权和认证只关心请求的用户和操作,准入控制还处理请求的内容,并且仅对创建、更新、删除或连接(如代理)等有效,而对读操作无效。

准入控制支持同时开启多个插件,它们依次调用,只有全部插件都通过的请求才可以放过进入系统。

准入插件


AlwaysPullImages:总是拉取最新镜像,这个准入控制插件自动的更改你的ImagePullPolicy,只要你的pod一创建就将其改为always。

ImagePolicyWebhook:webhook来决定这个image是不是合法的,这个用于场景通常容器镜像要去做安全扫描,基于安全软件来扫描容器镜像是不是安全的,扫描完之后会出一个结果,这个结果存放在系统里面说这个镜像是否安全,ImagePolicyWebhook就是在建立pod的时候来看容器镜像扫描是不是过了,它的结果通过还是失败,失败就拦截下来。

LimitRanger:一个pod我希望去限制你某个namespace pod所申请的最高资源,限制申请资源的上线和下线,以及它的默认值。

当你创建pod的时候就会去校验你的pod里面资源指定的情况,然后和LimitRanger对象做个整合,是给你塞一个默认值呢还是已经塞好的资源是不是合法。

可以看到有些插件是enable的,有些插件是disable的

准入控制插件的开发


如果默认的插件没有办法满足我的需求,希望在此基础之上做额外的配置,我有自定义的逻辑,有没有什么样的扩展方法。 kubernetess认证,鉴权都支持webhook,那么准入的环节也支持webhook的。

除默认的准入控制插件以外,Kubernetes 预留了准入控制插件的扩展点,用户可自定义准入控制插件实现自定义准入功能。

准入插件有两种,如下:

MutatingWebhookConfiguration∶变形插件,支持对准入对象的修改。(给对象的属性做修改的,它可以修改你的对象)

ValidatingWebhookConfiguration∶校验插件,只能对准入对象合法性进行校验,不能修改。(不修改对象,只做校验,)

当一个对象认证鉴权之后,到了apiserver这里,apiserver会去看admission的配置了,这个配置发现有对应的webhook,它就会往webhook发起一个admission review的request,你要去解析这个admission review,将request拿出来。

如果是mutating webhook,你可能要在原始对象基础上面,它admissionreview基本上就是把整个request都发个你了,比如说是一个pod,那么你就在pod基础上面做一些属性的修改。

修改完之后就要真正的去做校验,所以mutating会先运行,validating会后运行,会去校验变形之后的对象是否合法,validating返回一个是否通过这样的结果给apiserver,apiserver通过之后将这个请求往下传递。

现在k8s支持了MutatingWebHookConfiguration和ValidatingWebHookConfiguration 这两个对象,在这个对象里面就可以定义告诉apiserver我要去mutating,正真要去做mutating的时候这个请求应该发送到哪里去,rules是针对什么样的对象什么操作,比如针对node的create操作去做mutating。

所以通过这种配置,就将整个apiserver这端的配置完成了。

这里面对mutating validating的webhook都有限制,凡是admission的webhook都必须起https的服务,不允许明文的访问。

既然是https的服务,这里就有cabundle,你server端是自签名的证书,那么你要将它对应的ca填在这里面。也就是将server的ca做个base64的encode填在这个cabundle。这样apiserver才能够合法的去访问后端,否则认为后端的服务是不可信任的。

Kubernetes API Server 准入控制相关推荐

  1. kubernetes API Server 权限管理实践

    2019独角兽企业重金招聘Python工程师标准>>> kubernetes API Server 权限管理实践 API Server权限控制方式介绍 API Server权限控制分 ...

  2. 深度剖析Kubernetes API Server三部曲 - part 2

    欢迎来到深入学习Kubernetes API Server的系列文章的第二部分.在上一部分中我们对APIserver总体,相关术语及request请求流进行探讨说明.在本部分文章中,我们主要聚焦于探究 ...

  3. 资深专家深度剖析Kubernetes API Server第2章(共3章)

    欢迎来到深入学习Kubernetes API Server的系列文章的第二部分.在上一部分中我们对APIserver总体,相关术语及request请求流进行探讨说明.在本部分文章中,我们主要聚焦于探究 ...

  4. Kubernetes API Server 之集群安全认证

    文章目录 前言 一.为什么要有 api-server 集群安全认证? 二.安全机制的三个流程 三.HTTP Bearer Token 认证 四.HTTPS 双向证书认证 总结 前言 kubernete ...

  5. 资深专家深度剖析Kubernetes API Server第1章(共3章)

    欢迎来到深入学习Kubernetes API Server的系列文章,在本系列文章中我们将深入的探究Kubernetes API Server的相关实现.如果你对Kubernetes的内部实现机制比较 ...

  6. 深度剖析Kubernetes API Server三部曲 - part 1

    欢迎来到深入学习Kubernetes API Server的系列文章,在本系列文章中我们将深入的探究Kubernetes API Server的相关实现.如果你对Kubernetes 的内部实现机制比 ...

  7. Kubernetes API server工作原理

    作为Kubernetes的使用者,每天用得最多的命令就是kubectl XXX了. kubectl其实就是一个控制台,主要提供的功能: 1. 提供Kubernetes集群管理的REST API接口,包 ...

  8. 理清 Kubernetes 中的准入控制(Admission Controller)

    大家好,我是张晋涛. 在我之前发布的文章 <云原生时代下的容器镜像安全>(系列)中,我提到过 Kubernetes 集群的核心组件 --  kube-apiserver,它允许来自终端用户 ...

  9. 深度剖析Kubernetes API Server三部曲 - part 3

    前言 在本系列的前两部分中我们介绍了API Server的总体流程,以及API对象如何存储到etcd中.在本文中我们将探讨如何扩展API资源. 在一开始的时候,扩展API资源的唯一方法是扩展相关API ...

最新文章

  1. QIIME 2用户文档. 13数据评估和质控Evaluating and controlling(2018.11)
  2. java的知识点32——多线程 并发同步的 性能分析、快乐影院  订票操作
  3. Leetcode: Balanced Binary Tree
  4. Alluxio:2022年大数据五大趋势,多云下数据湖兴起,AI成为主流
  5. jquery的语法结构包括哪几部分?_牙釉质的组织学结构具体包括哪几部分
  6. nginx 工作原理
  7. Thumb指令集与ARM指令集的区别
  8. 三个比较经典的策略: Dual Thrust、R-Breaker、Dynamic Breakout II
  9. 计算机图形学设计线宽代码,计算机图形学画圆并改变线宽.doc
  10. 《根道果:禅修的方法与次第》读后感
  11. Easyui DataGrid 尾行添加合并行
  12. 线性代数 06 克莱默法则
  13. java 八皇后问题以及N皇后问题
  14. 最后1天,包邮送50豆瓣高分Python 好书
  15. 有关QJ_Filecenter在vue中的使用和组件封装
  16. 步进电机控制相关波形记录
  17. 【慧河网络安全组】Web基础题解培训
  18. Vue3学习笔记:了解并使用Pinia状态管理
  19. 国内快速下载keil的pack文件包
  20. 如何由Xubuntu桌面系统还原至Ubuntu系统?

热门文章

  1. [git]tig的安装及使用
  2. scite for php,SCITE配置系列
  3. IP融合网络引领通信变革
  4. mysql slave是什么_是mysql作用
  5. CrashReport(崩溃日志)分析方法
  6. 这是怎样的一个女孩子
  7. 【CSS技巧】文字分散对齐的方法
  8. Could not transfer artifact (https://repo.maven.apache.org/maven2): Received fatal alert: protocol_v
  9. 部署haproxy代理,搭建基于nginx的高性能反向代理群集
  10. 基于PHP的协同办公系统设计