Service Discovery: Consul, Eureka ve Kubernetes DNS
Mikroservis mimarisinde servis instance'ları dinamik olarak oluşturulur, ölçeklenir ve yok edilir. IP adresleri ve portlar sürekli değiştiği için sabit adres kullanımı işe yaramaz. Service Discovery (Servis Keşfi), servislerin bir katalog aracılığıyla birbirini otomatik bulmasını sağlayan mekanizmadır . Üç yaygın çözüm öne çıkar: Consul, Eureka ve Kubernetes DNS.
1. Consul: Platformdan Bağımsız, Kapsamlı
Consul, HashiCorp tarafından geliştirilen, servis keşfi, sağlık kontrolü, KV depolama ve servis mesh özelliklerini bir arada sunan bir çözümdür . Her düğümde çalışan Agent, servisleri kaydeder ve sağlık durumlarını izler. Server düğümleri ise Raft konsensüsü ile yüksek erişilebilirlik sağlar .
Güçlü Yönleri:
-
Platform Bağımsızlık: VM, container, serverless ve Kubernetes ortamlarında çalışır .
-
DNS ve HTTP API: Uygulamalar DNS ile keşif yapabilir; ek kütüphane gerekmez .
-
Zengin Sağlık Kontrolleri: HTTP, TCP, gRPC, script, TTL gibi çok çeşitli kontrol türleri .
-
Çoklu Veri Merkezi: Multi-datacenter desteği .
Zayıf Yönleri: Operasyonel karmaşıklık ve Agent kurulumu gerektirir . Ayrıca 1.17.0'dan itibaren Business Source License (BSL) ile lisanslanmıştır; 1.16.3 ve öncesi MPL 2.0'dır .
Ne Zaman Kullanılır? Hibrit ortamlar (Kubernetes + VM), çoklu bulut, çok dilli servisler ve servis mesh ihtiyacı olan sistemler .
2. Eureka: Java/Spring Ekosistemine Özel
Netflix Eureka, REST tabanlı bir servis kayıt merkezidir. Servisler kendini kaydeder ve varsayılan olarak 30 saniyede bir kalp atışı (heartbeat) gönderir; kalp atışı kesilirse instance kayıttan çıkarılır .
Güçlü Yönleri:
-
Spring Cloud Entegrasyonu: Java/Spring ekosisteminde kurulumu ve kullanımı çok kolaydır .
-
İstemci Taraflı Keşif: İstemci, kayıt defterini çekip kendi yük dengelemesini yapar; sunucu kesintilerine dayanıklıdır .
-
Bölge (Zone) Desteği: Aynı bölgedeki servisleri tercih ederek gecikmeyi azaltır .
Zayıf Yönleri: Java ekosistemine sıkı bağımlılık; diğer dillerde kullanımı sınırlıdır. Sağlık kontrolü yalnızca heartbeat'e dayanır; uygulama seviyesindeki hataları tespit etmez . Yeni projelerde Kubernetes DNS'e kıyasla daha az tercih edilmektedir .
Ne Zaman Kullanılır? Mevcut Spring Cloud uygulamaları ve Kubernetes dışı Java mikroservis projeleri .
3. Kubernetes DNS: Platforma Gömülü, Sıfır Konfigürasyon
Kubernetes, her Service kaynağı için otomatik olarak bir DNS kaydı oluşturur. Aynı namespace'teki bir Pod, servis adını (http://my-service) kullanarak erişebilir; farklı namespace için my-service.other-namespace yeterlidir .
Güçlü Yönleri:
-
Sıfır Konfigürasyon: Ek kurulum veya kütüphane gerekmez; Kubernetes DNS yönetir .
-
Dil Bağımsız: Her programlama dili standart DNS kullanır .
-
RBAC Uyumlu: Kubernetes güvenlik politikalarıyla entegredir .
-
Headless Service: Stateful workload'lar için doğrudan Pod IP'leri döner; istemci taraflı yük dengeleme yapılabilir .
Zayıf Yönleri: Yalnızca Kubernetes içinde çalışır; çoklu cluster veya VM'ler arası keşif yapamaz . Sağlık kontrolü Kubernetes probe'larına dayanır; başarısız instance'ın kaldırılması bazen gecikebilir .
Ne Zaman Kullanılır? Tüm uygulamalar Kubernetes üzerindeyse ve ek keşif altyapısı istenmiyorsa .
4. Karşılaştırma ve Karar Rehberi
| Kriter | Consul | Eureka | Kubernetes DNS |
|---|---|---|---|
| Platform | Bağımsız | Java/Spring | Kubernetes |
| Keşif Modeli | DNS + HTTP API | İstemci taraflı | Server-side (ClusterIP) |
| Sağlık Kontrolü | Çok zengin | Heartbeat | Readiness/Liveness Probe |
| Çoklu Ortam | ✅ Evet | Sınırlı | ❌ Hayır |
| Kurulum | Orta-Yüksek | Düşük (Spring) | Sıfır |
| Lisans | BSL (1.17+) | Apache 2.0 | Açık kaynak |
Pratik Öneri (2026):
-
Saf Kubernetes: Kubernetes DNS ile başlayın; yetersiz kaldığında servis mesh (Istio, Linkerd) ekleyin .
-
Hibrit (K8s + VM): Consul kullanın .
-
Mevcut Spring Cloud: Eureka'yı koruyun; yeni projelerde Kubernetes DNS'e geçişi değerlendirin .
5. En İyi Pratikler
| Pratik | Açıklama |
|---|---|
| Basit başlayın | Saf Kubernetes'teyseniz, önce DNS'i deneyin . |
| Sağlık kontrollerini ihmal etmeyin | Keşfin güvenilirliği, sağlık kontrolünün doğruluğuna bağlıdır. |
| DNS cache süresine dikkat edin | Kubernetes'te IP'ler stabil değildir; uzun cache sorun yaratır . |
| mTLS kullanın | Servisler arası iletişimi şifreleyin; yalnızca NetworkPolicy'ye güvenmeyin . |
Sonuç
Consul, Eureka ve Kubernetes DNS, farklı ihtiyaçlara cevap veren üç olgun çözümdür. Consul, hibrit ve çok dilli ortamlarda en kapsamlı seçenektir; ancak operasyonel maliyeti yüksektir. Eureka, Spring Cloud ekosisteminde basit ve etkilidir; ancak yeni projelerde yerini Kubernetes DNS'e bırakmaktadır. Kubernetes DNS, saf Kubernetes ortamlarında sıfır konfigürasyon ve dil bağımsızlığı ile en pratik çözümdür. Doğru seçim, platformunuzun sınırlarına ve operasyonel kapasitenize bağlıdır. Unutmayın: En iyi service discovery, ekibinizin yönetebileceği en basit çözümdür.