当前位置:网站首页>手把手教你使用容器服务 TKE 集群审计排查问题
手把手教你使用容器服务 TKE 集群审计排查问题
2020-11-09 22:20:00 【腾讯云原生】
概述
有时候,集群资源莫名被删除或修改,有可能是人为误操作,也有可能是某个应用的 bug 或恶意程序调用 apiserver 接口导致,需要找出 "真凶"。这时候,我们需要为集群开启审计,记录 apiserver 的接口调用,然后根据条件检索和分析审计日志来找到原因。
关于 TKE 的集群审计简介与基础操作,请参考官方文档 集群审计。因为集群审计的数据存储在日志服务,所以我们需要在日志服务控制台去对审计结果进行检索和分析,检索语法请参考 日志检索语法与规则,要进行分析就还需要写日志服务所支持的 SQL 语句,请参考 日志服务分析简介。
注: 本文仅适用于 TKE 集群
场景示例
下面给出一些集群审计使用场景和查询的示例。
找出是谁做的操作
如果节点被封锁了,不知道是哪个应用或人为操作的,需要查出来,可以在开启集群审计后,使用下面的语句来检索:
objectRef.resource:nodes AND requestObject:unschedulable
版面设置可以设置显示 user.username
, requestObject
和 objectRef.name
三个字段,分别表示做操作的用户、请求内容以及节点名称:
从上图可以看出,是 10001****958
这个子账号在 2020-10-09 16:13:22
的时候对 main.63u5qua9.0
这台节点进行了封锁操作,我们在 访问管理-用户-用户列表 里可以根据账号 ID 找到关于这个子账号的详细信息。
如果某个工作负载被删除,想知道是谁删除的,这里以 deployments/nginx
为例来查询:
objectRef.resource:deployments AND objectRef.name:"nginx" AND verb:"delete"
查询结果:
揪出导致 apiserver 限频的真凶
apiserver 会有默认的请求频率限制保护,避免恶意程序或 bug 导致对 apiserver 请求频率过高,使得 apiserver/etcd 负载过高,影响正常请求。如果发生了限频,我们可以通过审计来找出到底是谁在发大量请求。
如果我们通过 userAgent 来分析统计请求的客户端,首先需要修改下日志主题的键值索引,为 userAgent 字段开启统计:
通过以下 SQL 语句进行统计每种客户端请求 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
切换到图标分析,选择折线图,X 轴用 time,Y 轴用 qps,聚合列使用 userAgent:
可以看到查到数据了,但可能结果太多,小面板显示不下,点击添加到仪表盘,放大显示:
此例中可以看到 kube-state-metrics 这个客户端对 apiserver 请求频率远远高于其它客户端,这就找到了 "真凶" 是 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=1029843735
E1009 13:13:09.766106 1 reflector.go:156] pkg/mod/k8s.io/[email protected]/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 的集群审计功能来辅助我们排查问题,给出了一些实践的例子。
参考资料
- 集群审计官网文档: https://cloud.tencent.com/document/product/457/48346
- 日志服务检索语法规则: https://cloud.tencent.com/document/product/614/47044
- 日志服务分析简介: https://cloud.tencent.com/document/product/614/44061
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!
版权声明
本文为[腾讯云原生]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4534936/blog/4710265
边栏推荐
- 商品后台系统实现
- 如何实现LRU算法
- [stm32f429] Chapter 6: stm32f429 dma2d acceleration of ThreadX guix
- 关于生活,可能有用的40条建议
- 一个实用的Chrome小工具:xTrace
- How to upload your avatar with code and add your own copyright information?
- Operation! Nested JSON second change dataframe!
- 如何高效进行模幂运算
- How to implement LRU algorithm
- 运用强大的 PowerBI 桑基图表示复杂运营业务流
猜你喜欢
R8 compiler: tailoring kotlin libraries and Applications
Nine kinds of distributed primary key ID generation schemes of sub database and sub table are quite comprehensive
双十一大秒杀,云服务器低至 0.7 折
Configure the NZ date picker time selection component of ng zerro
Kubernetes-18: installation and use of dashboard
非常值得一看的 Curl 用法指南
LeetCode 50 Pow(x,n)
AQS源码深入分析之条件队列
SQL Server附加数据库拒绝访问解决方法汇总
如何优雅阻止view UI 的 Switch 切换?
随机推荐
Modify the files in the jar package
如何高效进行模幂运算
[best practice] learn how eolinker helps Telecommuting
LeetCode 48 旋转图像
Abbyy finereader 15 added edit table cell function
lvgl 库 V7版本相关应用
Application of EMQ X in Internet of things platform of China Construction Bank
骚操作!嵌套 JSON 秒变 Dataframe!
说说 C# 9 新特性的实际运用
如何实现后台管理系统的权限路由和权限菜单
分库分表的 9种分布式主键ID 生成方案,挺全乎的
LeetCode 50 Pow(x,n)
海外仓见证中欧跨境电商蓬勃发展
Open source project, private tool, rapid development
mongodb 源码实现系列 - 网络传输层模块实现三
Configure the NZ date picker time selection component of ng zerro
[best practice] learn how eolinker helps Telecommuting
Container technology (3) building local registry [15]
以太网模块是什么,以太网模块的功能和特点
毕业设计之 ---基于微服务框架的电影院订票系统