<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kubernetes service discovery arşivleri - Ali Karahisar</title>
	<atom:link href="https://alikarahisar.com/blog/tag/kubernetes-service-discovery/feed/" rel="self" type="application/rss+xml" />
	<link>https://alikarahisar.com/blog/tag/kubernetes-service-discovery/</link>
	<description>Yazılım ve AI Hakkında Karalamalar</description>
	<lastBuildDate>Fri, 11 Sep 2026 09:04:24 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1</generator>

<image>
	<url>https://alikarahisar.com/blog/wp-content/uploads/2026/08/cropped-Code_Generated_Image-32x32.png</url>
	<title>Kubernetes service discovery arşivleri - Ali Karahisar</title>
	<link>https://alikarahisar.com/blog/tag/kubernetes-service-discovery/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Spring Cloud vs. Kubernetes: Service Discovery ve Trafik Yönetimi Kime Emanet Edilmeli?</title>
		<link>https://alikarahisar.com/blog/spring-cloud-vs-kubernetes-service-discovery-trafik-yonetimi/</link>
					<comments>https://alikarahisar.com/blog/spring-cloud-vs-kubernetes-service-discovery-trafik-yonetimi/#respond</comments>
		
		<dc:creator><![CDATA[Ali Karahisar]]></dc:creator>
		<pubDate>Fri, 11 Sep 2026 08:59:21 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Mikroservices]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[Yazılım Mimarisi]]></category>
		<category><![CDATA[Consul vs Kubernetes]]></category>
		<category><![CDATA[hizmet keşfi]]></category>
		<category><![CDATA[Istio trafik yönetimi]]></category>
		<category><![CDATA[Kubernetes ConfigMap]]></category>
		<category><![CDATA[Kubernetes DNS]]></category>
		<category><![CDATA[Kubernetes service discovery]]></category>
		<category><![CDATA[mikroservis yük dengeleme]]></category>
		<category><![CDATA[service discovery]]></category>
		<category><![CDATA[Spring Cloud Eureka]]></category>
		<category><![CDATA[Spring Cloud LoadBalancer]]></category>
		<guid isPermaLink="false">https://alikarahisar.com/blog/?p=58</guid>

					<description><![CDATA[<p>Mikroservis mimarisinde “Spring Cloud mu Kubernetes mi?” sorusu sıkça gündeme gelir. Ancak bir sistem mimarı açısından asıl karar, kullanılacak ürünlerden önce sorumluluk sınırlarıyla ilgilidir: Hizmet keşfi, yük dengeleme ve konfigürasyon yönetiminin hangi bölümü uygulamaya, hangi bölümü platforma ait olmalıdır? Spring Cloud, Eureka ve Consul gibi çözümler bu sorumlulukları uygulama seviyesine yaklaştırır. Kubernetes DNS ve Kubernetes [&#8230;]</p>
<p><a href="https://alikarahisar.com/blog/spring-cloud-vs-kubernetes-service-discovery-trafik-yonetimi/">Spring Cloud vs. Kubernetes: Service Discovery ve Trafik Yönetimi Kime Emanet Edilmeli?</a> yazısı ilk önce <a href="https://alikarahisar.com/blog">Ali Karahisar</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Mikroservis mimarisinde “Spring Cloud mu Kubernetes mi?” sorusu sıkça gündeme gelir. Ancak bir sistem mimarı açısından asıl karar, kullanılacak ürünlerden önce sorumluluk sınırlarıyla ilgilidir:</p>



<span id="more-58"></span>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Hizmet keşfi, yük dengeleme ve konfigürasyon yönetiminin hangi bölümü uygulamaya, hangi bölümü platforma ait olmalıdır?</p>
</blockquote>



<p class="wp-block-paragraph">Spring Cloud, Eureka ve Consul gibi çözümler bu sorumlulukları uygulama seviyesine yaklaştırır. Kubernetes DNS ve Kubernetes Service temel ağ yeteneklerini altyapı seviyesinde sunar. Istio gibi Service Mesh ürünleri ise merkezi trafik politikaları, gözlemlenebilirlik ve servisler arası güvenlik katmanı ekler.</p>



<p class="wp-block-paragraph">Doğru seçim yalnızca servis sayısına bağlı değildir. Ekip sayısı, kullanılan programlama dilleri, dağıtım ortamı, güvenlik gereksinimleri ve organizasyonun platform işletme kapasitesi birlikte değerlendirilmelidir.</p>



<h2 class="wp-block-heading">Kısa cevap: Hangi sorumluluk kime verilmeli?</h2>



<p class="wp-block-paragraph">Kubernetes üzerinde çalışan yeni sistemler için genel mimari öneri şöyledir:</p>



<ul class="wp-block-list">
<li>Hizmet keşfi: Kubernetes Service ve DNS</li>



<li>Temel yük dengeleme: Kubernetes ağ katmanı</li>



<li>Gelişmiş L7 trafik politikaları: İhtiyaç varsa Istio</li>



<li>İş anlamı taşıyan retry, fallback ve idempotency: Uygulama</li>



<li>Dağıtım konfigürasyonu: ConfigMap ve GitOps</li>



<li>Dinamik uygulama konfigürasyonu: Gerekiyorsa Spring Cloud Config veya Consul</li>



<li>Hassas bilgiler: KMS veya harici secret manager</li>
</ul>



<p class="wp-block-paragraph">Kubernetes dışında çalışan veya VM, container ve farklı veri merkezlerini birlikte kullanan hibrit sistemlerde Consul güçlü bir alternatiftir. Tamamen Java tabanlı daha küçük yapılarda Eureka da yeterli olabilir.</p>



<p class="wp-block-paragraph">Aynı sorumluluğu hem Spring Cloud hem Kubernetes tarafında kalıcı olarak çözmek ise genellikle gereksiz karmaşıklık yaratır.</p>



<h2 class="wp-block-heading">Service Discovery nedir?</h2>



<p class="wp-block-paragraph">Service discovery, bir servisin iletişim kuracağı diğer servislerin güncel ağ adreslerini bulmasını sağlar.</p>



<p class="wp-block-paragraph">Mikroservis instance’ları ölçekleme, yeniden başlatma veya hata nedeniyle sürekli değişebilir. Bu nedenle uygulamaların sabit IP adreslerine bağlanması sürdürülebilir değildir. Bir servis kataloğu veya kararlı platform adresi gerekir.</p>



<h3 class="wp-block-heading">Spring Cloud Eureka ile hizmet keşfi</h3>



<p class="wp-block-paragraph">Eureka modelinde uygulamalar açılırken kendilerini merkezi registry’ye kaydeder ve düzenli heartbeat gönderir. İstemciler, çağırmak istedikleri servisin instance listesini Eureka’dan alır.</p>



<p class="wp-block-paragraph">Güncel Spring Cloud mimarisinde Eureka hizmet keşfini sağlarken istemci tarafı yük dengeleme Spring Cloud LoadBalancer tarafından gerçekleştirilir. Varsayılan seçim round-robin’dir; farklı seçim stratejileri de uygulanabilir. <a href="https://docs.spring.io/spring-cloud-netflix/reference/spring-cloud-netflix.html">Spring Cloud Netflix</a>, <a href="https://docs.spring.io/spring-cloud-commons/reference/spring-cloud-commons/loadbalancer.html">Spring Cloud LoadBalancer</a></p>



<p class="wp-block-paragraph">Bu yaklaşım özellikle şu koşullarda anlamlıdır:</p>



<ul class="wp-block-list">
<li>Sistem ağırlıklı olarak Spring Boot kullanıyorsa</li>



<li>Servisler VM veya bare metal üzerinde çalışıyorsa</li>



<li>Kubernetes’e geçiş henüz tamamlanmadıysa</li>



<li>Uygulama seviyesinde instance metadata’sına göre seçim gerekiyorsa</li>
</ul>



<p class="wp-block-paragraph">Eureka’nın temel dezavantajı, discovery bilgisini uygulama çalışma zamanının bir parçası hâline getirmesidir. Her servis registry istemcisi taşır; kütüphane sürümleri ve cache davranışları sistemin ağ davranışını etkiler.</p>



<h3 class="wp-block-heading">Consul ile hizmet keşfi</h3>



<p class="wp-block-paragraph">Consul; servis kataloğu, sağlık kontrolleri, HTTP API ve DNS tabanlı keşif sunar. Spring Cloud Consul kullanan uygulamalar HTTP API üzerinden kayıt olabilirken Java dışındaki uygulamalar aynı kataloğa DNS aracılığıyla erişebilir. <a href="https://docs.spring.io/spring-cloud-consul/reference/discovery.html">Spring Cloud Consul</a></p>



<p class="wp-block-paragraph">Consul’un Eureka’ya göre en önemli avantajı platform ve dil bağımsızlığıdır. VM, container, Kubernetes ve farklı veri merkezlerinin birlikte bulunduğu yapılarda ortak bir servis kataloğu oluşturabilir.</p>



<p class="wp-block-paragraph">Bunun karşılığında Consul cluster’ının yüksek erişilebilir biçimde kurulması, izlenmesi, yükseltilmesi ve güvenliğinin sağlanması gerekir.</p>



<h3 class="wp-block-heading">Kubernetes Service Discovery</h3>



<p class="wp-block-paragraph">Kubernetes’te Pod IP adresleri geçicidir. Uygulamaların bağlandığı kararlı kimlik <code>Service</code> nesnesidir.</p>



<p class="wp-block-paragraph">CoreDNS, Kubernetes servisleri için DNS kayıtları oluşturur. Kubernetes de bir servise bağlı güncel Pod listesini EndpointSlice nesneleri üzerinden takip eder. Böylece uygulama <code>http://orders</code> gibi kararlı bir servis adına bağlanabilir. Registry SDK’sı, heartbeat veya istemci tarafında instance listesi yönetmesi gerekmez. <a href="https://kubernetes.io/docs/concepts/services-networking/service/">Kubernetes Service</a>, <a href="https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/">Kubernetes DNS</a></p>



<p class="wp-block-paragraph">Bu modelin başlıca avantajları şunlardır:</p>



<ul class="wp-block-list">
<li>Programlama dilinden bağımsızdır.</li>



<li>Uygulamayı discovery kodundan arındırır.</li>



<li>Pod yaşam döngüsü ile endpoint yönetimini aynı kontrol düzlemine bağlar.</li>



<li>Platform genelinde standart servis adresleme modeli oluşturur.</li>



<li>Kubernetes kullanılıyorsa ek registry işletme ihtiyacını ortadan kaldırır.</li>
</ul>



<p class="wp-block-paragraph">Bu nedenle Kubernetes üzerinde çalışan yeni bir sistemde yalnızca hizmet keşfi için Eureka kurmak çoğunlukla gereksizdir.</p>



<h2 class="wp-block-heading">Spring Cloud LoadBalancer ve Kubernetes Service farkı</h2>



<p class="wp-block-paragraph">Spring Cloud LoadBalancer ile Kubernetes Service aynı sorunu farklı katmanlarda çözer.</p>



<h3 class="wp-block-heading">İstemci tarafı yük dengeleme</h3>



<p class="wp-block-paragraph">Spring Cloud LoadBalancer modelinde uygulama:</p>



<ol start="1" class="wp-block-list">
<li>Discovery sisteminden instance listesini alır.</li>



<li>Uygun instance’ı seçer.</li>



<li>İsteği doğrudan o instance’a gönderir.</li>
</ol>



<p class="wp-block-paragraph">Bu model, istemcinin metadata, bölge veya özel iş bağlamına göre hedef seçmesine olanak tanır. Buna karşılık seçim mantığı her uygulamanın içine dağılır.</p>



<h3 class="wp-block-heading">Altyapı tarafı yük dengeleme</h3>



<p class="wp-block-paragraph">Kubernetes Service modelinde uygulama tek bir servis adresine bağlanır. Trafiğin uygun Pod’a aktarılması kube-proxy veya kullanılan ağ altyapısı tarafından gerçekleştirilir.</p>



<p class="wp-block-paragraph">Bu yaklaşım uygulamayı sadeleştirir ve farklı dillerde yazılmış servisler arasında standart davranış sağlar. Ancak temel Kubernetes Service; HTTP header’ına göre yönlendirme, yüzdesel canary veya request-level circuit breaking gibi gelişmiş L7 politikaları sunmaz.</p>



<p class="wp-block-paragraph">Ayrıca uzun süre açık kalan HTTP/2 veya gRPC bağlantıları dikkatle değerlendirilmelidir. DNS ya da endpoint kümesi değişse bile connection pool aynı backend’e trafik göndermeyi sürdürebilir.</p>



<h2 class="wp-block-heading">Istio trafik yönetimine ne ekler?</h2>



<p class="wp-block-paragraph">Istio, Kubernetes service discovery mekanizmasının yerine geçmez. Kubernetes servis ve endpoint bilgisini kullanır; bunun üzerine programlanabilir bir trafik katmanı ekler.</p>



<p class="wp-block-paragraph">Istio ile merkezi olarak şu politikalar uygulanabilir:</p>



<ul class="wp-block-list">
<li>Ağırlıklı ve sürüm bazlı yönlendirme</li>



<li>Canary ve aşamalı dağıtım</li>



<li>HTTP header veya path bazlı routing</li>



<li>Timeout ve retry</li>



<li>Circuit breaking</li>



<li>Sağlıksız instance’ları havuzdan çıkarma</li>



<li>Trafik yansıtma</li>



<li>Servisler arası mTLS</li>



<li>Kimlik tabanlı erişim politikaları</li>



<li>Ortak trafik metriği ve erişim kayıtları</li>
</ul>



<p class="wp-block-paragraph">Istio’nun trafik modeli Envoy proxy’leri kullanır. Sidecar modelinde her Pod’un yanında bir proxy çalışır. Ambient modelde temel L4 işlevleri node seviyesinde sağlanabilir; L7 özellikleri gerektiğinde waypoint proxy devreye girer. <a href="https://istio.io/latest/docs/concepts/traffic-management/">Istio Traffic Management</a>, <a href="https://istio.io/latest/docs/overview/dataplane-modes/">Istio veri düzlemi modelleri</a></p>



<h3 class="wp-block-heading">Istio’nun avantajları</h3>



<ul class="wp-block-list">
<li>Farklı dillerdeki servisler için ortak ağ politikası sağlar.</li>



<li>Trafik davranışı uygulama sürümünden bağımsız değiştirilebilir.</li>



<li>Canary ve progressive delivery süreçlerini kolaylaştırır.</li>



<li>mTLS ve servis kimliğini merkezi hâle getirir.</li>



<li>Gözlemlenebilirlik standardı oluşturur.</li>



<li>Politika yönetimini platform ekibinde toplar.</li>
</ul>



<h3 class="wp-block-heading">Istio’nun maliyetleri</h3>



<ul class="wp-block-list">
<li>Yeni bir kontrol ve veri düzlemi işletilir.</li>



<li>Proxy’ler CPU, bellek ve belirli ölçüde gecikme ekler.</li>



<li>Hata ayıklama süreci daha karmaşık hâle gelir.</li>



<li>Yanlış bir merkezi politika çok sayıda servisi etkileyebilir.</li>



<li>Proxy ve kontrol düzlemi yükseltmeleri dikkatle yönetilmelidir.</li>



<li>Platform ekibinde Service Mesh uzmanlığı gerekir.</li>
</ul>



<p class="wp-block-paragraph">Dolayısıyla Istio, “mikroservis kullanıyoruz” gerekçesiyle kurulacak bir bileşen değildir. Sağladığı merkezi politika değeri, işletme maliyetini geçtiğinde kullanılmalıdır.</p>



<h2 class="wp-block-heading">Konfigürasyon yönetimi: Spring Cloud Config mi ConfigMap mi?</h2>



<p class="wp-block-paragraph">Konfigürasyon yönetimi, service discovery ve trafik yönetiminden ayrı ele alınmalıdır. Istio uygulamanın iş konfigürasyonunu yönetmez.</p>



<h3 class="wp-block-heading">Spring Cloud Config</h3>



<p class="wp-block-paragraph">Spring Cloud Config, uygulama ayarlarını merkezi bir servis üzerinden sunar. Git deposu kullanıldığında değişiklik geçmişi, sürümleme ve ortam bazlı konfigürasyon yönetimi elde edilir.</p>



<p class="wp-block-paragraph">Şu durumlarda güçlüdür:</p>



<ul class="wp-block-list">
<li>Uygulamalar Kubernetes dışında da çalışıyorsa</li>



<li>Spring profile modeli yoğun kullanılıyorsa</li>



<li>Uygulama ve ortam bazlı konfigürasyon hiyerarşisi gerekiyorsa</li>



<li>Konfigürasyonun deployment’tan bağımsız yenilenmesi isteniyorsa</li>
</ul>



<p class="wp-block-paragraph">Dezavantajı, Config Server’ın uygulama başlangıcında ek bir bağımlılığa dönüşmesidir. Dinamik refresh sırasında bütün bean’lerin ve bağlantı havuzlarının yeni değerlerle güvenli biçimde çalışacağı da garanti değildir.</p>



<h3 class="wp-block-heading">Consul Config</h3>



<p class="wp-block-paragraph">Spring Cloud Consul Config, Consul KV üzerinden uygulama ayarlarını yükleyebilir. Config Watch, ilgili değerlerde değişiklik algılandığında Spring refresh olayı oluşturabilir. <a href="https://docs.spring.io/spring-cloud-consul/reference/config.html">Spring Cloud Consul Config</a></p>



<p class="wp-block-paragraph">Discovery için zaten Consul kullanılan hibrit sistemlerde operasyonel açıdan çekici olabilir. Ancak aynı Consul cluster’ının hem discovery hem konfigürasyon için kullanılması hata alanını büyütür. Consul kesintisinin iki kritik fonksiyonu birden etkilemesi hesaba katılmalıdır.</p>



<h3 class="wp-block-heading">Kubernetes ConfigMap</h3>



<p class="wp-block-paragraph">Kubernetes ConfigMap, hassas olmayan uygulama ayarlarını container imajından ayırır. Değerler ortam değişkeni veya volume içindeki dosyalar olarak Pod’a aktarılabilir.</p>



<p class="wp-block-paragraph">Volume olarak bağlanan ConfigMap güncellemeleri zaman içinde Pod’a yansıtılabilir; fakat uygulamanın dosyayı yeniden okuması gerekir. Ortam değişkeni olarak verilen ConfigMap değerleri otomatik güncellenmez ve Pod yeniden başlatılmalıdır. <a href="https://kubernetes.io/docs/concepts/configuration/configmap/">Kubernetes ConfigMap</a></p>



<p class="wp-block-paragraph">Birçok üretim sistemi için kontrollü rolling restart, dinamik context refresh’ten daha güvenlidir. Yeni konfigürasyon yeni Pod’larda doğrulanır; readiness kontrolü başarısız olursa rollout durdurulabilir.</p>



<h3 class="wp-block-heading">Kubernetes Secret yeterli mi?</h3>



<p class="wp-block-paragraph">Kubernetes Secret nesnesi kullanmak tek başına güvenli secret yönetimi anlamına gelmez. Secret verileri varsayılan olarak etcd içinde şifrelenmeden saklanabilir.</p>



<p class="wp-block-paragraph">Üretim ortamında şu kontroller gerekir:</p>



<ul class="wp-block-list">
<li>Encryption-at-rest</li>



<li>Sıkı RBAC</li>



<li>Secret erişim kayıtları</li>



<li>Düzenli rotasyon</li>



<li>Tercihen KMS veya harici secret manager entegrasyonu</li>
</ul>



<p class="wp-block-paragraph"><a href="https://kubernetes.io/docs/concepts/security/secrets-good-practices/">Kubernetes Secret güvenlik önerileri</a></p>



<h2 class="wp-block-heading">Retry ve circuit breaker uygulamada mı mesh’te mi olmalı?</h2>



<p class="wp-block-paragraph">Bu sorumluluk bütünüyle tek bir katmana verilemez.</p>



<p class="wp-block-paragraph">Mesh şu teknik kararları üstlenebilir:</p>



<ul class="wp-block-list">
<li>Bağlantı kurulamazsa farklı endpoint denemek</li>



<li>Belirli hata kodlarında sınırlı retry yapmak</li>



<li>Sağlıksız instance’ı geçici olarak havuzdan çıkarmak</li>



<li>Ağ seviyesinde timeout standardı uygulamak</li>
</ul>



<p class="wp-block-paragraph">Uygulamada kalması gereken kararlar ise şunlardır:</p>



<ul class="wp-block-list">
<li>Bir ödeme isteği güvenle tekrar edilebilir mi?</li>



<li>İşlem idempotent mi?</li>



<li>Hangi fallback iş açısından kabul edilebilir?</li>



<li>Kısmi başarı nasıl yönetilmeli?</li>



<li>Telafi işlemi gerekiyor mu?</li>
</ul>



<p class="wp-block-paragraph">Mesh, bir HTTP isteğinin teknik olarak tekrar edilebilir göründüğünü anlayabilir; fakat tekrarın ikinci kez tahsilat yaratıp yaratmayacağını bilemez.</p>



<p class="wp-block-paragraph">Ayrıca uygulama ve mesh bağımsız retry yaptığında deneme sayıları çarpılır. Uygulamadaki üç deneme ile mesh’teki üç deneme, tek kullanıcı isteğini dokuz downstream çağrısına dönüştürebilir. Retry bütçesi uçtan uca tasarlanmalıdır.</p>



<h2 class="wp-block-heading">Proje ölçeğine göre mimari tercih</h2>



<p class="wp-block-paragraph">Servis sayıları kesin sınır değildir. Ekip sayısı, teknoloji çeşitliliği, güvenlik gereksinimi ve dağıtım sıklığı daha belirleyicidir.</p>



<h3 class="wp-block-heading">Küçük projeler: 1–2 ekip ve yaklaşık 3–10 servis</h3>



<p class="wp-block-paragraph">Kubernetes üzerinde çalışılıyorsa:</p>



<ul class="wp-block-list">
<li>Kubernetes DNS ve Service kullanın.</li>



<li>ConfigMap ve kontrollü rolling deployment tercih edin.</li>



<li>Istio kurmayın.</li>



<li>Timeout, idempotency ve iş fallback’lerini uygulamada yönetin.</li>
</ul>



<p class="wp-block-paragraph">Bu ölçekte Service Mesh’in işletme ve öğrenme maliyeti genellikle faydasından büyüktür.</p>



<p class="wp-block-paragraph">VM veya karma altyapıda çalışılıyorsa:</p>



<ul class="wp-block-list">
<li>Tamamen Java tabanlı sistemlerde Eureka kullanılabilir.</li>



<li>Birden fazla dil veya çalışma ortamı varsa Consul tercih edilebilir.</li>



<li>Discovery ihtiyacı tek başına Kubernetes’e geçiş gerekçesi olmamalıdır.</li>
</ul>



<h3 class="wp-block-heading">Orta ölçekli projeler: 3–8 ekip ve yaklaşık 10–50 servis</h3>



<p class="wp-block-paragraph">Kubernetes’i varsayılan discovery ve temel load-balancing katmanı yapın. Yeni servislerin ayrıca Eureka’ya kaydolmasını istemeyin.</p>



<p class="wp-block-paragraph">Istio’yu şu ihtiyaçlar somutlaştığında değerlendirin:</p>



<ul class="wp-block-list">
<li>Takımlar arasındaki retry ve timeout farklılıkları üretim olaylarına yol açıyorsa</li>



<li>Merkezi canary dağıtımı gerekiyorsa</li>



<li>Servisler arası mTLS zorunluysa</li>



<li>Polyglot yapı ortak ağ telemetrisi gerektiriyorsa</li>



<li>Merkezi erişim politikaları yönetilecekse</li>
</ul>



<p class="wp-block-paragraph">Mesh’e geçiş kritik servis veya namespace’lerle kademeli olarak başlatılabilir.</p>



<h3 class="wp-block-heading">Büyük projeler: 8’den fazla ekip, 50+ servis veya çoklu cluster</h3>



<p class="wp-block-paragraph">Bu ölçekte her uygulama ekibinin aynı ağ politikalarını farklı kütüphanelerle uygulaması sürdürülemez hâle gelebilir.</p>



<p class="wp-block-paragraph">Önerilen sorumluluk dağılımı:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><th>Sorumluluk</th><th>Önerilen sahip</th></tr><tr><td>Hizmet keşfi</td><td>Kubernetes Service ve DNS</td></tr><tr><td>Endpoint yaşam döngüsü</td><td>Kubernetes readiness ve EndpointSlice</td></tr><tr><td>Temel yük dengeleme</td><td>Kubernetes ağ katmanı</td></tr><tr><td>Gelişmiş trafik yönetimi</td><td>Istio</td></tr><tr><td>Servis kimliği ve mTLS</td><td>Istio</td></tr><tr><td>İş seviyesinde retry ve fallback</td><td>Uygulama</td></tr><tr><td>Dağıtım konfigürasyonu</td><td>GitOps ve ConfigMap</td></tr><tr><td>Hassas bilgiler</td><td>KMS veya harici secret manager</td></tr><tr><td>Platform standartları</td><td>Platform ekibi</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Mesh’in anlamlı olmasını sağlayan yalnızca servis sayısı değildir. Merkezi güvenlik, çoklu dil desteği, yüksek dağıtım sıklığı ve çapraz takım standardizasyonu operasyon maliyetini karşılayacak düzeye ulaşmalıdır.</p>



<h2 class="wp-block-heading">Kaçınılması gereken yaklaşım: Çift sahiplik</h2>



<p class="wp-block-paragraph">Geçiş dönemi dışında şu kombinasyonlardan kaçınılmalıdır:</p>



<ul class="wp-block-list">
<li>Eureka ve Kubernetes’in paralel servis kataloğu olması</li>



<li>Spring Cloud LoadBalancer ile Istio’nun bağımsız hedef seçmesi</li>



<li>Uygulama, API gateway ve mesh’in ayrı ayrı retry uygulaması</li>



<li>Timeout değerlerinin farklı katmanlarda çelişmesi</li>



<li>Aynı ayarın Consul KV ve ConfigMap’te tutulması</li>
</ul>



<p class="wp-block-paragraph">Her teknik sorumluluk için tek bir birincil doğruluk kaynağı ve açık bir sahip belirlenmelidir.</p>



<h2 class="wp-block-heading">Sonuç: Spring Cloud mu Kubernetes mi?</h2>



<p class="wp-block-paragraph">Spring Cloud ve Kubernetes birbirlerinin tam alternatifi değildir.</p>



<p class="wp-block-paragraph">Spring Cloud uygulamaya discovery ve istemci davranışı kazandırır. Kubernetes temel platform bağlantısını ve servis yaşam döngüsünü yönetir. Istio ise ortak trafik, güvenlik ve gözlemlenebilirlik politikalarını uygulamadan ayırır.</p>



<p class="wp-block-paragraph">Kubernetes kullanan yeni sistemlerde service discovery ve temel load balancing platforma bırakılmalıdır. Istio yalnızca servis sayısı arttığı için değil, ortak trafik ve güvenlik politikalarının uygulama ekipleri tarafından ayrı ayrı yönetilmesi sürdürülemez hâle geldiğinde eklenmelidir.</p>



<p class="wp-block-paragraph">Kubernetes dışında veya ciddi hibrit altyapıda Consul güçlü bir seçimdir. Tamamen Java ve VM tabanlı küçük sistemlerde Eureka hâlâ yeterli olabilir. Kubernetes’e yerleşmiş bir platformda Eureka’yı kalıcı biçimde tutmak ise çoğunlukla aynı gerçeği iki kontrol düzleminde yönetmek anlamına gelir.</p>



<p class="wp-block-paragraph">Sağlıklı sorumluluk ayrımı şöyledir:</p>



<ul class="wp-block-list">
<li>Platform, servisin nerede olduğunu bilir.</li>



<li>Mesh, trafiğin teknik olarak nasıl akacağını bilir.</li>



<li>Uygulama, isteğin iş açısından ne anlama geldiğini bilir.</li>



<li>Konfigürasyon sistemi, uygulamanın hangi değerlerle çalışacağını bilir.</li>
</ul>



<p class="wp-block-paragraph">İyi mimari, bu sınırların açık olduğu ve aynı kararın birden fazla katmanda tekrar verilmediği mimaridir.</p>



<h2 class="wp-block-heading">Sık sorulan sorular</h2>



<h3 class="wp-block-heading">Kubernetes kullanırken Eureka gerekli mi?</h3>



<p class="wp-block-paragraph">Çoğu yeni Kubernetes sistemi için hayır. Kubernetes Service, DNS ve EndpointSlice temel hizmet keşfi ihtiyacını karşılar. Eureka ancak Kubernetes dışındaki servislerle geçiş, özel metadata tabanlı seçim veya güçlü bir mevcut bağımlılık varsa geçici olarak anlamlı olabilir.</p>



<h3 class="wp-block-heading">Kubernetes Service, Istio’nun yerini tutar mı?</h3>



<p class="wp-block-paragraph">Hayır. Kubernetes Service temel servis adresleme ve L4 yönlendirme sağlar. Istio ise canary, header tabanlı routing, mTLS, retry, circuit breaking ve ayrıntılı trafik gözlemlenebilirliği gibi gelişmiş politikalar ekler.</p>



<h3 class="wp-block-heading">Küçük bir mikroservis projesinde Istio kullanılmalı mı?</h3>



<p class="wp-block-paragraph">Genellikle hayır. Birkaç servis ve tek ekipten oluşan sistemlerde operasyonel maliyet çoğu zaman kazanımdan yüksektir. Önce Kubernetes’in yerleşik özellikleri ve doğru uygulama timeout’ları kullanılmalıdır.</p>



<h3 class="wp-block-heading">Consul mu Eureka mı daha uygun?</h3>



<p class="wp-block-paragraph">Tamamen Spring Boot kullanan sınırlı bir sistemde Eureka daha basit olabilir. Birden fazla dil, VM, container, veri merkezi veya hibrit altyapı söz konusuysa Consul daha geniş bir entegrasyon alanı sunar.</p>



<h3 class="wp-block-heading">Konfigürasyon değişikliği için dinamik refresh mi rolling restart mı?</h3>



<p class="wp-block-paragraph">Çoğu üretim konfigürasyonu için rolling restart daha öngörülebilir ve geri alınabilir bir modeldir. Feature flag gibi anlık değişmesi gereken değerlerde kontrollü dinamik konfigürasyon tercih edilebilir.</p>



<p class="wp-block-paragraph"></p>
<p><a href="https://alikarahisar.com/blog/spring-cloud-vs-kubernetes-service-discovery-trafik-yonetimi/">Spring Cloud vs. Kubernetes: Service Discovery ve Trafik Yönetimi Kime Emanet Edilmeli?</a> yazısı ilk önce <a href="https://alikarahisar.com/blog">Ali Karahisar</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://alikarahisar.com/blog/spring-cloud-vs-kubernetes-service-discovery-trafik-yonetimi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
