上文已經基本完成了環境的搭建,prometheus能夠以https的方式從node_exporter和cAdvisor上pull到數據,訪問grafana時也能夠以https的方式訪問,安全性獲得了必定的保障,但還存在一些問題,本節將繼續完善node
目前架構爲nginx
VM1和VM2分別開啓兩端口向外暴露,在LB上開四個端口分別去對應VM1/VM2上的端口,安全
由prometheus去鏈接LB上的四個端口,從而獲取監控數據。網絡
可是,LB上作的是NAT端口轉發,任何IP均可以去鏈接這個四個端口,而且無身份驗證,所以增長了安全風險架構
因此須要在LB上設定,僅能夠運行prometheus的IP訪問這四個端口網站
能夠訪問 https://LBIP:18008 https://LBIP:19101檢查是否能夠訪問3d
【問題】在LB上沒法限定某個特定IP訪問,所以須要藉助NSG來實現server
新方案blog
先介紹一下AZURE上的NSG:網絡安全
NSG是網絡安全組,VM和網絡的鏈接、不一樣子網間的通訊都可以經過NSG進行限制,介於VM 和 LB/NAT之間
咱們能夠利用NSG來對從LB來的流量作限定
應用到本方案中:爲VM1/VM2添加NSG,NSG會對LB上任何端口轉發來的流量作限定
在NSG上開啓只容許某個特定IP訪問VM1/VM2上的指定端口便可實現。
一、在VM1/VM2所在的資源組中建立一個NSG
二、在NSG中添加 容許80和443端口的入站規則,保證原來的網站能夠正常訪問
三、將VM1/VM2的網卡關聯到新建立的NSG中
四、檢查LB上的NAT入站規則的端口,18008/19101/28008/29101
五、在新建立的NSG上建立入站規則,只容許特定IP訪問VM1/VM2的特定端口
六、檢查prometheus是否能夠鏈接node_exporter和cAdvisor
登錄grafana查詢各個節點狀態
顯示1證實鏈接正常
再去用其餘任何IP訪問:
https://LBIP:19101
https://LBIP:18008
https://LBIP:29101
https://LBIP:28008
訪問失敗表示成功!
七、收尾
檢查prometheus server的NSG對外開放了哪些端口,最終只容許開放443端口,其他端口一概禁止!
【總結】
以上與prometheus相關的全部組件均是以http協議傳輸的,大大下降了它的安全性,爲解決這個問題使用了以下方法:
一、prometheus與node_exporter和cAdvisor之間的數據傳輸使用了stunnel,先將收集到的數據轉成https,而後再傳輸。二、grafana默認是http,使用nginx生成https的站點,當用戶訪問443端口時自動跳轉到grafana上 因爲LB不支持對特定IP的限定,所以增長了NSG對特定IP作限定,這樣一來,有且僅有prometheus server 能夠訪問使得安全性有進一步加強 最後,我理解的正確的部署場景應當是:業務機VM1/VM2和prometheus server三臺虛機在一個NSG中,這三個虛機組成了一個局域網,外界是沒法直接訪問其中任何一臺的,只能經過Load Balance跳轉,而後在Load Balance上開一個端口用於以https的方式訪問grafana,因爲prometheus node_exporter cAdvisor在局域網中,所以數據傳輸不存在安全性問題,這樣就能夠不對http作轉換了。