一、使用场景
注意:这篇仅适用于容器服务 TKE 集群。
二、前提条件
登录容器服务控制台,开启集群审计功能。详情请参见 开启集群审计。
三、获取分析结果
1. 登录 容器服务控制台。
2. 开启集群审计功能,操作详情请参见 开启审计日志。
3. 选择集群 ID > 日志 > 审计日志。
4. 在全局检索页签查看集群审计详情,输入分析语句后单击检索分析,即可获得分析结果。
四、示例1:查询封锁节点的操作者
例如,需查询封锁节点的操作者,则可执行以下命令进行检索:
objectRef.resource:nodes AND requestObject:unschedulable
查询结果如下:
五、示例2:查询删除工作负载的操作者
例如,需查询删除工作负载的操作者,则可执行以下命令进行检索:
objectRef.resource:deployments AND objectRef.name:"nginx" AND verb:"delete"
你可根据检索结果获取删除操作的账号详情。
六、示例3:定位 apiserver 限频原因
为避免恶意程序或 bug 频繁请求 apiserver,导致 apiserver/etcd 负载过高,影响正常请求。apiserver 具备默认请求频率限制保护。如发生限频,可通过审计找到发出大量请求的客户端。
1. 如需通过 userAgent 分析统计请求的客户端,请登录 容器服务控制台,在集群 ID > 日志 > 日志采集 > 审计日志主题 > 索引配置中,单击编辑,修改键值索引,为 userAgent 字段开启统计。如下:
2. 执行以下命令,对每种客户端请求 apiserver 的 QPS 大小进行统计:
* | SELECT histogram( cast(__TIMESTAMP__ as timestamp),interval 1 minute) AS time, COUNT(1) AS qps,userAgent GROUP BY time,userAgent ORDER BY time
3. 切换至统计图表,选择时序图并设置基本信息、坐标轴等相关信息。如下:
获得数据后,可添加至仪表盘放大显示。如下:
通过图表可发现,kube-state-metrics 客户端请求频率显著高于其他客户端。查看日志发现,因 RBAC 授权问题导致 kube-state-metrics 频繁请求 apiserver 重试,触发 apiserver 限频,示例日志如下:
I1009 13:13:09.760767 1 request.go:538] Throttling request took 1.393921018s, request: GET:https://172.16.252.1:443/api/v1/endpoints?limit=500&resourceVersion=1029843735E1009 13:13:09.766106 1 reflector.go:156] pkg/mod/k8s.io/client-go@v0.0.0-20191109102209-3c0d1af94be5/tools/cache/reflector.go:108: Failed to list *v1.Endpoints: endpoints is forbidden: User "system:serviceaccount:monitoring:kube-state-metrics" cannot list resource "endpoints" in API group "" at the cluster scope
同理,如需使用其他字段来区分要统计的客户端,可以根据需求灵活修改 SQL,例如使用 user.username 来区分。SQL 语句可参考如下示例:
* | SELECT histogram( cast(__TIMESTAMP__ as timestamp),interval 1 minute) AS time, COUNT(1) AS qps,user.username GROUP BY time,user.username ORDER BY time
显示效果如下:
七、相关文档
·关于容器服务 TKE 的集群审计功能与基础操作,请参见 集群审计。
·集群审计的数据存储于日志服务,若需要在日志服务控制台中对审计结果进行检索和分析,检索语法请参见 日志检索语法与规则。
·进行分析需提供日志服务所支持的 SQL 语句,请参见 统计分析(SQL)。