kube-apiserver审计功能介绍及使用
发布网友
发布时间:2023-05-25 23:37
我来回答
共1个回答
热心网友
时间:2024-10-24 01:56
在kubernetes集群中,API Server是操作集群资源的入口,API server的审计功能可以记录每个到达的请求,进而可以帮助集群管理人员记录或者追溯不同用户的日常操作。记录的信息可以包括但不限于以下信息。
API Server的处理包括很多个步骤,认证、限流、鉴权、跨域处理、webhook、审计处理,真正的处理单元、回复响应等等。审计功能是API Server请求处理流水线上的一环,是对API Sever能力的扩展。
如上图所示,审计可以发生在三个位置,其中RequestReceived表示审计单元接受到请求,未将请求下发到下一级流水线单元之前;ResponseComplete表示API Server已经回复了响应body之后; ResponseStarted表示回复了响应头,但未回复响应body之前,只用于long-runtime的请求,如log,watch,exec等。
审计可以通过两种方式记录请求,log和webhook,log是指将请求记录到本地的文件系统,webhook是指将请求记录发送到外部api去处理。
在生产实践中,请求也是可以分优先级的,如configmap的list请求,显然是没有必要将configmap的所有内容都记录下来的。所以对于每一个请求,可以配置不同的审计策略,如None表示不记录该请求,Metadata表示只记录该请求的元信息,其中元信息是指请求的User,URI,类型等等。
审计功能的特性在API Server中默认是开启的,但不配置审计后端,则无法进行日志记录。
审计相关的配置项是直接配置在API Server的命令行参数中的,多达28项。因此这里需要先将功能梳理请求,才能理解这28个配置项。这里以后端日志记录log为例,首先日志要记录到什么地方,随着日志的写入,日志文件的大小逐渐增大,是否要将文件进行拆分,保留多少份拆分日志文件,拆分的日志文件是否要压缩,为了日志文件不占用过多的磁盘资源,需要对旧的日志文件进行清理,这就涉及到日志文件最多保留多少天。 审计单元的处理是否要处理完成后,再将请求移交到到下一步的流水线单元中进行处理,这个就涉及到是否阻塞API Server。
假如log模式设置为batch,就表示要积累一定数量的请求,然后一次性写入,这就涉及到batch相关的配置
假如单个请求的大小过大,是否要对请求进行拆分,这就涉及到truncate相关的配置。
在下图中,将配置项分为3类,通用配置,batch类配置和truncate类配置(未写出webhook类型的配置)。
审计策略
审计功能提供了非常灵活的策略项配置。配置策略的目的就是要精细化得对请求做日志记录,重要的请求,记录的信息要全一些,如create,delete请求,非关键性的请求,可以少记录一些,如leases请求。
审计策略中重要的字段如下 :
下面的配置是在官方审计示例策略的基础上增加了一些配置。
以下是阿里产品文档给的一些示例配置信息
经过上面的分析,审计功能是API Server处理请求流水线的一环,增加审计功能,会增加API Server的内存消耗(官方文档明确写出的),另外log模式配置为默认值blocking的话,会略微增加API Server的响应延迟,所以这里建议使用batch模式。