乐趣区

关于腾讯云:手把手教你使用容器服务-TKE-集群审计排查问题

概述

有时候,集群资源莫名被删除或批改,有可能是人为误操作,也有可能是某个利用的 bug 或恶意程序调用 apiserver 接口导致,须要找出 “ 真凶 ”。这时候,咱们须要为集群开启审计,记录 apiserver 的接口调用,而后依据条件检索和剖析审计日志来找到起因。

对于 TKE 的集群审计简介与根底操作,请参考官网文档 集群审计。因为集群审计的数据存储在日志服务,所以咱们须要在日志服务控制台去对审计后果进行检索和剖析,检索语法请参考 日志检索语法与规定,要进行剖析就还须要写日志服务所反对的 SQL 语句,请参考 日志服务剖析简介。

注: 本文仅实用于 TKE 集群

场景示例

上面给出一些集群审计应用场景和查问的示例。

找出是谁做的操作

如果节点被封闭了,不晓得是哪个利用或人为操作的,须要查出来,能够在开启集群审计后,应用上面的语句来检索:

objectRef.resource:nodes AND requestObject:unschedulable

版面设置能够设置显示 user.username, requestObjectobjectRef.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/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 的集群审计性能来辅助咱们排查问题,给出了一些实际的例子。

参考资料

  • 集群审计官网文档: https://cloud.tencent.com/doc…
  • 日志服务检索语法规定: https://cloud.tencent.com/doc…
  • 日志服务剖析简介: https://cloud.tencent.com/doc…

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

退出移动版