
從較高的層次上看,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 檢查特定於 Linkerd 的 annotation(linkerd.io/inject: enabled)的資源。
當該 annotation 存在時,injector 會改變 pod 的規范,
並將 proxy-init 和 linkerd-proxy 容器以及相關的啟動時間配置添加到 pod 中。
數據平面(data plane)
Linkerd 數據平面包含超輕型微代理,這些微代理部署為應用程序 Pod 內的 sidecar 容器。
由於由 linkerd-init(或者,由 Linkerd 的 CNI 插件)制定的 iptables 規則,
這些代理透明地攔截進出每個 pod 的 TCP 連接。
代理(Linkerd2-proxy)
Linkerd2-proxy 是一個用 Rust 編寫的超輕、透明的微代理。
Linkerd2-proxy 專為 service mesh 用例而設計,並非設計為通用代理。
代理的功能包括:
HTTP、HTTP/2和任意TCP協議的透明、零配置代理。HTTP和TCP流量的自動Prometheus指標導出。- 透明、零配置的
WebSocket代理。 - 自動、延遲感知、第
7層負載平衡。 - 非
HTTP流量的自動第4層負載平衡。 - 自動
TLS。 - 按需診斷
Tap API。 - 還有更多。
代理支持通過 DNS 和目標 gRPC API 進行服務發現。
您可以在此處閱讀有關這些微代理的更多信息:
Linkerd init 容器
linkerd-init 容器作為
Kubernetes init 容器
添加到每個網格 pod 中,該容器在任何其他容器啟動之前運行。
它使用 iptables 通過代理將所有 TCP 流量,進出 Pod 的所有流量。
公眾號:黑客下午茶
