【Linkerd】排障坐标系:五轴否证与 native/legacy 证据包

💡 原文中文,约5400字,阅读约需13分钟。
📝

内容提要

本文介绍Linkerd 2.20服务网格排障方法,提出五轴坐标系:注入与网格成员、身份与mTLS、destination发现、策略与L7、数据面健康。排障时先定位症状对应轴,再下钻组件,区分native sidecar与legacy init+sidecar路径。强调按顺序否证各轴,避免混贴证据或误改配置,并对照Istio xDS排障差异。

🔎

延伸解读

五轴否证:先定位再下钻

排障时先根据症状映射到对应轴,再按顺序逐轴否证,避免直接修改配置或重装控制面。例如,Pod 未注入优先查轴 1,而非改 destination;TLS 握手失败优先查轴 2,而非改 ServiceProfile。这种系统化方法可防止将可恢复的轴 3 问题误判为双故障。

native 与 legacy 证据包分列

Linkerd 2.20 默认 native sidecar,与 legacy init+sidecar 在注入失败时的证据不同。native 路径需检查 restartPolicy 和启动门,legacy 路径需检查 init 容器退出码和 iptables 规则。混贴证据会导致误判,例如将 native 的启动门问题当作应用 bug。

与 Istio 排障的差异

Linkerd 使用 per-target Get() 流,而 Istio 使用 xDS 订阅。排障时不能将 Linkerd 的“无端点”解释为 Istio 的 EDS 空 cluster,也不能将 Istio 的 xDS NACK 类比为 Linkerd 的 gRPC 状态码。两者“五轴”含义不同,混用会指错组件。

Q&A

Linkerd 2.20 排障时,如何快速定位问题属于哪个轴?

根据症状对照入口表:Pod 无 linkerd-proxy 或未注入对应轴 1;TLS 握手错误或身份不匹配对应轴 2;无端点或发现延迟对应轴 3;403 或策略拒绝对应轴 4;502 或超时先否证轴 1-4 再查轴 5。默认顺序为轴 1 到轴 5,一次否证一轴。

Linkerd 2.20 中 native sidecar 和 legacy init+sidecar 在排障时有何区别?

native sidecar(2.20 默认)在轴 1 需检查 Pod restartPolicy 和启动门;legacy 路径需检查 linkerd-init 完成态和 iptables/CNI。证据包必须标明路径,不可混贴。

Linkerd 中 Pod 未注入 sidecar 应该先检查什么?

先检查 namespace 注解、proxy-injector webhook 是否命中、是否跳过注入,以及注入路径(native 或 legacy)的特定条件。不要直接改 destination 配置。

Linkerd 中 TLS 握手失败可能是什么原因?

可能原因包括工作负载证书未由 identity 签发、issuer 不是当前 trust anchor 签发、trust anchor 轮转未完成或 multicluster 不一致。应先否证轴 1,再查轴 2,不要先改 ServiceProfile。

Linkerd 中 403 错误通常与哪个轴相关?如何排查?

403 错误通常与轴 4(策略与 L7)相关。检查 Server、AuthorizationPolicy、ServiceProfile 或 GAPI HTTPRoute 是否被正确加载和匹配。

Linkerd 中 502 错误如何区分是数据面问题还是 destination 问题?

若 destination 已推送端点且策略允许,但 proxy 仍 502,则查 proxy 与对端 inbound(轴 5);若 destination 未推送端点,则留在轴 3-4。

Linkerd 排障与 Istio 排障有何关键差异?

Linkerd 使用 linkerd2-proxy-api gRPC 和 per-target Get() 流,排障入口是五轴和 native/legacy 分列;Istio 使用 xDS 和 Envoy,排障关注 Listener/Cluster warming 和 xDS NACK。两者不能混用证据。

🏷️

标签

➡️

继续阅读