今天詳細介紹一下Linkerd的架構。
控制平面
Linkerd控制平面是一組在專用Kubernetes命名空間中運行的服務(在Linked默認情況下)。這些服務完成各種事情——聚合遙測數據、提供面向用戶的API、向數據平面代理提供控制數據等。它們共同驅動着數據平面的行為。
控制平面由四個部分組成:
-
控制器——控制器部署由多個容器(public-api,proxy-api,destination,tap)組成,這些容器提供了控制平面的大部分功能。
-
Web——Web部署提供Linkerd Dashboard。
-
Prometheus—— Linkerd公開的所有指標都通過Prometheus進行刪除並存儲。這是Prometheus的一個實例,它已被配置為專門用於處理Linkerd生成的數據。
-
Grafana—— Linkerd配備了許多開箱即用的Dashboard。Grafana組件用於呈現和顯示這些Dashboard。你可以通過LinkerdDashboard中的鏈接訪問這些Dashboard。
架構
數據平面
Linkerd數據平面由輕量級代理組成,它們作為sidecar容器與服務代碼的每個實例一起部署。為了將服務“添加”到Linkerd服務網格,你必須重新部署該服務的pod來讓每個pod中都包含數據平面代理。(linkerd inject 命令完成此操作,以及完成通過代理透明地從每個實例傳遞流量所需的配置工作)你可以使用單個CLI命令將服務添加到數據平面。
這些代理透明地攔截與每個pod之間的通信,並添加諸如檢測和加密(TLS)之類的功能,以及根據相關策略允許和拒絕請求。
這些代理不是手動配置的。相反,它們的行為是由控制平面驅動的。
代理
用Rust編寫的超輕透明代理,它安裝在服務的每個pod中,並成為數據平面的一部分。它接收pod的所有傳入流量,並通過配置initcontainer的iptables,攔截傳出流量和正確轉發流量。因為它是一個sidecar並攔截服務的所有傳入和傳出流量,所以不需要更改代碼,甚至可以將其添加到正在運行的服務中。
代理的功能包括:
-
HTTP,HTTP / 2和任意TCP協議的透明、零配置代理
-
用於HTTP和TCP流量的自動Prometheus度量導出
-
透明、零配置得WebSocket代理
-
自動、延遲感知、第7層負載均衡
-
針對非HTTP流量的自動第4層負載均衡
-
自動TLS(實驗)
-
按需診斷分類API
-
代理支持通過DNS和目標gRPC API進行服務發現 。
CLI
Linkerd CLI在你的機器上本地運行,並用來和控制和數據平面交互。它可用於查看統計信息,實時調試生產問題以及安裝/升級控制和數據平面。
Dashboard
Linkerd Dashboard提供了一個高級視圖,能夠實時顯示你的服務發生情況。它可用於查看“黃金”指標(如成功率、請求/秒和延遲)、可視化服務依賴性,並了解特定服務路由的運行狀況。
Top Line指標
Grafana
作為控制平面的一個組件,Grafana為你的服務提供開箱即用的可操作Dashboard。你可以查看高級指標並深入了解細節,即使對於pod也是如此。
開箱即用的Dashboard包括:
Top Line指標
部署細節
Pod細節
Linkerd 健康診斷
Prometheus
Prometheus是一種雲原生監控解決方案,用於收集和存儲所有Linkerd指標。它是作為控制平面的一部分安裝的,並提供CLI、Dashboard和Grafana使用的數據。
代理在4191端口上公開一個/metrics端點,讓Prometheus獲取數據,並且每隔10秒就會獲取一次
指標集合
更多技術文章,掃描下方二維碼