Kubernetes APIServer 准入控制

2023-10-11 02:59

本文主要是介绍Kubernetes APIServer 准入控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面说了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 APIServer 准入控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/185034

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

什么是Kubernetes PodSecurityPolicy?

@TOC 💖The Begin💖点点关注,收藏不迷路💖 1、什么是PodSecurityPolicy? PodSecurityPolicy(PSP)是Kubernetes中的一个安全特性,用于在Pod创建前进行安全策略检查,限制Pod的资源使用、运行权限等,提升集群安全性。 2、为什么需要它? 默认情况下,Kubernetes允许用户自由创建Pod,可能带来安全风险。

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

kubernetes集群部署Zabbix监控平台

一、zabbix介绍 1.zabbix简介 Zabbix是一个基于Web界面的分布式系统监控的企业级开源软件。可以监视各种系统与设备的参数,保障服务器及设备的安全运营。 2.zabbix特点 (1)安装与配置简单。 (2)可视化web管理界面。 (3)免费开源。 (4)支持中文。 (5)自动发现。 (6)分布式监控。 (7)实时绘图。 3.zabbix的主要功能

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、