TKE 审计日志分析

最近更新时间:2025-07-08 10:25:42

我的收藏

简介

腾讯 Kubernetes 引擎(TKE)是腾讯云提供的高性能、可扩展的容器管理服务,帮助用户轻松部署和管理容器化应用。在使用 TKE 的过程中,系统会生成大量的审计日志,这些日志详细记录了集群中的操作行为,包括用户的请求操作时间资源变更访问权限等信息(完整日志字段说明请参见 日志字段说明)。CLS 日志服务与 TKE 紧密集成,支持将 TKE 审计日志实时采集至 CLS,借助 CLS 强大的日志分析能力,您可以实现对集群安全性和合规性的监控、操作行为的审计、异常活动的检测以及资源使用情况, 如:
集群中的某个应用被删除了,谁操作的?
Apiserver 的负载突然变高,大量访问失败,集群中到底发生了什么?
集群节点被封锁了,是谁在什么时候操作的?
通过本篇实践,您将详细了解如下内容:
您也可通过以下 Demo, 快速体验 CLS 与 TKE 的强大结合:
审计总览: 观测整个集群 APIserver 操作。
节点操作概览:于排查节点相关问题。
K8s 对象操作概览:排查 K8s 对象(例如某个工作负载)的相关问题。
多维度操作审计分析: 观测某个维度下审计日志的分布趋势。

功能优势

开箱即用集群审计分析仪表盘, 仪表中包含 TKE 操作类型分布操作状态码分布敏感操作用户等分析看板。

采集 TKE 审计日志

步骤1:进入 TKE 云产品中心

2. 在左侧导航栏中,单击云产品中心,进入云产品中心页面。
3. 云产品日志,找到容器服务 TKE,并单击进入容器服务 TKE 云产品中心。


步骤2:开启 TKE 集群审计日志采集

1. 在 TKE 云产品中心中,在集群列表中找到目标集群,若采集组件状态为未安装,单击安装,安装日志采集组件。

注意:
安装日志采集组件将在集群 kube-system 命名空间下,以 DaemonSet 的方式部署一个 tke-log-agent 的 pod 和一个 cls-provisioner 的 pod。请为每个节点至少预留0.1核16Mib以上的可用资源。
2. 若采集组件状态为最新,单击集群名称,进入集群详情页,并在集群详情页中找到集群审计日志。



3. 单击开启集群审计日志,并进入集群审计日志配置流程。
4. 进入审计日志配置流程,在日志主题配置步骤中,您可选择已有或创建用于存储日志的日志主题。日志主题的相关信息请参见 日志主题

5. 完成日志主题配置后, 单击下一步进入索引配置,索引的相关信息请参见 索引
索引配置中的配置信息如下:
索引状态:确认是否开启索引, 以使用日志检索等分析功能。
全文索引:确认是否需要设置大小写敏感。全文分词符:默认为"@&()='",;:<>[]{}/ \\n\\t\\r",确认是否需要修改。
是否包含中文:确认是否开启。
键值索引:您可根据 key 名按需进行字段类型、分词符以及是否开启统计分析的配置。若您需要开启键值索引,可打开开关。


注意:
检索必须开启索引配置,否则无法检索。
若需要基于日志字段检索日志,需配置键值索引。
若需要基于日志字段进行统计分析,需配置键值索引,并开启统计。
索引规则编辑后仅对新写入的日志生效,已有数据不会更新。

查看 TKE 审计分析仪表盘

完成 开启 TKE 审计日志采集 后,CLS 针对 TKE 审计场景提供了四款开箱即用的预置仪表盘。
审计总览: 用于观测整个集群 APIserver 操作。



节点操作概览:用于排查节点相关问题。



K8s 对象操作概览:用于排查 K8s 对象(例如某个工作负载)的相关问题。



多维度操作审计分析: 用于观测某个维度下集群操作的分布趋势。



您可通过以下操作查看以上 TKE 审计预置仪表盘
2. 在左侧导航栏中,选择仪表盘 > 仪表盘列表 > 预置仪表盘,搜索 “TKE 审计日志”。




检索分析集群审计日志

