k8s 事件監(jiān)聽(tīng)工具kubewatch

TL;DR

簡(jiǎn)單來(lái)說(shuō), 我希望把 `kubectl get event`事件對(duì)接到集群外面, 直接推送到企業(yè)微信.

0x01 原理

直接使用開(kāi)源組件 kubewatch
這個(gè)組件支持 http webhook , 我們只需要另行簡(jiǎn)單開(kāi)發(fā)一個(gè) webhook接口就好了.

按官方文檔部署時(shí), 有一個(gè)坑, webhook一直無(wú)法被調(diào)用.
最后還是按自己的方式嘗試解決:

在啟動(dòng)Pod時(shí) 添加env , 指定webhook的 URL參數(shù): KW_WEBHOOK_URL

0x02 部署文件

下面這個(gè)文件可以直接部署: kubectl apply -f a.yaml

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: kubewatch
data:
  .kubewatch.yaml: |
    resource:
      deployment: true
      replicationcontroller: true
      replicaset: true
      daemonset: true
      services: true
      pod: true
      secret: true
      configmap: true
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: kubewatch
rules:
- apiGroups: ["", "apps"]
  resources: ["namespaces","deployments","pods","services", "replicationcontrollers"]
  verbs: ["get", "watch", "list"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kubewatch
  namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubewatch
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kubewatch
subjects:
  - kind: ServiceAccount
    name: kubewatch
    namespace: default
---
apiVersion: v1
kind: Pod
metadata:
  name: kubewatch
  namespace: default
spec:
  serviceAccountName: kubewatch
  containers:
  - image: bitnami/kubewatch
    imagePullPolicy: Always
    name: kubewatch
    volumeMounts:
    - name: config-volume
      mountPath: /root
    env:
      - name: KW_WEBHOOK_URL
        value: "http://10.10.10.10:8080"
  restartPolicy: Always
  volumes:
  - name: config-volume
    configMap:
      name: kubewatch

0x03 Webhook數(shù)據(jù)結(jié)構(gòu)

查看源碼發(fā)現(xiàn)調(diào)用webhook時(shí), 會(huì)發(fā)起一個(gè)post請(qǐng)求, body 為 json 字符串

下面是go語(yǔ)言的處理實(shí)現(xiàn):


import (
    "fmt"
    "github.com/gin-gonic/gin"
    "os"
    "time"
)

// WebhookMessage for messages
type WebhookMessage struct {
    EventMeta EventMeta `json:"eventmeta"`
    Text      string    `json:"text"`
    Time      time.Time `json:"time"`
}

// EventMeta containes the meta data about the event occurred
type EventMeta struct {
    Kind      string `json:"kind"`
    Name      string `json:"name"`
    Namespace string `json:"namespace"`
    Reason    string `json:"reason"`
}

func main() {
    r := gin.Default()
    r.POST("/", func(c *gin.Context) {
        var body WebhookMessage
        if c.BindJSON(&body) != nil {
            c.JSON(200, gin.H{"err": "invalid param"})
            return
        }
        // 發(fā)送微信消息: SendTextMessage(body.ToWeChatString())
        c.JSON(200, gin.H{"reason": body.EventMeta.Reason})
    })
    r.Run(":8080")
}

關(guān)于微信發(fā)消息, 自行baidu, 不再贅述.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末单起,一起剝皮案震驚了整個(gè)濱河市吸申,隨后出現(xiàn)的幾起案子蚤假,更是在濱河造成了極大的恐慌,老刑警劉巖蔓彩,帶你破解...
    沈念sama閱讀 212,949評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡巾遭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,772評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)闯估,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)灼舍,“玉大人,你說(shuō)我怎么就攤上這事涨薪∑锼兀” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,419評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵刚夺,是天一觀的道長(zhǎng)献丑。 經(jīng)常有香客問(wèn)我末捣,道長(zhǎng),這世上最難降的妖魔是什么创橄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,812評(píng)論 1 285
  • 正文 為了忘掉前任塔粒,我火速辦了婚禮,結(jié)果婚禮上筐摘,老公的妹妹穿的比我還像新娘卒茬。我一直安慰自己,他們只是感情好咖熟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,927評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布圃酵。 她就那樣靜靜地躺著,像睡著了一般馍管。 火紅的嫁衣襯著肌膚如雪郭赐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,102評(píng)論 1 291
  • 那天确沸,我揣著相機(jī)與錄音捌锭,去河邊找鬼。 笑死罗捎,一個(gè)胖子當(dāng)著我的面吹牛观谦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播桨菜,決...
    沈念sama閱讀 39,171評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼豁状,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了倒得?” 一聲冷哼從身側(cè)響起泻红,我...
    開(kāi)封第一講書(shū)人閱讀 37,921評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霞掺,沒(méi)想到半個(gè)月后谊路,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,366評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菩彬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,675評(píng)論 2 327
  • 正文 我和宋清朗相戀三年缠劝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挤巡。...
    茶點(diǎn)故事閱讀 38,820評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剩彬,死狀恐怖酷麦,靈堂內(nèi)的尸體忽然破棺而出矿卑,到底是詐尸還是另有隱情,我是刑警寧澤沃饶,帶...
    沈念sama閱讀 34,523評(píng)論 4 335
  • 正文 年R本政府宣布母廷,位于F島的核電站轻黑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏琴昆。R本人自食惡果不足惜氓鄙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,162評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望业舍。 院中可真熱鬧抖拦,春花似錦、人聲如沸舷暮。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,885評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瞒渠。三九已至徽龟,卻和暖如春脉执,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耗啦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,126評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留机杜,地道東北人帜讲。 一個(gè)月前我還...
    沈念sama閱讀 46,647評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像椒拗,于是被迫代替她去往敵國(guó)和親舒帮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,732評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容