瞭解 Linkerd Service Mesh 架構

為少發表於2021-12-09

從較高的層次上看,Linkerd 由一個控制平面(control plane) 和一個 資料平面(data plane) 組成。

控制平面是一組服務,提供對 Linkerd 整體的控制。

資料平面由在每個服務例項“旁邊”執行的透明微代理(micro-proxies)組成,作為 Pod 中的 sidecar
這些代理會自動處理進出服務的所有 TCP 流量,並與控制平面進行通訊以進行配置。

Linkerd 還提供了一個 CLI,可用於與控制平面資料平面進行互動。

系列

中文手冊(https://hacker-linner.com)

CLI

Linkerd CLI 通常在叢集外部執行(例如在您的本地機器上),用於與 Linkerd 互動。

控制平面(control plane)

Linkerd 控制平面是一組在專用 Kubernetes 名稱空間(預設為 linkerd)中執行的服務。
控制平面有幾個元件,列舉如下。

目標服務(destination)

資料平面代理使用 destination 服務來確定其行為的各個方面。
它用於獲取服務發現資訊(即傳送特定請求的位置和另一端預期的 TLS 身份);
獲取有關允許哪些型別的請求的策略資訊;
獲取用於通知每條路由指標重試超時的服務配置檔案資訊;和更多其它有用資訊。

身份服務(identity)

identity 服務充當 TLS 證書頒發機構
接受來自代理的 CSR 並返回簽名證書。
這些證書在代理初始化時頒發,用於代理到代理連線以實現 mTLS

代理注入器(proxy injector)

proxy injector 是一個 Kubernetes admission controller,它在每次建立 pod 時接收一個 webhook 請求。
injector 檢查特定於 Linkerdannotationlinkerd.io/inject: enabled)的資源。
當該 annotation 存在時,injector 會改變 pod 的規範,
並將 proxy-initlinkerd-proxy 容器以及相關的啟動時間配置新增到 pod 中。

資料平面(data plane)

Linkerd 資料平面包含超輕型微代理,這些微代理部署為應用程式 Pod 內的 sidecar 容器。
由於由 linkerd-init(或者,由 LinkerdCNI 外掛)制定的 iptables 規則,
這些代理透明地攔截進出每個 podTCP 連線。

代理(Linkerd2-proxy)

Linkerd2-proxy 是一個用 Rust 編寫的超輕、透明的微代理
Linkerd2-proxy 專為 service mesh 用例而設計,並非設計為通用代理。

代理的功能包括:

  • HTTPHTTP/2 和任意 TCP 協議的透明、零配置代理。
  • HTTPTCP 流量的自動 Prometheus 指標匯出。
  • 透明、零配置的 WebSocket 代理。
  • 自動、延遲感知、第 7 層負載平衡。
  • HTTP 流量的自動第 4 層負載平衡。
  • 自動 TLS
  • 按需診斷 Tap API
  • 還有更多。

代理支援通過 DNS目標 gRPC API 進行服務發現。

您可以在此處閱讀有關這些微代理的更多資訊:

Linkerd init 容器

linkerd-init 容器作為
Kubernetes init 容器
新增到每個網格 pod 中,該容器在任何其他容器啟動之前執行。
它使用 iptables 通過代理將所有 TCP 流量,進出 Pod 的所有流量。

公眾號:黑客下午茶

相關文章