1. 完成 开启 TKE 审计日志采集 后,在集群列表中,找到已开启集群审计日志的集群, 单击集群名称进去集群详情页。
2. 在集群详情页中,单击日志管理,并找到集群审计日志模块。



3. 单击审计日志,跳转日志检索页,即可检索分析目标集群审计日志。日志字段说明请参见 日志字段说明




日志字段说明

审计日志记录了对 kube-apiserver 的访问事件,会按顺序记录每个用户、管理员或系统组件影响集群的活动。每一条审计日志是一个 JSON 格式的结构化记录,包括元数据(metadata)、请求内容(requestObject)和响应内容(responseObject)三个部分。其中元数据(包含了请求的上下文信息,例如谁发起的请求、从哪里发起的、访问的 URI 等信息)一定会存在,请求和响应内容是否存在取决于审计级别。通过日志可以了解到以下内容:
集群里发生的活动。
活动的发生时间及发生对象。
活动的触发时间、触发位置及观察点。
活动的结果以及后续处理行为。
{
"kind":"Event",
"apiVersion":"audit.k8s.io/v1",
"level":"RequestResponse",
"auditID":0a4376d5-307a-4e16-a049-24e017******,
"stage":"ResponseComplete",
// 发生了什么
"requestURI":"/apis/apps/v1/namespaces/default/deployments",
"verb":"create",
// 谁发起的
"user":{
"username":"admin",
"uid":"admin",
"groups":[
"system:masters",
"system:authenticated"
]
},
// 从哪里发起
"sourceIPs":[
"10.0.6.68"
],
"userAgent":"kubectl/v1.16.3 (linux/amd64) kubernetes/ald64d8",
// 发生了什么
"objectRef":{
"resource":"deployments",
"namespace":"default",
"name":"nginx-deployment",
"apiGroup":"apps",
"apiVersion":"v1"
},
// 结果是什么
"responseStatus":{
"metadata":{
},
"code":201
},
// 请求及返回具体信息
"requestObject":Object{...},
"responseObject":Object{...},
// 什么时候开始/结束
"requestReceivedTimestamp":"20xx-04-10T10:47:34.315746Z",
"stageTimestamp":"20xx-04-10T10:47:34.328942Z",
// 请求被接收/拒绝的原因是什么
"annotations":{
"authorization.k8s.io/decision":"allow",
"authorization.k8s.io/reason":""
}
}

实践场景案例

案例1:集群中的 Nginx 应用被删除了,谁操作的?

1. 参见 查看 TKE 审计分析仪表盘,打开 K8s 对象操作概览仪表盘,在日志主题中选择审计日志存储的日志主题,指定操作类型为 delete 和资源对象 nginx。



2. 重要操作列表图表中,可以看到查询结果如下图所示:

由图可见,是 10001****7138 这个账号,对应用「nginx」进行了删除。可根据账号 ID 在 访问管理 > 用户 > 用户列表 中找到关于此账号的详细信息。

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

1. 参见 查看 TKE 审计分析仪表盘,打开 聚合检索仪表盘,该仪表盘提供了从用户、操作类型、返回状态码等多个维度对于 Apiserver 访问聚合趋势图。
操作用户分布趋势图:

操作类型分布趋势图:

状态码分布趋势图:

2. 通过以上图表得知,用户tke-kube-state-metrics的访问量远高于其他用户,并且在“操作类型分布趋势”图中可以看出大多数都是 list 操作,在“状态码分布趋势”图中可以看出,状态码大多数为403,根据tke-kube-state-metrics关键词,检索日志。

结合业务日志可知,由于 RBAC 鉴权问题导致tke-kube-state-metrics组件不停地请求 Apiserver 重试,导致 Apiserver 访问剧增。

案例3:集群节点被封锁了,是谁在什么时候操作的?

1. 参见 查看 TKE 审计分析仪表盘,打开 节点操作概览仪表盘,填写被封锁的节点名。


2. 在封锁操作列表图表中, 可以看到查询结果如下图所示:

由图可见,是10001****7138这个账号在20xx-xx-30T06:22:18时对172.16.18.13这台节点进行了封锁操作。