【Linkerd】控制面全景:缺口、五轴坐标系与 16 篇路线

💡 原文中文,约8700字,阅读约需21分钟。
📝

内容提要

本文介绍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,让负载均衡识别限流响应。

🏷️

标签

➡️

继续阅读