了解 Linkerd Service Mesh 架構


從較高的層次上看,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 的所有流量。

公眾號:黑客下午茶


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM