Service mesh قول میدهد امنیت، مشاهدهپذیری و reliability بین سرویسها — بدون دست زدن به کد. در عمل خیلی تیمها با پیچیدگی و سنگینی mesh کنار میکشند.
Linkerd شعارش را صریح میگوید:
Service mesh without the mess — security, observability, and reliability without the complexity or bloat of other meshes.
۱۰۰٪ open source، CNCF Graduated، و تنها service mesh نوشتهشده با Rust در این مقیاس. سازنده: Buoyant (۲۰۱۶). اولین service mesh که به Graduated رسید — ۲۸ ژوئیه ۲۰۲۱.
نسخههای docs تا 2.20 (rate-limit-aware load balancing، مصرف حافظه کمتر، متریک بهتر).
مشکل: mesh سنگین در برابر نیاز واقعی
Istio / Envoy-sidecar سنگین:
قابلیت زیاد → ops زیاد، footprint بیشتر
بدون mesh:
mTLS و retry و golden metrics را خودتان مینویسید
Linkerd:
micro-proxy فوقسبک کنار هر Pod
zero-config mTLS + metrics + retries/timeouts| معیار | Istio | Cilium mesh | Linkerd |
|---|---|---|---|
| Data plane | Envoy | eBPF ± Envoy | linkerd2-proxy (Rust) |
| تمرکز | feature-rich | network + security | ساده و ultralight |
| mTLS | ✅ | ✅ | ✅ خودکار |
| تغییر کد اپ | ❌ | ❌ | ❌ |
| Ingress داخلی | Gateway/Ingress | Gateway | ❌ — با Contour/EG ترکیب کنید |
| CNCF mesh Graduated اول | — | Graduated (CNI) | ✅ ۲۰۲۱ |
Linkerd عمداً عمومیترین proxy جهان را انتخاب نکرد؛ یک micro-proxy مخصوص mesh ساخت — جزئیات در Why Linkerd doesn’t use Envoy.
Linkerd چیست؟
طبق Overview:
- service mesh برای Kubernetes
- runtime debugging، observability، reliability، security
- بدون تغییر کد application
- دو جزء: control plane + data plane (meshing / injecting)
Site: linkerd.io
Docs: linkerd.io/docs
Proxy: github.com/linkerd/linkerd2-proxy
Org: github.com/linkerd
License: Apache 2.0
Enterprise / support: اکوسیستم Buoyant
تاریخچه و CNCF
| تاریخ | رویداد |
|---|---|
| ۲۰۱۶ | ایجاد توسط Buoyant (Linkerd 1.x روی JVM/Finagle) |
| ۲۳ ژانویه ۲۰۱۷ | ورود به CNCF (از اولین پروژههای Sandbox/Inception) |
| ۶ آوریل ۲۰۱۸ | Incubating |
| Linkerd 2.x | بازنویسی برای Kubernetes؛ proxy به Rust |
| ۲۸ ژوئیه ۲۰۲۱ | CNCF Graduated — اولین service mesh Graduated |
| ۲.۱۴+ | تمرکز روی Gateway API برای config |
| ۲.۲۰ | LB آگاه از rate-limit، memory کمتر |
Adopters شناختهشده در اعلام Graduated: Microsoft، Nordstrom، Expedia، JPMC و دیگران.
معماری: Control Plane و Data Plane
┌─────────────────────────────────────────┐
│ Control plane (namespace linkerd) │
│ destination · identity · proxy-injector│
└───────────────┬─────────────────────────┘
│ gRPC / policy / certs
┌──────────┼──────────┐
▼ ▼ ▼
Pod+proxy Pod+proxy Pod+proxy
(data plane: linkerd2-proxy)Data plane — linkerd2-proxy
- sidecar (از ۲.۲۰ اغلب بهصورت native sidecar: init با
restartPolicy: Always) - نوشتهشده با Rust — حافظه امنتر، footprint کوچک
- transparent proxy برای HTTP، HTTP/2، TCP
- WebSocket، mTLS خودکار، LB مبتنی بر latency
- متریک Prometheus برای HTTP و TCP
tapبرای تشخیص on-demand
linkerd-init: با iptables ترافیک TCP را از/به proxy میفرستد (مگر Linkerd CNI plugin فعال باشد).
Control plane — سه هسته
| سرویس | نقش |
|---|---|
| destination | service discovery برای proxyها — endpointها، policy، hintهای routing |
| identity | CA داخلی — صدور هویت mTLS به هر proxy (SPIFFE-style) |
| proxy-injector | Mutating Admission Webhook — inject خودکار sidecar |
همه proxyها به destination وصل میمانند؛ identity گواهی را میچرخاند؛ injector هنگام create شدن Pod کار میکند.
Proxy injection
با annotation روی namespace یا workload:
annotations:
linkerd.io/inject: enabledجریان:
- API server → webhook injector
- اگر injectable: اضافه شدن
linkerd-init+linkerd-proxy - از
kube-systemوcert-managerبهطور پیشفرض inject نمیشود (برای جلوگیری از وابستگی دایرهای)
غیرفعالسازی موردی:
linkerd.io/inject: disabledCLI:
linkerd inject deployment.yml | kubectl apply -f -
# یا فقط annotation:
kubectl annotate ns apps linkerd.io/inject=enabledسه ستون ارزش
۱. Security — mTLS
- رمزنگاری در مسیر بین Podهای meshed بدون config دستی cert
- identity از control plane
- Authorization policy (با Server + HTTPRoute/GRPCRoute و policy CRDها)
مکمل cert-manager برای certهای north-south / Ingress؛ east-west را Linkerd identity پوشش میدهد.
۲. Observability
- golden metrics: success rate، RPS، latency
- بدون instrument کردن کد
- Prometheus scrape از proxyها
linkerd viz/ dashboard وtapبرای دیدن زنده درخواستها
با Fluentd / Fluent Bit میتوان access/telemetry را به SIEM فرستاد؛ با Falco رفتار syscall جدا مانیتور میشود.
۳. Reliability
- latency-aware load balancing
- retries و timeouts (از طریق Gateway API routes)
- blue/green و traffic split
- در ۲.۲۰: rate-limit-aware LB برای رفتار بهتر زیر فشار
Gateway API — مهم: mesh نه Ingress
Linkerd کنترلر Ingress/Gateway شمال–جنوب ندارد. اگر Gateway بسازید و انتظار IP عمومی از Linkerd داشته باشید، اتفاقی نمیافتد.
الگوی صحیح:
Internet
→ [Contour](/blog/contour-kubernetes-ingress-envoy-guide/) / Envoy Gateway / NGINX
→ Services داخل cluster
→ Linkerd proxies (east-west mTLS, retries, policy)برای داخل mesh، Linkerd از انواع استاندارد Gateway API استفاده میکند:
| نوع | کاربرد |
|---|---|
| HTTPRoute | پارامتر کردن درخواست HTTP — routing، timeout، … |
| GRPCRoute | همین برای gRPC |
توسعهٔ ویژگیهای جدید روی این انواع متمرکز است. ServiceProfiles و HTTPRoute قدیمی policy.linkerd.io هنوز کار میکنند اما مسیر آینده Gateway API استاندارد است.
نکته عملی: برای policy داخل mesh، parentRefs اغلب به منابع Linkerd مثل Server (policy.linkerd.io) اشاره میکند — نه لزوماً به Gateway لبه. قاطی کردن این دو مدل باعث میشود edge route شود ولی timeout/auth mesh اعمال نشود.
سازگاری نسخه Gateway API با Linkerd در جدول docs رسمی (مثلاً ۲.۱۸–۲.۲۰ با HTTPRoute/GRPCRoute v1) آمده است.
نصب
پیشنیاز
- Kubernetes cluster
- مجوز cluster-admin برای نصب اولیه
- (توصیه) بررسی با
linkerd check --pre
CLI
# نصب CLI — روش روز را از linkerd.io/releases بگیرید
curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install | sh
linkerd version
linkerd check --preControl plane
linkerd install --crds | kubectl apply -f -
linkerd install | kubectl apply -f -
linkerd checkViz (مشاهدهپذیری — اختیاری ولی رایج)
linkerd viz install | kubectl apply -f -
linkerd viz check
linkerd viz dashboardMesh کردن اپ
kubectl create ns demo
kubectl annotate ns demo linkerd.io/inject=enabled
# deploy apps در demo — Podها proxy میگیرند
linkerd viz edges -n demoقابلیتهای proxy (خلاصه)
از linkerd2-proxy:
- transparent proxying HTTP / HTTP/2 / TCP
- mTLS خودکار
- L7 LB با آگاهی از latency؛ L4 برای غیر-HTTP
- متریک Prometheus
- WebSocket
- discovery از DNS و Destination gRPC API
Opaque ports برای پروتکلهایی که نباید L7 parse شوند قابل تنظیماند.
مقایسه با همسایهها
| نیاز | انتخاب |
|---|---|
| Mesh ساده، ultralight، Rust | Linkerd |
| Mesh feature-max با Envoy | Istio |
| eBPF network + optional mesh | Cilium |
| North-south Ingress روی Envoy | Contour / Envoy Gateway |
| Universal L7 engine | Envoy |
| App building blocks | Dapr |
Linkerd و Contour/Envoy Gateway مکملاند: یکی east-west، یکی north-south.
امنیت و عملیات
- سالانه security audit در مسیر Graduated
- fuzz testing روی proxy
- سطح حمله sidecar: فقط image رسمی، محدود کردن Who can annotate inject
- Resource requests کوچک برای proxy — همچنان در cluster بزرگ جمع میشود؛ سایز را مانیتور کنید
- Trust root identity را backup/rotate طبق docs
linkerd checkرا در CI بعد از upgrade بگذارید
Upgrade: همیشه مسیر رسمی نسخه به نسخه را بخوانید (CRD و Gateway API bump حساس است، مخصوصاً GRPCRoute).
Troubleshooting
| علامت | بررسی |
|---|---|
| Inject نشد | annotation، webhook، namespace مستثنی |
| mTLS fail | identity pods، clock skew، meshed نبودن یک طرف |
| متریک خالی | viz نصب؟ scrape Prometheus؟ |
| HTTPRoute بیاثر | parentRefs درست؟ نسخه Gateway API؟ |
| Init/CNI conflict | CNI plugin Linkerd در برابر iptables init |
linkerd check
linkerd diagnostics proxy-logs <pod>
kubectl -n linkerd get podsارتباط با stack شما
Clients
→ Ingress ([Contour](/blog/contour-kubernetes-ingress-envoy-guide/) / EG)
→ Service
→ Pod + linkerd-proxy ←──mTLS──→ Pod + linkerd-proxy
│
├── metrics → Prometheus / Grafana
└── logs → [Fluentd](/blog/fluentd-unified-logging-layer-guide/) / Bit
Foundation:
[CoreDNS](/blog/coredns-kubernetes-dns-guide/) · [Cilium](/blog/cilium-ebpf-kubernetes-networking/) (CNI)
[cert-manager](/blog/cert-manager-kubernetes-tls-certificates/) (edge TLS)
[Harbor](/blog/harbor-cloud-native-registry-guide/) · [Falco](/blog/falco-runtime-security-ebpf-guide/)
GitOps: [Argo](/blog/argo-project-kubernetes-gitops-cicd/)Best practices
- اول
linkerd check --preو یک namespace canary - Mesh را تدریجی کنید — نه همه cluster یکشبه
- Ingress جدا نگه دارید؛ از Linkerd انتظار LB عمومی نداشته باشید
- برای routing/timeout از HTTPRoute/GRPCRoute استاندارد شروع کنید
- Viz + Prometheus را از روز اول وصل کنید
- Opaque ports را برای DB/protocolهای خاص تنظیم کنید
- تزریق روی
kube-systemرا عمداً باز نکنید - در ۲.۲۰+ رفتار native sidecar را در محیط خود validate کنید
- Playbook upgrade و
linkerd checkدر pipeline - Authorization policy را بعد از mTLS پایدار اضافه کنید
چه زمانی Linkerd؟
✅ استفاده کنید
- Kubernetes با نیاز mTLS و golden metrics بدون تیم mesh بزرگ
- اولویت footprint و سادگی ops
- east-west reliability (retry/timeout/LB)
- تیمهایی که «mesh without the mess» میخواهند
⚠️ شاید نه
- نیاز به صدها فیلتر Envoy سفارشی و multi-cluster فوقپیچیده → Istio را ارزیابی کنید
- فقط NetworkPolicy بدون sidecar → Cilium ممکن است کافی باشد
- انتظار Ingress همهکاره از خود Linkerd
جمعبندی
| مفهوم | توضیح |
|---|---|
| Linkerd | ultralight Kubernetes service mesh |
| linkerd2-proxy | micro-proxy Rust — data plane |
| Control plane | destination، identity، proxy-injector |
| Inject | annotation → sidecar شفاف |
| ارزش | mTLS + observability + reliability |
| Gateway API | HTTPRoute/GRPCRoute برای mesh config |
| Ingress | جدا — Contour / Envoy Gateway / … |
| CNCF | Graduated ژوئیه ۲۰۲۱ — اولین mesh Graduated |
Linkerd شرط میبندد که service mesh باید کوچک، ایمن و قابلعملیات باشد — با Rust و یک proxy مخصوص، نه با کپی کردن تمام قابلیتهای یک edge proxy عمومی داخل هر Pod.
قدم بعدی
- Get started —
check --pre→install→viz - یک namespace demo با
inject: enabled - داشبورد golden metrics بین دو سرویس
- یک HTTPRoute برای timeout/retry
- جلوی cluster یک Contour/EG بگذارید و مسیر کامل north-south + east-west را تست کنید
منابع
- Linkerd — linkerd.io
- Overview
- Gateway API support
- Proxy injection
- CNCF Linkerd
- Graduation announcement
- linkerd2-proxy (Rust)
- Envoy (مقاله P30Light)
منتشر شده در P30Light — بخش زیرساخت و سرور.