简介
腾讯 Kubernetes 引擎(TKE)是腾讯云提供的高性能、可扩展的容器管理服务,帮助用户轻松部署和管理容器化应用。在使用 TKE 的过程中,系统会生成大量的审计日志,这些日志详细记录了集群中的操作行为,包括用户的请求、操作时间、资源变更、访问权限等信息(完整日志字段说明请参见 日志字段说明)。CLS 日志服务与 TKE 紧密集成,支持将 TKE 审计日志实时采集至 CLS,借助 CLS 强大的日志分析能力,您可以实现对集群安全性和合规性的监控、操作行为的审计、异常活动的检测以及资源使用情况, 如: 集群中的某个应用被删除了,谁操作的?
Apiserver 的负载突然变高,大量访问失败,集群中到底发生了什么?
集群节点被封锁了,是谁在什么时候操作的?
通过本篇实践,您将详细了解如下内容:
您也可通过以下 Demo, 快速体验 CLS 与 TKE 的强大结合:
审计总览: 观测整个集群 APIserver 操作。 功能优势
开箱即用集群审计分析仪表盘, 仪表中包含 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 审计分析仪表盘
审计总览: 用于观测整个集群 APIserver 操作。
节点操作概览:用于排查节点相关问题。
K8s 对象操作概览:用于排查 K8s 对象(例如某个工作负载)的相关问题。
多维度操作审计分析: 用于观测某个维度下集群操作的分布趋势。
您可通过以下操作查看以上 TKE 审计预置仪表盘:
2. 在左侧导航栏中,选择仪表盘 > 仪表盘列表 > 预置仪表盘,搜索 “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 的负载突然变高,大量访问失败,集群中到底发生了什么?
操作用户分布趋势图:
操作类型分布趋势图:
状态码分布趋势图:
2. 通过以上图表得知,用户tke-kube-state-metrics的访问量远高于其他用户,并且在“操作类型分布趋势”图中可以看出大多数都是 list 操作,在“状态码分布趋势”图中可以看出,状态码大多数为403,根据tke-kube-state-metrics关键词,检索日志。
结合业务日志可知,由于 RBAC 鉴权问题导致tke-kube-state-metrics组件不停地请求 Apiserver 重试,导致 Apiserver 访问剧增。 案例3:集群节点被封锁了,是谁在什么时候操作的?
2. 在封锁操作列表图表中, 可以看到查询结果如下图所示:
由图可见,是10001****7138这个账号在20xx-xx-30T06:22:18时对172.16.18.13这台节点进行了封锁操作。