k8s之审计日志

news/2024/10/18 18:26:26/

一、为什么要有审计

Kube-Apiserver 的负载突然变高,大量访问失败,集群中到底发生了什么?

当集群发生问题时,这是Metric一般会失效,为了排查以上问题,k8s 提供了两种原生的日志形式——审计(Audit)和事件(Event),它们分别记录了对于集群资源的访问以及集群中发生的事件信息。

二、审计日志简介

k8s在 v1.7 版本中发布了审计(Audit)日志功能,审计(Audit)提供了时序操作记录(包括时间、来源、操作结果、发起操作的用户、操作的资源以及请求/响应的详细信息等)。

K8s 中的审计日志是标准的 JSON 格式,APIServer 会根据具体的日志策略将对应的审计日志保存本地,并可以设置最大保存周期、时间、轮转策略等,一般在/var/log/kube-apiserver目录下。可以参考Audit官方文档(https://kubernetes.io/docs/tasks/debug-application-cluster/audit/)

 

三、审计来源

在 k8s中,所有对集群状态的查询和修改都是通过向 Apiserver 发送请求,对 Apiserver 的请求来源可以分为 4类:

  • 控制面组件,例如 Scheduler,各种 Controller,Apiserver 自身

  • 节点上的各种 Agent,例如 Kubelet、Kube-proxy 等

  • 集群的其它服务,例如 Coredns、Ingress-controller、各种第三方的 Operator 等

  • 外部用户,例如运维人员通过 Kubectl

 

四、审计日志格式

每一条审计日志都是一个 JSON 格式的结构化记录,包括元数据(metadata)、请求内容(requestObject)和响应内容(responseObject)3个部分。其中元数据一定会存在,请求和响应内容是否存在取决于审计级别。

日志记录阶段

审计日志根据日志策略可以选择在事件执行的某个阶段记录,目前支持的事件阶段有:

  • RequestReceived - 接收到事件且在分配给对应 handler 前记录;

  • ResponseStarted - 开始响应数据的 Header 但在响应数据 Body 发送前记录,这种一般应用在持续很长的操作事件,例如 watch 操作;

  • ResponseComplete - 事件响应完毕后记录;

  • Panic - 内部出现 panic 时记录。

日志记录等级

审计日志根据日志策略可以选择事件保存的等级,根据等级不同,APIServer 记录日志的详细程度也不同。目前支持的事件等级有:

  • None - 不记录日志;

  • Metadata - 只记录 Request 的一些 metadata (例如 user, timestamp, resource, verb 等),但不记录 Request 或 Response 的 body;

  • Request - 记录 Request 的 metadata 和 body;

  • RequestResponse - 最全记录方式,会记录所有的 metadata、Request 和 Response 的 body。

日志记录策略

APIServer 支持对每类不同的资源设置不同的审计日志策略,包括日志记录阶段以及日志记录等级,一般都遵循以下原则:

  • 在收到请求后不立即记录日志,当返回体 header 发送后才开始记录;

  • 对于大量冗余的 kube-proxy watch 请求,kubelet 和 system:nodes 对于 node 的 get 请求,kube 组件在 kube-system 下对于 endpoint 的操作,以及 apiserver 对于 namespaces 的 get 请求等不作审计;

  • 对于/healthz_,/version_, /swagger*等只读 url 不作审计;

  • 对于可能包含敏感信息或二进制文件的 secrets,configmaps,tokenreviews 接口的日志等级设为 metadata,该 level 只记录请求事件的用户、时间戳、请求资源和动作,而不包含请求体和返回体;

  • 对于一些如 authenticatioin、rbac、certificates、autoscaling、storage 等敏感接口,根据读写记录相应的请求体和返回体。


http://www.ppmy.cn/news/58046.html

相关文章

关于C#中委托的思考与实例

委托的定义:委托是持有一个或多个方法的对象。 delegate void MyDel(int value);//声明委托类型 MyDel del;//声明委托变量委托的实质:委托的实质其实也是类,同样继承System.Object,这也是委托无论在类内还是类外都能被定义的原因…

【计算几何】判断一条线段和一段圆弧是否相交 C++代码实现

文章目录 一、前言二、线段与圆弧的代码表示2.1 线段代码表示2.2 圆弧代码表示 三、实现思路及数学推导3.1 第一步(粗略判断)3.2 第二步3.3 第三步 四、完整代码五、效果展示 一、前言 最近做项目,需要判断一条线段是否和一段圆弧相交&#…

MySQL库和表

MySQL库操作 创建数据库 语法 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name说明: 大写的表示关键字[ ]是可选项CHARACTER…

win10远程桌面控制Ubuntu服务器 - 内网穿透实现公网远程

文章目录 前言视频教程1. ubuntu安装XRDP2.局域网测试连接3. Ubuntu安装cpolar内网穿透4.cpolar公网地址测试访问5.固定域名公网地址 转载自远程穿透文章:Windows通过RDP异地远程桌面Ubuntu【内网穿透】 前言 XRDP是一种开源工具,它允许用户通过Windows…

linux下安装mysql-8.0.30超级详细

一、下载方式一: MySQL :: Download MySQL Community Server 或者到我的百度网盘中下载---- 链接:https://pan.baidu.com/s/1hZvfZw4S4TqF7XOFu_2ekg?pwdziuu 提取码:ziuu --来自百度网盘超级会员V6的分享 下载方式2---或者使用 -- wget 命令下…

Android9.0 系统Framework发送通知流程分析

1.前言 在android 9.0的系统rom定制化开发中,在systemui中一个重要的内容就是系统通知的展示,在状态栏展示系统发送通知的图标,而在 系统下拉通知栏中展示接收到的系统发送过来的通知,所以说对系统framework中发送通知的流程分析很重要,接下来就来分析下系统 通知从frame…

黑客如何在攻击中使用生成式人工智能以及我们能做些什么?

生成式人工智能 (AI) 最近备受关注。AI 驱动的聊天机器人 ChatGPT 和 VALL-E 等其他支持自然语言处理的系统已将生成 AI 带给了公众,并释放了它的好处和坏处。 关于生成式 AI 的核心担忧之一是它可用于升级恶意攻击并提出更复杂的网络攻击。 那么,黑客…

Ae:画笔工具

画笔工具 Brush Tool 快捷键:Ctrl B 画笔工具 Brush Tool仅能工作在图层 Layer面板上。 双击纯色图层、像素图层等可打开图层面板。 在 Ae 中的每次画笔绘制都将新建一条路径,然后通过对路径的描边来显示绘制结果,故又称为“绘画描边”或“…