简介
腾讯 Kubernetes 引擎(TKE)是腾讯云提供的高性能、可扩展的容器管理服务,帮助用户轻松部署和管理容器化应用。在使用 TKE 的过程中,系统会生成大量的审计日志,这些日志详细记录了集群中的操作行为,包括用户的请求、操作时间、资源变更、访问权限等信息(完整日志字段说明请参见 日志字段说明)。CLS 日志服务与 TKE 紧密集成,支持将 TKE 审计日志实时采集至 CLS,借助 CLS 强大的日志分析能力,您可以实现对集群安全性和合规性的监控、操作行为的审计、异常活动的检测以及资源使用情况, 如:
集群中的某个应用被删除了,谁操作的?
Apiserver 的负载突然变高,大量访问失败,集群中到底发生了什么?
集群节点被封锁了,是谁在什么时候操作的?
通过本篇实践,您将详细了解如下内容:
实践场景案例
您也可通过以下 Demo, 快速体验 CLS 与 TKE 的强大结合:
审计总览: 观测整个集群 APIserver 操作。
节点操作概览:于排查节点相关问题。
K8s 对象操作概览:排查 K8s 对象(例如某个工作负载)的相关问题。
多维度操作审计分析: 观测某个维度下审计日志的分布趋势。
功能优势
开箱即用集群审计分析仪表盘, 仪表中包含 TKE 操作类型分布、操作状态码分布、敏感操作用户等分析看板。
采集 TKE 审计日志
步骤1:进入 TKE 云产品中心
1. 登录 日志服务控制台。
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 审计预置仪表盘:
1. 登录 日志服务控制台。
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. 在重要操作列表图表中,可以看到查询结果如下图所示:

案例2:Apiserver 的负载突然变高,大量访问失败,集群中到底发生了什么?
1. 参见 查看 TKE 审计分析仪表盘,打开 聚合检索仪表盘,该仪表盘提供了从用户、操作类型、返回状态码等多个维度对于 Apiserver 访问聚合趋势图。
操作用户分布趋势图:

操作类型分布趋势图:

状态码分布趋势图:

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

tke-kube-state-metrics
组件不停地请求 Apiserver 重试,导致 Apiserver 访问剧增。案例3:集群节点被封锁了,是谁在什么时候操作的?
1. 参见 查看 TKE 审计分析仪表盘,打开 节点操作概览仪表盘,填写被封锁的节点名。


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

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