Linkerd: Pengertian, Cara Kerja, Arsitektur, Komponen, Manfaat, Kelebihan, Kekurangan, dan Implementasinya | Dewa234
Linkerd: Pengertian, Cara Kerja, Arsitektur, Komponen, Manfaat, Kelebihan, Kekurangan, dan Implementasinya
Setelah memahami konsep Service Mesh, langkah berikutnya adalah mengenal salah satu implementasi Service Mesh yang banyak digunakan dalam ekosistem Kubernetes, yaitu Linkerd.
Dalam arsitektur microservices, jumlah service dapat berkembang menjadi sangat banyak. Setiap service perlu berkomunikasi dengan service lainnya melalui jaringan. Kondisi tersebut membuat kebutuhan seperti observability, keamanan, traffic management, reliability, dan monitoring menjadi semakin penting.
Linkerd hadir sebagai Service Mesh yang dirancang untuk membantu mengelola komunikasi antar-service secara transparan. Dengan pendekatan tersebut, developer dapat berfokus pada business logic sementara berbagai kebutuhan komunikasi dapat ditangani oleh infrastructure layer.
Linkerd juga memiliki integrasi yang erat dengan Kubernetes dan dirancang dengan pendekatan yang relatif ringan untuk kebutuhan Service Mesh.
Apa Itu Linkerd?
Linkerd adalah Service Mesh open source yang digunakan untuk mengelola komunikasi antar-service pada aplikasi microservices dan cloud-native.
Linkerd menyediakan kemampuan seperti observability, traffic management, reliability, dan security pada komunikasi antar-service.
Dalam lingkungan Kubernetes, Linkerd dapat menambahkan lapisan komunikasi di antara workload sehingga traffic antar-service dapat diamati dan dikendalikan tanpa harus mengubah business logic aplikasi.
Mengapa Linkerd Dibutuhkan?
Microservices memiliki banyak service yang saling berkomunikasi. Semakin banyak service yang digunakan, semakin kompleks pula pengelolaan komunikasi jaringan.
Tanpa Service Mesh, developer dapat harus menangani berbagai kebutuhan komunikasi langsung pada aplikasi.
Service A
│
├── Retry
├── Timeout
├── TLS
├── Metrics
├── Logging
└── Routing
│
▼
Service B
Jika pola tersebut diimplementasikan pada banyak service, kompleksitas aplikasi akan meningkat.
Linkerd memindahkan sebagian kebutuhan tersebut ke infrastructure layer sehingga aplikasi dapat tetap fokus pada fungsi utamanya.
Hubungan Linkerd dengan Service Mesh
Linkerd bukan sekadar tool networking biasa. Linkerd merupakan salah satu implementasi dari konsep Service Mesh.
Service Mesh
│
┌───────────┴───────────┐
│ │
▼ ▼
Istio Linkerd
│ │
▼ ▼
Envoy Proxy Linkerd Proxy
Dengan demikian, artikel ini merupakan lanjutan langsung dari pembahasan Service Mesh sebelumnya.
Bagaimana Cara Kerja Linkerd?
Linkerd menggunakan proxy yang ditempatkan di dekat workload aplikasi untuk menangani komunikasi jaringan.
Pada model deployment Kubernetes, traffic dari sebuah service dapat melewati Linkerd Proxy sebelum diteruskan menuju service tujuan.
+-------------------+
| Service A |
| Application |
+---------+---------+
│
▼
+-------------------+
| Linkerd Proxy |
+---------+---------+
│
│ Network
▼
+-------------------+
| Linkerd Proxy |
+---------+---------+
│
▼
+-------------------+
| Service B |
| Application |
+-------------------+
Proxy menangani traffic secara transparan sehingga aplikasi tidak harus mengetahui seluruh detail implementasi Service Mesh.
Ilustrasi Linkerd pada Kubernetes
Kubernetes Cluster
┌────────────────────────────────────────────┐
│ │
│ +----------------+ +----------------+ │
│ | Pod A | | Pod B | │
│ |----------------| |----------------| │
│ | Application | | Application | │
│ | Linkerd Proxy |◄─►| Linkerd Proxy | │
│ +----------------+ +----------------+ │
│ │
└────────────────────────────────────────────┘
Proxy menjadi bagian penting dari data plane karena bertugas menangani traffic antar-workload.
Arsitektur Linkerd
Arsitektur Linkerd dapat dipahami melalui dua bagian utama, yaitu Control Plane dan Data Plane.
+--------------------------------------+
| LINKERD CONTROL PLANE |
|--------------------------------------|
| Destination |
| Identity |
| Proxy Injector |
+------------------+-------------------+
│
│ Configuration
▼
+--------------------------------------+
| DATA PLANE |
| |
| +-------------+ +-------------+ |
| | Service A | | Service B | |
| | Application | | Application | |
| | Linkerd |◄──►| Linkerd | |
| | Proxy | | Proxy | |
| +-------------+ +-------------+ |
+--------------------------------------+
Control Plane Linkerd
Control Plane adalah bagian Linkerd yang menyediakan fungsi pengelolaan dan konfigurasi yang dibutuhkan oleh data plane.
Komponen utama control plane Linkerd meliputi beberapa bagian seperti:
- Destination.
- Identity.
- Proxy Injector.
Control plane menyediakan informasi dan layanan yang dibutuhkan proxy untuk menjalankan komunikasi dalam mesh.
Data Plane Linkerd
Data Plane merupakan bagian yang menangani traffic aktual antar-service.
Dalam Linkerd, data plane menggunakan Linkerd Proxy yang berjalan dekat dengan workload aplikasi.
Proxy dapat menangani:
- Request routing.
- Load balancing.
- Encryption.
- Metrics.
- Retries.
- Timeout.
- Traffic handling.
Apa Itu Linkerd Proxy?
Linkerd Proxy adalah proxy yang digunakan Linkerd untuk menangani traffic aplikasi pada data plane.
Proxy tersebut dirancang agar ringan dan dioptimalkan untuk kebutuhan Service Mesh.
Dengan adanya proxy, aplikasi tidak harus mengimplementasikan seluruh fungsi networking secara langsung.
Linkerd Proxy dan Sidecar
Dalam deployment tradisional Linkerd pada Kubernetes, proxy dapat disuntikkan sebagai sidecar container ke dalam Pod aplikasi.
+--------------------------------+ | Pod | | | | +------------+ +-------------+ | | | Application| | Linkerd | | | | Container | | Proxy | | | +------------+ +-------------+ | | | +--------------------------------+
Dengan pola ini, aplikasi dan proxy berada dalam Pod yang sama tetapi menjalankan fungsi berbeda.
Linkerd Identity
Identity merupakan bagian penting dari keamanan Service Mesh.
Linkerd dapat memberikan identitas kriptografis kepada workload sehingga komunikasi antar-service dapat menggunakan identitas workload, bukan hanya alamat jaringan.
Konsep tersebut penting dalam penerapan pendekatan keamanan modern seperti Zero Trust.
Linkerd dan mTLS
Linkerd mendukung Mutual TLS atau mTLS untuk membantu mengamankan komunikasi antar-service.
Service A
│
│ Encrypted
│ mTLS
│ Identity
▼
Service B
Dengan mTLS, kedua sisi komunikasi dapat saling melakukan autentikasi dan traffic dapat dienkripsi.
Hal ini membuat Linkerd memiliki hubungan langsung dengan pembahasan sebelumnya mengenai Mutual TLS (mTLS).
Linkerd dan Zero Trust
Zero Trust merupakan pendekatan keamanan yang tidak secara otomatis mempercayai komunikasi hanya karena traffic berasal dari jaringan internal.
Service Mesh seperti Linkerd dapat membantu penerapan prinsip tersebut dengan workload identity dan komunikasi terenkripsi.
Workload A
│
│ Identity
│ mTLS
▼
Service Mesh
│
▼
Workload B
Linkerd dan Service Discovery
Service discovery memungkinkan service menemukan endpoint service lainnya.
Dalam Kubernetes, Linkerd dapat memanfaatkan informasi service yang tersedia pada cluster untuk membantu proxy mengetahui tujuan traffic.
Service A
│
▼
Linkerd Proxy
│
▼
Service Discovery
│
▼
Service B
Dengan demikian, aplikasi tidak perlu menangani seluruh mekanisme discovery secara manual.
Linkerd dan Traffic Management
Linkerd menyediakan berbagai kemampuan untuk mengelola traffic antar-service.
Contohnya:
- Load balancing.
- Traffic routing.
- Retry.
- Timeout.
- Traffic shifting.
- Service profile.
Traffic management membantu aplikasi menghadapi perubahan traffic dan kondisi jaringan secara lebih terkontrol.
Linkerd Load Balancing
Load balancing digunakan untuk mendistribusikan request ke beberapa instance service.
Linkerd
│
┌──────────┼──────────┐
▼ ▼ ▼
Pod A Pod B Pod C
33% 34% 33%
Dengan distribusi traffic, beban tidak harus terpusat pada satu instance.
Linkerd Retry
Retry memungkinkan request dicoba kembali ketika terjadi kegagalan tertentu.
Service A
│
▼
Service B
│
X Error
│
▼
Retry
│
▼
Service B
│
▼
Success
Retry harus digunakan secara hati-hati karena retry yang berlebihan dapat memperbesar beban sistem.
Linkerd Timeout
Timeout menentukan berapa lama request dapat menunggu response sebelum dianggap gagal.
Service A
│
▼
Service B
│
│ Waiting...
│
X Timeout
Timeout membantu mencegah request menggantung terlalu lama ketika service tujuan mengalami masalah.
Linkerd dan Service Profiles
Service Profile digunakan untuk memberikan informasi tambahan mengenai route dan perilaku service tertentu.
Service profile dapat membantu Linkerd memahami endpoint tertentu sehingga fitur observability dan reliability dapat diterapkan dengan lebih spesifik.
Linkerd dan Observability
Salah satu manfaat utama Service Mesh adalah meningkatkan visibility terhadap komunikasi antar-service.
Linkerd dapat memberikan telemetry mengenai traffic seperti:
- Request rate.
- Success rate.
- Latency.
- Traffic volume.
- Request failures.
Informasi tersebut membantu administrator mengetahui kondisi service tanpa harus menambahkan kode monitoring ke setiap aplikasi.
Linkerd dan Metrics
Metrics dapat digunakan untuk mengukur performa dan kesehatan service.
Service A
│
▼
Linkerd Proxy
│
├── Request Rate
├── Success Rate
├── Error Rate
└── Latency
│
▼
Monitoring
Linkerd dan Distributed Tracing
Linkerd juga memiliki hubungan dengan Distributed Tracing yang telah dibahas pada artikel sebelumnya.
Dalam sistem microservices, satu request pengguna dapat melewati beberapa service.
Client │ ▼ Service A │ ▼ Service B │ ▼ Service C │ ▼ Database
Distributed tracing membantu administrator memahami perjalanan request tersebut dari awal hingga akhir.
Linkerd dapat menjadi salah satu sumber telemetry yang digunakan bersama sistem observability dan tracing.
Linkerd dan OpenTelemetry
OpenTelemetry merupakan framework open source yang digunakan untuk menghasilkan dan mengumpulkan telemetry seperti metrics, logs, dan traces.
Linkerd dapat digunakan bersama ekosistem observability yang mendukung OpenTelemetry untuk membantu membangun monitoring aplikasi terdistribusi.
Linkerd dan Grafana
Grafana dapat digunakan untuk memvisualisasikan metrics yang dihasilkan dari sistem observability.
Kubernetes
│
▼
Linkerd
│
▼
Metrics
│
▼
Prometheus
│
▼
Grafana
Dengan kombinasi tersebut, administrator dapat membuat dashboard untuk memantau traffic dan performa service.
Linkerd dan Prometheus
Prometheus dapat digunakan sebagai sistem monitoring metrics dalam ekosistem cloud-native.
Linkerd dapat menghasilkan telemetry yang kemudian dapat digunakan untuk monitoring menggunakan tool seperti Prometheus.
Linkerd dan Kubernetes
Linkerd sangat erat dengan Kubernetes karena dapat dipasang pada cluster Kubernetes untuk memberikan kemampuan Service Mesh.
+--------------------------------------+ | Kubernetes Cluster | | | | +-------------+ +-------------+ | | | Pod A | | Pod B | | | | Application | | Application | | | | Linkerd |◄►| Linkerd | | | | Proxy | | Proxy | | | +-------------+ +-------------+ | | | | Linkerd Control Plane | +--------------------------------------+
Dengan demikian, Kubernetes menyediakan orchestration platform sedangkan Linkerd menambahkan kemampuan komunikasi, security, reliability, dan observability pada service.
Perbedaan Kubernetes dan Linkerd
| Aspek | Kubernetes | Linkerd |
|---|---|---|
| Fokus | Container orchestration. | Service-to-service communication. |
| Workload | Mengelola Pod dan container. | Mengelola komunikasi workload. |
| Scaling | Menyediakan mekanisme orchestration dan scaling. | Membantu traffic menuju workload. |
| Security | Menyediakan mekanisme security platform. | Menyediakan security komunikasi service. |
| Observability | Menyediakan resource dan integrasi monitoring. | Menyediakan telemetry komunikasi service. |
Linkerd dan Cloud-Native
Linkerd merupakan bagian dari ekosistem cloud-native karena dirancang untuk aplikasi yang terdiri dari banyak service dan berjalan pada lingkungan container.
Linkerd dapat digunakan bersama:
- Kubernetes.
- Docker.
- Container Registry.
- CI/CD.
- Prometheus.
- Grafana.
- OpenTelemetry.
- Distributed Tracing.
- Cloud Computing.
Linkerd untuk Microservices
Pada arsitektur microservices, Linkerd dapat membantu mengelola komunikasi antar-service tanpa mengharuskan setiap service mengetahui detail implementasi Service Mesh.
API Gateway
│
▼
Service Mesh
│
┌─────────────┼─────────────┐
▼ ▼ ▼
User Product Order
Service Service Service
│ │ │
└─────────────┼─────────────┘
▼
Database
Linkerd untuk Canary Deployment
Canary deployment memungkinkan versi baru aplikasi menerima sebagian traffic sebelum menggantikan versi lama sepenuhnya.
Traffic
│
▼
Linkerd
/ \
/ \
▼ ▼
Version 1 Version 2
90% 10%
Jika versi baru berjalan dengan baik, distribusi traffic dapat ditingkatkan secara bertahap.
Linkerd untuk High Availability
Linkerd dapat membantu reliability aplikasi melalui kemampuan traffic management, load balancing, retry, timeout, dan observability.
Namun, Service Mesh bukan pengganti desain High Availability secara keseluruhan. Availability tetap membutuhkan cluster yang dirancang dengan baik, redundancy, backup, disaster recovery, monitoring, serta pengelolaan infrastructure yang tepat.
Linkerd dan Security
Security merupakan salah satu aspek penting dalam Service Mesh.
Linkerd dapat membantu keamanan komunikasi melalui:
- mTLS.
- Workload identity.
- Certificate management.
- Encrypted communication.
- Policy dan access control melalui ekosistem Kubernetes.
Linkerd dan mTLS Otomatis
Salah satu konsep penting Linkerd adalah kemampuan mengenkripsi komunikasi antar-workload yang berada dalam mesh menggunakan mTLS.
Application A
│
▼
Linkerd Proxy
│
│ mTLS
▼
Linkerd Proxy
│
▼
Application B
Dengan demikian, developer tidak harus menambahkan implementasi TLS secara manual pada setiap service untuk kebutuhan komunikasi internal yang ditangani oleh mesh.
Linkerd dan Zero Trust Security
Linkerd dapat membantu membangun pendekatan Zero Trust dengan memberikan identitas dan enkripsi pada komunikasi service-to-service.
Hal ini penting terutama pada sistem yang terdiri dari banyak workload dan memiliki kebutuhan security tinggi.
Linkerd vs Istio
Linkerd dan Istio sama-sama merupakan Service Mesh, tetapi keduanya memiliki pendekatan dan karakteristik yang berbeda.
| Aspek | Linkerd | Istio |
|---|---|---|
| Fokus | Kesederhanaan, reliability, security, dan observability. | Traffic management, security, observability, dan fitur yang sangat luas. |
| Proxy | Linkerd Proxy. | Envoy Proxy pada mode sidecar. |
| Kompleksitas | Cenderung lebih sederhana untuk use case tertentu. | Cenderung memiliki cakupan fitur dan konfigurasi yang lebih luas. |
| mTLS | Didukung. | Didukung. |
| Observability | Didukung. | Didukung. |
| Traffic Management | Didukung. | Sangat luas. |
Perbandingan tersebut tidak berarti salah satu selalu lebih baik. Pemilihan Service Mesh harus disesuaikan dengan kebutuhan aplikasi, kompleksitas infrastruktur, kemampuan tim, dan fitur yang diperlukan.
Kelebihan Linkerd
- Dirancang khusus untuk kebutuhan Service Mesh.
- Integrasi erat dengan Kubernetes.
- Proxy relatif ringan.
- Mendukung mTLS.
- Menyediakan observability.
- Mendukung traffic management.
- Membantu meningkatkan reliability microservices.
- Dapat digunakan untuk monitoring komunikasi antar-service.
- Open source.
Kekurangan Linkerd
- Menambah kompleksitas infrastruktur.
- Membutuhkan pemahaman Kubernetes.
- Membutuhkan pemahaman Service Mesh.
- Proxy tetap membutuhkan resource tambahan.
- Debugging komunikasi dapat menjadi lebih kompleks.
- Fitur dan pendekatan tertentu berbeda dengan Service Mesh lain.
- Tidak selalu diperlukan untuk aplikasi sederhana.
Kapan Menggunakan Linkerd?
Linkerd dapat dipertimbangkan ketika aplikasi memiliki kebutuhan seperti:
- Banyak microservices.
- Komunikasi service-to-service yang kompleks.
- Kebutuhan mTLS.
- Kebutuhan observability.
- Kebutuhan traffic management.
- Kebutuhan reliability.
- Kebutuhan monitoring service secara terpusat.
- Lingkungan Kubernetes yang sudah cukup kompleks.
Kapan Tidak Perlu Menggunakan Linkerd?
Tidak semua aplikasi membutuhkan Service Mesh.
Jika aplikasi Dewa234 hanya terdiri dari beberapa service sederhana dan kebutuhan networking dapat ditangani langsung oleh Kubernetes, menambahkan Service Mesh mungkin justru meningkatkan kompleksitas.
Service Mesh lebih tepat digunakan ketika manfaat tambahan seperti security, observability, reliability, dan traffic management sebanding dengan kompleksitas yang ditambahkan.
Best Practice Menggunakan Linkerd
- Mulai dari cluster non-production untuk pengujian.
- Pastikan resource Kubernetes mencukupi.
- Monitor control plane dan proxy.
- Pahami traffic antar-service sebelum memasukkan workload ke mesh.
- Gunakan mTLS sesuai kebutuhan keamanan.
- Gunakan telemetry untuk memantau performa.
- Uji retry dan timeout dengan hati-hati.
- Dokumentasikan konfigurasi Service Mesh.
- Gunakan canary deployment untuk perubahan besar.
- Lakukan pengujian failure scenario.
- Pastikan konfigurasi Service Mesh masuk dalam proses deployment.
Contoh Arsitektur Linkerd pada Kubernetes
Internet
│
▼
API Gateway
│
▼
+----------------+
| Kubernetes |
| Cluster |
+----------------+
│ │ │
▼ ▼ ▼
Service Service Service
A B C
│ │ │
▼ ▼ ▼
Linkerd Linkerd Linkerd
Proxy Proxy Proxy
│ │ │
└───────┼───────┘
▼
Service Mesh
│
▼
Database
Linkerd
Control Plane