【Linkerd】控制面全景:缺口、五轴坐标系与 16 篇路线
内容提要
本文介绍Linkerd 2.20服务网格控制面内核,聚焦非xDS架构。文章定义五条排障坐标系:注入与网格成员、身份与mTLS、destination发现、策略与L7、数据面健康。核心机制包括proxy-injector注入、identity CSR签发、destination按目标流式推送,以及linkerd2-proxy数据面。文章强调与istiod/xDS的机制差异,并提供16篇系列阅读路线,帮助读者定位故障层级。
延伸解读
排障先定轴,再下钻模块
文章提出五条排障坐标系:注入与网格成员、身份与mTLS、destination发现、策略与L7、数据面健康。排障时应先判断故障落在哪条轴,再深入对应模块,而不是直接修改ServiceProfile或重装控制面。例如,Pod未mesh优先查注入轴,TLS握手失败优先查身份轴,无端点或403则分别对应发现轴和策略轴。这种分层方法有助于快速定位问题,避免盲目操作。
native sidecar 默认带来的差异
Linkerd 2.20起,native sidecar成为默认注入方式,取代了legacy的init+sidecar路径。这会影响Job/CronJob的完成行为以及启动顺序。排障时需区分两种路径,分别收集证据。例如,Job永不Complete可能源于native sidecar的语义变化,而非destination或策略问题。理解这一默认变更,有助于正确解读故障现象。
专用gRPC与xDS的机制差异
Linkerd控制面使用专用gRPC协议(如destination.Get流)与数据面通信,而非xDS。这意味着排障口令不能与istiod/xDS互换。例如,xDS的ACK/NACK错误处理在Linkerd中对应gRPC状态码与重连机制。若将Linkerd视为“轻量版istiod”,容易在错误组件上排查,如去查xDS NACK而非identity日志。理解这一根本差异,是有效排障的前提。
Q&A
Linkerd 2.20 中默认的 sidecar 注入方式是什么?
Linkerd 2.20 中 native sidecar 成为默认注入方式,利用 Kubernetes 原生 sidecar 容器语义,改善 Job 完成与启动顺序;legacy init+sidecar 路径仍受支持。
Linkerd 控制面由哪些核心组件组成?
Linkerd 控制面由 destination(负责发现、策略、ServiceProfile)、identity(负责 CA/CSR)、proxy-injector(负责成员资格)三个 Deployment 组成,数据面是 linkerd2-proxy,通过 linkerd2-proxy-api 专用 gRPC 通信。
Linkerd 与 Istio 在控制面协议上有何主要差异?
Istio 使用 xDS 通用资源类型(LDS/RDS/CDS/EDS/SDS)支持多数据面;Linkerd 使用 linkerd2-proxy-api 专用 gRPC,按目标(per-target)流式推送,错误处理基于 gRPC 状态码而非 xDS ACK/NACK。
在 Linkerd 中,如果 Pod 未成功注入 proxy 容器,应优先排查哪个组件?
应优先排查 proxy-injector(MutatingAdmissionWebhook)以及命名空间注解(如 linkerd.io/inject: disabled)和 opaque ports 配置,而不是直接检查 destination 或 identity。
Linkerd 中工作负载证书是如何签发和轮转的?
代理启动时向 identity 服务发送 CSR,identity 校验后签发绑定 ServiceAccount 的短期证书,并支持自动续期;trust anchor 轮转要求控制面与所有代理在过渡期同时信任新旧锚。
Linkerd 的 destination 服务如何实现服务发现?
destination 控制器通过 Informer 监听 EndpointSlice 等对象,对每个逻辑目标建立 destination.Get() 长连接流,流式返回端点、协议、mTLS 身份和策略结论,并支持 identity/zone 富化。
在 Linkerd 中,如果出现 403 拒绝或 ServiceProfile 未加载,应优先排查哪个轴?
应优先排查策略与 L7 轴,涉及 Server、AuthorizationPolicy、MeshTLSAuthentication 以及 ServiceProfile 的加载与校验,注意策略静默拒绝与 SP 未绑定是不同证据包。
Linkerd 2.20 在 destination 内存和负载均衡方面有哪些改进?
2.20 重构了 destination 内部状态管理,大集群内存可显著下降;同时引入 rate-limit-aware load balancing,让负载均衡识别限流响应。