IDC

容器服务 使用集群审计排查问题 - 最佳实践

作者:admin 2021-09-16 我要评论

使用场景 当发生人为误操作、应用出现 bug、恶意程序调用 apiserver 接口,集群资源会被删除或修改。此时可通过集群审计功能记录 apiserver 的接口调用,即可根...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

使用场景

当发生人为误操作、应用出现 bug、恶意程序调用 apiserver 接口,集群资源会被删除或修改。此时可通过集群审计功能记录 apiserver 的接口调用,即可根据条件检索和分析审计日志找到问题原因。本文介绍了集群审计功能的具体使用场景及使用示例,您可参考本文开始使用集群审计功能。

注意:

本文仅适用于容器服务 TKE 集群。

前提条件

登录容器服务控制台,开启集群审计功能。详情请参见 开启集群审计。

使用示例

获取分析结果

  1. 登录 日志服务控制台,选择左侧导航栏中的【检索分析】。
  2. 在“检索分析”页面,选择待检索的日志集,日志主题以及选择时间范围。
  3. 输入分析语句后单击【检索分析】,即可获得分析结果。

示例1:查询封锁节点的操作者

例如,需查询封锁节点的操作者,则可执行以下命令进行检索:

objectRef.resource:nodes AND requestObject:unschedulable

在“检索分析”页面中,单击【版面设置】,在“版面设置”页面中设置显示 user.username, requestObjectobjectRef.name 三个字段,分别表示做操作的用户、请求内容以及节点名称。查询结果如下图所示:

由图可见,是 10001****958 这个子账号在 2020-10-09 16:13:22 时对 main.63u5qua9.0 这台节点进行了封锁操作。可以根据账号 ID 在【访问管理】>【用户列表】中找到关于此子账号的详细信息。

示例2:查询删除工作负载的操作者

例如,需查询删除工作负载的操作者,则可执行以下命令进行检索:

objectRef.resource:deployments AND objectRef.name:"nginx" AND verb:"delete" 

您可根据检索结果获取此子账号的详细信息。

示例3:定位 apiserver 限频原因

为避免恶意程序或 bug 导致对 apiserver 请求频率过高引发的 apiserver/etcd 负载过高,影响正常请求。apiserver 具备默认请求频率限制保护。如发生限频,可通过审计找到发出大量请求的客户端。

  1. 如需通过 userAgent 分析统计请求的客户端,则需在“键值索引”窗口中修改日志主题,为 userAgent 字段开启统计。如下图所示:
  2. 执行以下命令,对每种客户端请求 apiserver 的 QPS 大小进行统计:
* | SELECT CAST((__TIMESTAMP_US__ /1000-__TIMESTAMP_US__ /1000%1000) as TIMESTAMP) AS time, COUNT(1) AS qps,userAgent GROUP BY time,userAgent ORDER BY time
  1. 切换到图标分析,选择折线图,X 轴用 time,Y 轴用 qps,聚合列使用 userAgent。如下图所示:

    获得数据后,可点击添加到仪表盘,放大显示。如下图所示:

    由图可见,kube-state-metrics 客户端对 apiserver 请求频率远远高于其它客户端。
    查看日志可得,由于 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=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 CAST((__TIMESTAMP_US__ /1000-__TIMESTAMP_US__ /1000%1000) as TIMESTAMP) AS time, COUNT(1) AS qps,user.username GROUP BY time,user.username ORDER BY time
    显示效果如下图所示:

相关文档

  • 关于容器服务 TKE 的集群审计简介与基础操作,请参见 集群审计。
  • 集群审计的数据存储在日志服务,若需要在日志服务控制台中对审计结果进行检索和分析,检索语法请参见 日志检索语法与规则。
  • 进行分析需提供日志服务所支持的 SQL 语句,请参见 日志分析简介。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
腾讯云代理商
精彩导读
海外云服务器
热门资讯
腾讯云代理商