溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用容器服務(wù)TKE集群審計(jì)排查問(wèn)題

發(fā)布時(shí)間:2022-01-06 16:09:14 來(lái)源:億速云 閱讀:153 作者:柒染 欄目:云計(jì)算

今天就跟大家聊聊有關(guān)如何使用容器服務(wù)TKE集群審計(jì)排查問(wèn)題,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

概述

有時(shí)候,集群資源莫名被刪除或修改,有可能是人為誤操作,也有可能是某個(gè)應(yīng)用的 bug 或惡意程序調(diào)用 apiserver 接口導(dǎo)致,需要找出 "真兇"。這時(shí)候,我們需要為集群開(kāi)啟審計(jì),記錄 apiserver 的接口調(diào)用,然后根據(jù)條件檢索和分析審計(jì)日志來(lái)找到原因。

關(guān)于 TKE 的集群審計(jì)簡(jiǎn)介與基礎(chǔ)操作,請(qǐng)參考官方文檔 集群審計(jì)。因?yàn)榧簩徲?jì)的數(shù)據(jù)存儲(chǔ)在日志服務(wù),所以我們需要在日志服務(wù)控制臺(tái)去對(duì)審計(jì)結(jié)果進(jìn)行檢索和分析,檢索語(yǔ)法請(qǐng)參考 日志檢索語(yǔ)法與規(guī)則,要進(jìn)行分析就還需要寫日志服務(wù)所支持的 SQL 語(yǔ)句,請(qǐng)參考 日志服務(wù)分析簡(jiǎn)介。

注: 僅適用于 TKE 集群

場(chǎng)景示例

下面給出一些集群審計(jì)使用場(chǎng)景和查詢的示例。

找出是誰(shuí)做的操作

如果節(jié)點(diǎn)被封鎖了,不知道是哪個(gè)應(yīng)用或人為操作的,需要查出來(lái),可以在開(kāi)啟集群審計(jì)后,使用下面的語(yǔ)句來(lái)檢索:

objectRef.resource:nodes AND requestObject:unschedulable

版面設(shè)置可以設(shè)置顯示 user.username, requestObjectobjectRef.name 三個(gè)字段,分別表示做操作的用戶、請(qǐng)求內(nèi)容以及節(jié)點(diǎn)名稱:

如何使用容器服務(wù)TKE集群審計(jì)排查問(wèn)題

從上圖可以看出,是 10001****958 這個(gè)子賬號(hào)在 2020-10-09 16:13:22 的時(shí)候?qū)?main.63u5qua9.0 這臺(tái)節(jié)點(diǎn)進(jìn)行了封鎖操作,我們?cè)?訪問(wèn)管理-用戶-用戶列表 里可以根據(jù)賬號(hào) ID 找到關(guān)于這個(gè)子賬號(hào)的詳細(xì)信息。

如果某個(gè)工作負(fù)載被刪除,想知道是誰(shuí)刪除的,這里以 deployments/nginx 為例來(lái)查詢:

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

查詢結(jié)果:

如何使用容器服務(wù)TKE集群審計(jì)排查問(wèn)題

揪出導(dǎo)致 apiserver 限頻的真兇

apiserver 會(huì)有默認(rèn)的請(qǐng)求頻率限制保護(hù),避免惡意程序或 bug 導(dǎo)致對(duì) apiserver 請(qǐng)求頻率過(guò)高,使得 apiserver/etcd 負(fù)載過(guò)高,影響正常請(qǐng)求。如果發(fā)生了限頻,我們可以通過(guò)審計(jì)來(lái)找出到底是誰(shuí)在發(fā)大量請(qǐng)求。

如果我們通過(guò) userAgent 來(lái)分析統(tǒng)計(jì)請(qǐng)求的客戶端,首先需要修改下日志主題的鍵值索引,為 userAgent 字段開(kāi)啟統(tǒng)計(jì):

如何使用容器服務(wù)TKE集群審計(jì)排查問(wèn)題

通過(guò)以下 SQL 語(yǔ)句進(jìn)行統(tǒng)計(jì)每種客戶端請(qǐng)求 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

切換到圖標(biāo)分析,選擇折線圖,X 軸用 time,Y 軸用 qps,聚合列使用 userAgent:

如何使用容器服務(wù)TKE集群審計(jì)排查問(wèn)題

可以看到查到數(shù)據(jù)了,但可能結(jié)果太多,小面板顯示不下,點(diǎn)擊添加到儀表盤,放大顯示:

如何使用容器服務(wù)TKE集群審計(jì)排查問(wèn)題

此例中可以看到 kube-state-metrics 這個(gè)客戶端對(duì) apiserver 請(qǐng)求頻率遠(yuǎn)遠(yuǎn)高于其它客戶端,這就找到了 "真兇" 是 kube-state-metrics,查看日志可以發(fā)現(xiàn)是因?yàn)?RBAC 權(quán)問(wèn)題導(dǎo)致 kube-state-metrics 不停的請(qǐng)求 apiserver 重試,觸發(fā)了 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

同理,如果要使用其它字段來(lái)區(qū)分要統(tǒng)計(jì)的客戶端,可以根據(jù)需求靈活修改 SQL,比如使用 user.username 來(lái)區(qū)分,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

顯示效果:

如何使用容器服務(wù)TKE集群審計(jì)排查問(wèn)題

看完上述內(nèi)容,你們對(duì)如何使用容器服務(wù)TKE集群審計(jì)排查問(wèn)題有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

tke
AI