監(jiān)控:ssl_exporter的Secret與kubeconfig探測(cè)器使用指南)
深入Kubernetes證書(shū)監(jiān)控ssl_exporter的Secret與kubeconfig探測(cè)器使用指南【免費(fèi)下載鏈接】ssl_exporterExports Prometheus metrics for TLS certificates項(xiàng)目地址: https://gitcode.com/gh_mirrors/ss/ssl_exporterssl_exporter 是一款專(zhuān)為 Prometheus 生態(tài)打造的TLS 證書(shū)監(jiān)控導(dǎo)出器Exporter它能將證書(shū)的有效期、頒發(fā)者、序列號(hào)等信息轉(zhuǎn)換為標(biāo)準(zhǔn)的 Prometheus 指標(biāo)。在 Kubernetes 場(chǎng)景中它內(nèi)置了兩個(gè)針對(duì)性極強(qiáng)的探測(cè)器kubernetes探測(cè)器讀取集群中kubernetes.io/tls類(lèi)型的 Secret和kubeconfig探測(cè)器解析 kubeconfig 文件內(nèi)嵌的 CA 與客戶(hù)端證書(shū)幫助你提前發(fā)現(xiàn)證書(shū)過(guò)期風(fēng)險(xiǎn)避免服務(wù)因證書(shū)失效而中斷。為什么 Kubernetes 需要專(zhuān)門(mén)的證書(shū)監(jiān)控Kubernetes 集群里藏著大量證書(shū)Ingress / Gateway 證書(shū)通常以kubernetes.io/tls類(lèi)型的 Secret 存儲(chǔ)過(guò)期后直接導(dǎo)致域名無(wú)法訪(fǎng)問(wèn)節(jié)點(diǎn)與組件證書(shū)admin.conf、kubelet 證書(shū)等嵌在 kubeconfig 或節(jié)點(diǎn)文件中過(guò)期后會(huì)導(dǎo)致節(jié)點(diǎn)失聯(lián)、控制面組件掉線(xiàn)ServiceAccount Token、內(nèi)部 CA等同樣有生命周期。手工檢查不現(xiàn)實(shí)而 ssl_exporter 把證書(shū)還剩多少天過(guò)期變成了可查詢(xún)、可告警的指標(biāo)配合 Prometheus 與 Grafana 就能實(shí)現(xiàn)自動(dòng)化監(jiān)控。快速安裝與運(yùn)行從倉(cāng)庫(kù)獲取源碼并構(gòu)建構(gòu)建入口見(jiàn) Makefilegit clone https://gitcode.com/gh_mirrors/ss/ssl_exporter cd ssl_exporter make ./ssl_exporter --config.fileexamples/ssl_exporter.yaml也可以使用 Docker 鏡像快速啟動(dòng)docker run -p 9219:9219 ribbybibby/ssl-exporter:latest flags啟動(dòng)后訪(fǎng)問(wèn)http://localhost:9219/probe?target...即可觸發(fā)探測(cè)/metrics路徑暴露指標(biāo)。默認(rèn)監(jiān)聽(tīng)地址與路徑由--web.listen-address、--web.metrics-path、--web.probe-path三個(gè)參數(shù)控制完整參數(shù)列表可在 README.md 中查看。提示模塊行為通過(guò)--config.file指定的 YAML 配置文件調(diào)整示例文件 examples/ssl_exporter.yaml 已經(jīng)包含了kubernetes與kubeconfig模塊的寫(xiě)法可直接參考。用 kubernetes 探測(cè)器監(jiān)控集群中的 TLS Secretkubernetes探測(cè)器會(huì)自動(dòng)列出集群中所有kubernetes.io/tls類(lèi)型的 Secret并導(dǎo)出其中每個(gè)證書(shū)的有效期指標(biāo)。核心指標(biāo)指標(biāo)含義ssl_kubernetes_cert_not_after證書(shū)失效時(shí)間Unix 時(shí)間戳ssl_kubernetes_cert_not_before證書(shū)生效時(shí)間Unix 時(shí)間戳指標(biāo)自帶豐富的標(biāo)簽namespace、secret、key、cn、issuer_cn、serial_no、dnsnames等定義見(jiàn) prober/metrics.go可以按命名空間、Secret 名稱(chēng)靈活過(guò)濾和告警。目標(biāo)格式與通配符目標(biāo)格式為namespace/name兩部分均支持通配符匹配實(shí)現(xiàn)見(jiàn) prober/kubernetes.gocurl localhost:9219/probe?modulekubernetestargetkube-system/my-tls-secret # 精確匹配 curl localhost:9219/probe?modulekubernetestarget*/* # 全集群所有 TLS Secret一條*/*就能把整個(gè)集群的 TLS 證書(shū)納入監(jiān)控非常省事。憑證從哪里來(lái)探測(cè)器按以下優(yōu)先級(jí)獲取集群訪(fǎng)問(wèn)憑證newKubeClient邏輯見(jiàn) prober/kubernetes.go模塊配置中顯式指定的kubeconfig路徑環(huán)境變量$KUBECONFIG默認(rèn)配置文件$HOME/.kube/config在集群內(nèi)運(yùn)行時(shí)自動(dòng)使用 Pod 的 ServiceAccountin-cluster 憑證。也就是說(shuō)把它部署成 Deployment 后只需給 ServiceAccount 授予只讀列出 Secrets的權(quán)限即可無(wú)需掛載任何文件。Prometheus 抓取配置參考 examples/example.prometheus.yml 中的ssl-kubernetes-secrets任務(wù)- job_name: ssl-kubernetes-secrets metrics_path: /probe params: module: [kubernetes] target: [*/*] static_configs: - targets: [127.0.0.1:9219]用 kubeconfig 探測(cè)器監(jiān)控節(jié)點(diǎn) kubeconfig 證書(shū)kubeconfig探測(cè)器實(shí)現(xiàn)見(jiàn) prober/kubeconfig.go會(huì)解析指定的 kubeconfig 文件提取其中的certificate-authority(-data)與client-certificate(-data)并導(dǎo)出ssl_kubeconfig_cert_not_after/ssl_kubeconfig_cert_not_before標(biāo)簽包括kubeconfig文件路徑、name、type區(qū)分cluster還是user中的證書(shū)直接對(duì)本地文件發(fā)起探測(cè)即可curl localhost:9219/probe?modulekubeconfigtarget/etc/kubernetes/admin.conf經(jīng)典玩法DaemonSet 監(jiān)控所有節(jié)點(diǎn)README 推薦的最佳實(shí)踐是把 ssl_exporter 以DaemonSet形式部署每個(gè)節(jié)點(diǎn)一個(gè)實(shí)例然后讓 Prometheus 按節(jié)點(diǎn)抓取各自本機(jī)的 kubeconfig 證書(shū)scrape_configs: - job_name: ssl-kubernetes-kubeconfig metrics_path: /probe params: module: [kubeconfig] target: [/etc/kubernetes/admin.conf] kubernetes_sd_configs: - role: node relabel_configs: - source_labels: [__address__] regex: ^(.*):(.*)$ target_label: __address__ replacement: ${1}:9219這樣每個(gè)節(jié)點(diǎn)的 kubelet / admin 證書(shū)過(guò)期時(shí)間都會(huì)按instance標(biāo)簽分別上報(bào)節(jié)點(diǎn)證書(shū)臨期時(shí)可精準(zhǔn)告警到對(duì)應(yīng)節(jié)點(diǎn)。實(shí)用告警查詢(xún)語(yǔ)句拿到指標(biāo)后配合 PromQL 就能實(shí)現(xiàn)證書(shū)臨期告警。以下語(yǔ)句整理自 README.md 的示例查詢(xún)# 集群 Secret 中 7 天內(nèi)過(guò)期的證書(shū) ssl_kubernetes_cert_not_after - time() 86400 * 7 # 任意來(lái)源 7 天內(nèi)過(guò)期的證書(shū)含通配符證書(shū) ssl_cert_not_after{cn~\*.*} - time() 86400 * 7 # 探測(cè)失敗的目標(biāo)排查權(quán)限、網(wǎng)絡(luò)、Secret 不存在等問(wèn)題 ssl_probe_success 0建議把ssl_probe_success 0也加入告警——它意味著監(jiān)控本身出問(wèn)題了與證書(shū)臨期同樣重要。總結(jié)探測(cè)器適用場(chǎng)景核心指標(biāo)典型部署方式kubernetes集群內(nèi) Ingress 等 TLS Secretssl_kubernetes_cert_not_afterDeployment ServiceAccountkubeconfig節(jié)點(diǎn) kubeconfig / admin.conf 證書(shū)ssl_kubeconfig_cert_not_afterDaemonSetssl_exporter 讓 Kubernetes 證書(shū)監(jiān)控變得極其簡(jiǎn)單kubernetes 探測(cè)器一條*/*覆蓋全集群 TLS Secretkubeconfig 探測(cè)器配合 DaemonSet 覆蓋每個(gè)節(jié)點(diǎn)再疊加 7 天臨期告警就能把證書(shū)悄悄過(guò)期這類(lèi)隱性故障消滅在發(fā)生之前。更多指標(biāo)標(biāo)簽說(shuō)明與 Grafana 面板可參考 README.md 與 contrib/grafana/dashboard.json。【免費(fèi)下載鏈接】ssl_exporterExports Prometheus metrics for TLS certificates項(xiàng)目地址: https://gitcode.com/gh_mirrors/ss/ssl_exporter創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考