<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          持續(xù)監(jiān)控集群中的鏡像漏洞

          共 3214字,需瀏覽 7分鐘

           ·

          2021-04-11 22:43


          使用 Shell-Operator,讓 Pod 繼承節(jié)點(diǎn)標(biāo)簽[1]一文中,展示了使用 Shell Operator 在創(chuàng)建工作負(fù)載時(shí)從對(duì)應(yīng)節(jié)點(diǎn)拷貝指定標(biāo)簽的方法。Shell Operator 還有個(gè)功能就是生成 Prometheus Metrics,本文就是從這個(gè)角度出發(fā),用 Shell Operator 定時(shí)調(diào)用 Trivy 掃描指定命名空間下的所有在用鏡像,并輸出指標(biāo)給 Prometheus,最終可以進(jìn)行展示和告警。

          Shell Operator 除了上次提到的根據(jù) Kubernetes 事件進(jìn)行觸發(fā)之外,還包含了在啟動(dòng)時(shí)和定期運(yùn)行兩種觸發(fā)方式,這里我們用定時(shí)觸發(fā)的方式:

          configVersion: v1
          schedule:
          - name: "scan images each 5 min"
            crontab: "*/5 * * * *"
            allowFailure: true

          這里我定義了一個(gè) 5 分鐘觸發(fā)一次的任務(wù)。鏡像接受一個(gè)缺省為 NS_LABEL="trivy=true" 的標(biāo)簽,每次觸發(fā)時(shí),會(huì)根據(jù)這個(gè)標(biāo)簽選擇命名空間,獲取選定命名空間中運(yùn)行的鏡像,并調(diào)用 trivy i -f json [image] 輸出結(jié)果,將結(jié)果轉(zhuǎn)換為 Prometheus 指標(biāo)進(jìn)行輸出。

          FROM flant/shell-operator:v1.0.0-rc.2
          ENV TRIVY_CACHE_DIR=/data/trivy \
              TRIVY_QUIET=true \
              GITHUB_TOKEN="" \
              NS_LABEL="trivy=true"
          RUN apk --no-cache add python3=3.8.8-r0
          COPY trivy-scanner.py /hooks
          COPY trivy /usr/local/bin
          VOLUME [ "/data/trivy""/data/cache" ]

          上文中的幾個(gè)環(huán)境變量:

          • TRIVY_CACHE_DIR:指定 Trivy 緩存目錄,可以在 Kubernetes 中把 Trivy 工作目錄持久化。
          • TRIVY_QUIET:Trivy 環(huán)境變量,指定 Trivy 用靜默方式運(yùn)行。
          • GITHUB_TOKEN:Trivy 會(huì)使用該 Token 更新漏洞庫(kù),防止觸發(fā) Rate Limit。
          • NS_LABLE:僅對(duì)符合標(biāo)簽的命名空間進(jìn)行掃描。

          在腳本中執(zhí)行的任務(wù)還是很簡(jiǎn)單的三部曲:

          • kubectl get ns
          • kubectl get po
          • trivy

          可以看到這里需要列表查看 Namespace 和 Pod 對(duì)象,因此我們的 RBAC 需要進(jìn)行相應(yīng)的配置,例如設(shè)置 ClusterRole:

          apiVersion: rbac.authorization.k8s.io/v1
          kind: ClusterRole
          metadata:
            name: trivy-scanner
          rules:
          - resources:
            - pods
            - namespaces
            verbs:
            - get
            - watch
            - list

          實(shí)際上也可以通過(guò)之前用到的 Kubernetes 事件進(jìn)行觸發(fā)。因此這里還保留了 watch 事件。

          Deployment 需要注意一點(diǎn)是,Shell Operator 使用 9115 端口的 /metrics 開(kāi)放指標(biāo)數(shù)據(jù)供 Prometheus 抓取,因此需要使用 annotations 對(duì)此進(jìn)行標(biāo)注。

          使用 Trivy 獲取到 JSON 格式出具的掃描結(jié)果之后,就可以利用 Shell Operator 的指標(biāo)輸出能力,把數(shù)據(jù)整理為如下格式:

          {"name":"so_vulnerabilities","set":0,"labels":{"image":"dustise/sleep:v0.9.6","severity":"UNKNOWN"}}
          {"name":"so_vulnerabilities","set":1,"labels":{"image":"dustise/sleep:v0.9.6","severity":"HIGH"}}

          每行一條記錄,輸出到 $METRICS_PATH 環(huán)境變量指定的文本文件中,Shell Operator 會(huì)把它轉(zhuǎn)換為 Prometheus 指標(biāo):

          so_vulnerabilities{hook="trivy-scanner.py",image="dustise/sleep:v0.9.6",severity="CRITICAL"} 1
          so_vulnerabilities{hook="trivy-scanner.py",image="dustise/sleep:v0.9.6",severity="HIGH"} 11
          so_vulnerabilities{hook="trivy-scanner.py",image="dustise/sleep:v0.9.6",severity="LOW"} 2
          so_vulnerabilities{hook="trivy-scanner.py",image="dustise/sleep:v0.9.6",severity="MEDIUM"} 9
          so_vulnerabilities{hook="trivy-scanner.py",image="dustise/sleep:v0.9.6",severity="UNKNOWN"} 0

          接下來(lái)就可以在 Prometheus 中檢查輸出內(nèi)容,出具監(jiān)控圖表或者制定告警規(guī)則了。例如:

          腳注

          [1]

          使用 Shell-Operator,讓 Pod 繼承節(jié)點(diǎn)標(biāo)簽: http://mp.weixin.qq.com/s?__biz=MzIxMDY5ODM1OA==&mid=2247485288&idx=1&sn=aea39927fea18efefe5b992ec3873fce&chksm=9761ee71a01667672d918f7a62be0d27e980185f72d66141588b2d937bcee85b26c2850ec6cb&scene=21#wechat_redirect


          你可能還喜歡

          點(diǎn)擊下方圖片即可閱讀

          基于 WireGuard 和 OpenVPN 的混合云基礎(chǔ)架構(gòu)建設(shè)

          云原生是一種信仰 ??

          關(guān)注公眾號(hào)

          后臺(tái)回復(fù)?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!



          點(diǎn)擊 "閱讀原文" 獲取更好的閱讀體驗(yàn)!


          發(fā)現(xiàn)朋友圈變“安靜”了嗎?

          瀏覽 28
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产三级高清在线 | 亚洲色图15p | 粗暴大黑鸡巴视频欧美 | 一区二区最新 | 五月天激情啪啪网 |