您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(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 集群
下面給出一些集群審計(jì)使用場(chǎng)景和查詢的示例。
如果節(jié)點(diǎn)被封鎖了,不知道是哪個(gè)應(yīng)用或人為操作的,需要查出來(lái),可以在開(kāi)啟集群審計(jì)后,使用下面的語(yǔ)句來(lái)檢索:
objectRef.resource:nodes AND requestObject:unschedulable
版面設(shè)置可以設(shè)置顯示 user.username
, requestObject
和 objectRef.name
三個(gè)字段,分別表示做操作的用戶、請(qǐng)求內(nèi)容以及節(jié)點(diǎ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é)果:
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ì):
通過(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:
可以看到查到數(shù)據(jù)了,但可能結(jié)果太多,小面板顯示不下,點(diǎ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
顯示效果:
看完上述內(nèi)容,你們對(duì)如何使用容器服務(wù)TKE集群審計(jì)排查問(wèn)題有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(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)容。