本文转载自微信公众号《黑客下午茶》,作者为邵。转载本文请联系黑客下午茶公众号。在较高层次上,Linkerd由控制平面和数据平面组成。控制平面是一组服务,可作为一个整体提供对Linkerd的控制。数据平面由作为pod中的边车在每个服务实例“旁边”运行的透明微代理组成。这些代理自动处理进出服务的所有TCP流量,并与控制平面进行通信以进行配置。Linkerd还提供了一个CLI,可用于与控制平面和数据平面进行交互。中文手册系列(https://hacker-linner.com)CLILinkerdCLI通常运行在集群外(比如在你的本地机器上)来与Linkerd进行交互。控制平面Linkerd控制平面是一组在专用Kubernetes命名空间(默认为linkerd)中运行的服务。控制平面有几个组件,如下所列。数据平面代理使用目标服务来确定其行为的各个方面。它用于获取服务发现信息(即发送特定请求的位置和另一端预期的TLS身份);获取有关允许哪些类型的请求的政策信息;获取用于通知每个路由指标、重试和超时文件信息的服务配置;以及更多其他有用的信息。身份服务(identity)身份服务充当TLS证书颁发机构,接受来自代理的CSR并返回签名证书。这些证书在代理初始化时颁发,用于mTLS的代理到代理连接。代理注入器代理注入器是一个Kubernetes准入控制器,它在每次创建pod时接收一个webhook请求。此注入器检查资源以获取特定于Linkerd的注释(linkerd.io/inject:已启用)。当此注释存在时,注入器会更改pod的规范,并将proxy-init和linkerd-proxy容器以及相关的启动时配置添加到pod。数据平面Linkerd数据平面由部署为应用程序pod内的边车容器的超轻型微代理组成。由于linkerd-init(或者Linkerd的CNI插件)制定的iptables规则,这些代理透明地拦截进出每个pod的TCP连接。Proxy(Linkerd2-proxy)Linkerd2-proxy是一个用Rust编写的超轻、透明的微代理。Linkerd2-proxy专为服务网格用例而设计,并非设计为通用代理。代理功能包括:HTTP、HTTP/2和任意TCP协议的透明、零配置代理。为HTTP和TCP流量自动导出Prometheus指标。透明、零配置的WebSocket代理。自动、延迟感知、第7层负载平衡。非HTTP流量的自动第4层负载平衡。自动TLS。TapAPI的按需诊断。还有更多。该代理支持通过DNS和目标gRPCAPI进行服务发现。https://github.com/linkerd/linkerd2-proxy-api您可以在此处阅读有关这些微代理的更多信息:为什么Linkerd不使用Envoyhttps://linkerd.io/2020/12/03/why-linkerd-doesnt-use-envoy/Linkerd最先进的Rust代理Linkerd2-proxyhttps://linkerd.io/2020/07/23/under-the-hood-of-linkerds-state-of-the-art-rust-proxy-linkerd2-proxy/Linkerdinitcontainerlinkerd-init容器作为Kubernetesinit容器添加到每个网格pod,它在任何其他容器启动之前运行。它使用iptables代理所有进出Pod的TCP流量。https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
