從較高的層次上看,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
的所有流量。
公眾號:黑客下午茶