当发生人为误操作、应用出现 bug、恶意程序调用 apiserver 接口,集群资源会被删除或修改。此时可通过集群审计功能记录 apiserver 的接口调用,即可根据条件检索和分析审计日志找到问题原因。本文介绍了集群审计功能的具体使用场景及使用示例,您可参考本文开始使用集群审计功能。
注意:本文仅适用于容器服务 TKE 集群。
登录容器服务控制台,开启集群审计功能。详情请参见 开启集群审计。
例如,需查询封锁节点的操作者,则可执行以下命令进行检索:
objectRef.resource:nodes AND requestObject:unschedulable
在“检索分析”页面中,单击版面设置,在“版面设置”页面中设置显示 user.username
, requestObject
和 objectRef.name
三个字段,分别表示做操作的用户、请求内容以及节点名称。查询结果如下图所示:
由图可见,是 10001****958
这个子账号在 2020-10-09 16:13:22
时对 main.63u5qua9.0
这台节点进行了封锁操作。可以根据账号 ID 在访问管理>**用户列表**中找到关于此子账号的详细信息。
例如,需查询删除工作负载的操作者,则可执行以下命令进行检索:
objectRef.resource:deployments AND objectRef.name:"nginx" AND verb:"delete"
您可根据检索结果获取此子账号的详细信息。
为避免恶意程序或 bug 导致对 apiserver 请求频率过高引发的 apiserver/etcd 负载过高,影响正常请求。apiserver 具备默认请求频率限制保护。如发生限频,可通过审计找到发出大量请求的客户端。
* | SELECT histogram( cast(__TIMESTAMP__astimestamp),interval1 minute) AS time, COUNT(1) AS qps,userAgent GROUP BY time,userAgent ORDER BY time
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=1029843735
E1009 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__astimestamp),interval1 minute) AS time, COUNT(1) AS qps,user.username GROUP BY time,user.username ORDER BY time
显示效果如下图所示:
本页内容是否解决了您的问题?