Service Mesh Nedir ve Neden Ihtiyac Duyulur?
Mikro servis mimarisine gecis yapan organizasyonlar, servisler arasi iletisimin karmasikligini yonetmek konusunda ciddi zorluklarla karsilasir. Servislerin sayisi arttikca, bunlar arasindaki ag trafigini kontrol etmek, guvenlik politikalarini uygulamak ve hata durumlarini yonetmek giderek zorlasir. Service mesh, tam olarak bu sorunu cozmek icin tasarlanmis bir altyapi katmanidir.
Service mesh, mikro servisler arasindaki iletisimi yoneten, uygulama kodundan bagimsiz calisan bir ag proxy katmanidir. Her servisin yanina yerlestirilen proxy'ler araciligiyla trafik yonetimi, guvenlik, gozlemlenebilirlik ve dayaniklilik gibi capraz kesim endiselerini merkezi olarak ele alir.
Service Mesh Olmadan Karsilasilan Sorunlar
Mikro servis sayisi belirli bir esigi astiginda, asagidaki sorunlar kacinilmaz hale gelir:
- Servis kesfinin karmasikligi: Her servisin diger servislerin adreslerini bilmesi gerekir.
- Retry ve timeout mantigi: Her servis icinde tekrar eden hata yonetim kodu yazilir.
- Guvenlik yonetimi: Servisler arasi iletisimde sifreleme ve kimlik dogrulama dagitik hale gelir.
- Trafik gozlemleme: Hangi servisin hangi servisle ne siklikta iletisim kurdugunu izlemek zorlasir.
- Canary deployment: Trafigi kademeli olarak yeni surume yonlendirmek uygulama seviyesinde cozulmeye calisilir.
Service mesh, tum bu sorulari altyapi seviyesinde cevaplayarak gelistiricilerin is mantigi koduna odaklanmasini saglar.
Service Mesh Mimarisi: Data Plane ve Control Plane
Her service mesh iki temel bilesenden olusur:
Data Plane
Data plane, her servisin yaninda calisan proxy'lerden olusur. Bu proxy'ler gelen ve giden tum ag trafikini yakalar, politikalari uygular ve metrikleri toplar. Envoy, en yaygin kullanilan data plane proxy'sidir.
Control Plane
Control plane, proxy'lerin konfigurasyonunu yonetir, politikalari dagitir ve mesh genelindeki durumu koordine eder. Istio'daki istiod veya Linkerd'deki destination controller bu rolu ustlenir.
# Istio VirtualService ornegi - Trafik yonlendirme
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: siparis-servisi
spec:
hosts:
- siparis-service
http:
- route:
- destination:
host: siparis-service
subset: v2
weight: 20
- destination:
host: siparis-service
subset: v1
weight: 80
Bu ornek, trafigi %80 oraninda mevcut surume, %20 oraninda yeni surume yonlendirir. Uygulama kodunda hicbir degisiklik gerektirmeden canary deployment uygulanmis olur.
Istio vs Linkerd vs Cilium: Kapsamli Karsilastirma
Piyasadaki uc buyuk service mesh cozumunu farkli boyutlarda karsilastiralim:
| Ozellik | Istio | Linkerd | Cilium |
|---|---|---|---|
| Proxy | Envoy (C++) | linkerd2-proxy (Rust) | eBPF (cekirdek seviyesi) |
| Kaynak tuketimi | Yuksek | Dusuk | En dusuk |
| Ogrenme egrisi | Dik | Orta | Orta-Dik |
| Trafik yonetimi | Cok gelismis | Temel-Orta | Gelismis |
| mTLS | Otomatik | Otomatik | Otomatik |
| Multi-cluster | Evet | Evet | Evet |
| Ambient Mesh | Evet (sidecarless) | Hayir | Dogal (eBPF) |
| CNCF Statusu | Graduated | Graduated | Graduated |
| Topluluk buyuklugu | En buyuk | Orta | Buyuyen |
Istio: Kurumsal Standart
Istio, en zengin ozellik setine sahip service mesh cozumudur. Google, IBM ve Red Hat tarafindan desteklenir. Envoy proxy'sini data plane olarak kullanir ve trafik yonetimi konusunda en kapsamli konfigurasyonu sunar.
Istio'nun guclu yanlari:
- Gelismis trafik yonetimi (fault injection, mirroring, retries)
- Kapsamli guvenlik politikalari (RBAC, JWT dogrulama)
- Genis ekosistem entegrasyonu (Kiali, Jaeger, Prometheus)
- Ambient mesh ile sidecar'siz calisma destegi
Istio'nun zayif yanlari:
- Yuksek kaynak tuketimi (her pod icin ~50-100 MB ek bellek)
- Karmasik konfigrasyon yapisi
- Ogrenme egrisi nispeten dik
Linkerd: Hafif ve Performansli
Linkerd, Buoyant tarafindan gelistirilen, sadelik ve performans odakli bir service mesh'tir. Rust ile yazilmis ozel proxy'si sayesinde dusuk kaynak tuketimi ve yuksek performans sunar.
Linkerd'in guclu yanlari:
- Dusuk kaynak tuketimi (~10-20 MB bellek/proxy)
- Kolay kurulum ve operasyon
- Hizli baslangic (5 dakikada calisir hale gelir)
- Guvenilir ve kararliyapi
Linkerd'in zayif yanlari:
- Istio'ya kiyasla sinirli trafik yonetimi
- Daha kucuk ekosistem
Cilium: eBPF Tabanli Yeni Nesil
Cilium, Linux cekirdegindeki eBPF teknolojisini kullanarak sidecar proxy'ye ihtiyac duymadan ag politikalarini uygular. Bu yaklasim, performans overhead'ini minimuma indirir.
Sidecar Proxy vs Sidecarless (Ambient Mesh)
Service mesh dunyasindaki en onemli mimari tartismalardan biri, sidecar proxy modeli ile sidecarless yaklasim arasindaki secimdir.
Geleneksel Sidecar Modeli
Sidecar modelinde, her pod'un icine bir proxy container'i enjekte edilir. Bu proxy, pod'a gelen ve giden tum trafigi yakalar.
# Istio sidecar injection ornegi
apiVersion: apps/v1
kind: Deployment
metadata:
name: odeme-servisi
labels:
app: odeme-servisi
spec:
template:
metadata:
labels:
app: odeme-servisi
sidecar.istio.io/inject: "true"
spec:
containers:
- name: odeme-servisi
image: odeme-servisi:v1.2
ports:
- containerPort: 8080
resources:
requests:
memory: "128Mi"
cpu: "100m"
Sidecar avantajlari: Her servis icin izole guvenlik politikasi, hassas trafik kontrolu, olgun ve kanitlanmis mimari.
Sidecar dezavantajlari: Ek kaynak tuketimi, pod baslatma suresinde artis, yuksek olcekte bellek maliyeti.
Ambient Mesh (Sidecarless)
Istio'nun ambient mesh modu, sidecar proxy'leri kaldirarak iki katmanli bir yaklasim benimser:
- ztunnel: Her node uzerinde calisan hafif bir proxy. L4 seviyesinde mTLS ve trafik yonetimi saglar.
- Waypoint proxy: Ihtiyac duyuldugunda L7 seviyesinde trafik yonetimi icin devreye girer.
| Karsilastirma | Sidecar | Ambient Mesh |
|---|---|---|
| Bellek/pod | ~50-100 MB | ~0 (paylasilmis) |
| Pod baslatma suresi | +2-5 saniye | Ek yok |
| L7 trafik kontrolu | Her pod icin | Ihtiyaca gore |
| Izolasyon | Pod seviyesi | Namespace seviyesi |
| Olgunluk | Uretim hazir | Uretim hazir (2025+) |
Smart Maple olarak Ankara merkezli projelerimizde, yeni Kubernetes kurulumlari icin ambient mesh yaklasimini degerlendirmeyi, mevcut sistemlerde ise sidecar modeliyle devam etmeyi onerilmektedir.
Traffic Management ve Dayaniklilik Paternleri
Service mesh'in en guclu ozelliklerinden biri, uygulama koduna dokunmadan gelismis trafik yonetimi uygulamaktir.
Load Balancing Stratejileri
Service mesh, Kubernetes'in varsayilan round-robin yuk dengeleme algoritmasinin otesine gecer:
# Istio DestinationRule - Gelismis yuk dengeleme
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: odeme-servisi
spec:
host: odeme-servisi
trafficPolicy:
loadBalancer:
simple: LEAST_REQUEST
connectionPool:
tcp:
maxConnections: 100
http:
h2UpgradePolicy: UPGRADE
http1MaxPendingRequests: 50
http2MaxRequests: 200
outlierDetection:
consecutive5xxErrors: 3
interval: 30s
baseEjectionTime: 60s
maxEjectionPercent: 50
Circuit Breaking
Circuit breaker, basarisiz bir servise surekli istek gonderilmesini onleyerek zincirleme hatalari engeller. Yukardaki ornekte outlierDetection blogu bu gorevi ustlenir: ard arda 3 kez 5xx hatasi veren bir endpoint, 60 saniye boyunca trafik havuzundan cikarilir.
Retry ve Timeout Politikalari
# Retry ve timeout konfigurasyonu
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: urun-katalog
spec:
hosts:
- urun-katalog
http:
- timeout: 5s
retries:
attempts: 3
perTryTimeout: 2s
retryOn: "5xx,reset,connect-failure,retriable-4xx"
route:
- destination:
host: urun-katalog
Fault Injection
Test ortamlarinda servislerin hata durumlarina nasil tepki verdigini gormek icin fault injection kullanilir:
# Hata enjeksiyonu - test amacli
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: stok-servisi
spec:
hosts:
- stok-servisi
http:
- fault:
delay:
percentage:
value: 10
fixedDelay: 3s
abort:
percentage:
value: 5
httpStatus: 503
route:
- destination:
host: stok-servisi
Bu konfigurasyonla isteklerin %10'una 3 saniyelik gecikme, %5'ine 503 hatasi eklenir. Boylece bagimliliklarin hata durumlarina karsi dayanimliligi test edilir.
mTLS ve Zero-Trust Networking
Mikro servis ortamlarinda guvenlik, yalnizca dis perimetrede degil, servisler arasi iletisimde de saglanmalidir. Service mesh, mutual TLS (mTLS) ile zero-trust ag modelini uygulamaya koyar.
mTLS Nasil Calisir?
mTLS'de her iki taraf da kimligini kanitlar:
- Istemci servis, sunucu servisin sertifikasini dogrular.
- Sunucu servis, istemci servisin sertifikasini dogrular.
- Iletisim sifrelenmis kanal uzerinden gerceklesir.
# Istio PeerAuthentication - Strict mTLS
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: varsayilan-mtls
namespace: uretim
spec:
mtls:
mode: STRICT
---
# AuthorizationPolicy - Servis erisim kontrolu
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: odeme-erisim
namespace: uretim
spec:
selector:
matchLabels:
app: odeme-servisi
rules:
- from:
- source:
principals: ["cluster.local/ns/uretim/sa/siparis-servisi"]
to:
- operation:
methods: ["POST"]
paths: ["/api/v1/odeme/*"]
Bu yaklasimla yalnizca siparis-servisi servis hesabi, odeme-servisinin belirli endpoint'lerine POST istegi gonderebilir. Diger tum erisimler reddedilir.
Sertifika Yonetimi
Service mesh, sertifika yasam dongusunu otomatik olarak yonetir:
- Otomatik sertifika uretimi ve dagitimi
- Periyodik sertifika yenileme (varsayilan olarak 24 saat)
- Sertifika iptal mekanizmalari
- Harici CA entegrasyonu (Vault, cert-manager)
Observability: Dagitik Izleme ve Metrikler
Service mesh, uygulama koduna enstrumantasyon eklemeden zengin gozlemlenebilirlik verileri toplar.
Dagitik Izleme (Distributed Tracing)
Her istek mesh icinden gecerken, proxy'ler otomatik olarak span bilgilerini olusturur. Bu veriler Jaeger, Zipkin veya Tempo gibi araclara aktarilir.
Izleme verilerinin dogru calisabilmesi icin uygulamalarin trace header'larini iletmesi gerekir:
# Python Flask ornegi - Trace header propagation
TRACE_HEADERS = [
'x-request-id',
'x-b3-traceid',
'x-b3-spanid',
'x-b3-parentspanid',
'x-b3-sampled',
'x-b3-flags',
'traceparent',
'tracestate',
]
@app.before_request
def extract_trace_headers():
g.trace_headers = {
h: request.headers.get(h)
for h in TRACE_HEADERS
if request.headers.get(h)
}
def call_downstream(url, payload):
return requests.post(url, json=payload, headers=g.trace_headers)
Metrik Toplama
Service mesh proxy'leri her istek icin otomatik olarak RED metrikleri uretir:
- Rate: Saniyedeki istek sayisi
- Errors: Hata orani
- Duration: Istek suresi dagilimi
Bu metrikler Prometheus ile toplanir ve Grafana uzerinde goruntulenir.
Ornek Prometheus Metrikleri
| Metrik | Aciklama | Kullanim |
|---|---|---|
istio_requests_total |
Toplam istek sayisi | Trafik hacmi |
istio_request_duration_milliseconds |
Istek suresi histogram | Performans izleme |
istio_tcp_connections_opened_total |
Acilan TCP baglanti sayisi | Baglanti izleme |
istio_request_bytes |
Istek boyutu | Bant genisligi analizi |
Service Mesh Deployment Paternleri
Kademeli Benimseme
Service mesh'i tum cluster'a bir anda uygulamak yerine kademeli bir yaklasim izlenmeli:
- Gozlem asamasi: Oncelikle yalnizca metrik toplama ve izleme icin mesh'i devreye alin. Trafik politikasi uygulamayin.
- Permissive mTLS: mTLS'i permissive modda baslatarak hem sifrelenmis hem de sifrelenmmis trafige izin verin.
- Strict mTLS: Tum servisler mesh icine alindiktan sonra strict moda gecin.
- Trafik politikalari: Canary deployment, circuit breaking gibi gelismis ozellikleri kademeli olarak etkinlestirin.
Multi-Cluster Service Mesh
Birden fazla Kubernetes cluster'i arasinda service mesh kurulumu icin iki temel yaklasim vardir:
- Flat network: Cluster'lar arasi dogrudan pod iletisimi. Daha dusuk gecikme, ancak ag karmasikligi artar.
- Gateway-based: Her cluster'daki gateway uzerinden iletisim. Daha guvenli ve yonetilebilir, ancak ek gecikme ekler.
Performans Etkisi ve Optimizasyon
Service mesh, her istege ek gecikme ekler. Bu etkiyi olcmek ve minimize etmek kritik oneme sahiptir.
Tipik Performans Etkisi
| Senaryo | Ek Gecikme (p50) | Ek Gecikme (p99) |
|---|---|---|
| Istio sidecar | ~1-3 ms | ~5-10 ms |
| Linkerd sidecar | ~0.5-1 ms | ~2-5 ms |
| Cilium eBPF | ~0.1-0.5 ms | ~1-2 ms |
| Istio ambient (L4) | ~0.5-1 ms | ~2-4 ms |
Optimizasyon Onerileri
Kaynak ayirma: Proxy container'larina uygun CPU ve bellek limitleri belirleyin. Varsayilan degerler genellikle gerekenin uzerindedir.
# Sidecar kaynak optimizasyonu
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
defaultConfig:
concurrency: 2
values:
global:
proxy:
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
Telemetri ayarlama: Uretim ortaminda trace ornekleme oranini dusurun. Tum istekleri izlemek gereksiz yuk olusturur; %1-5 ornekleme orani cogu senaryo icin yeterlidir.
Protokol secimi: HTTP/2 ve gRPC kullanarak baglanti coklama avantajindan faydalanin. Bu, ozellikle yuksek trafikli servislerde belirgin performans kazanimi saglar.
Ne Zaman Service Mesh Kullanilmali?
Service mesh her ortam icin uygun degildir. Asagidaki durumlarda benimsemek anlamlidir:
- 10'dan fazla mikro servisiniz varsa
- Servisler arasi guvenlik ve sifreleme gerekliyse
- Canary deployment veya A/B testi yapmaniz gerekiyorsa
- Dagitik izleme ve detayli metrik toplama oncelikliyse
- Multi-cluster veya multi-cloud ortaminda calisiyorsaniz
Smart Maple olarak Ankara merkezli projelerimizde, mikro servis sayisi artan ve guvenlik gereksinimi yuksek olan musteri altyapilarinda service mesh cozumlerini basariyla uygulamaktayiz. Ozellikle finansal islemler ve saglik sektoru gibi siki regulasyona tabi alanlarda mTLS ve zero-trust ag modeli vazgecilmez bir gereksinim haline gelmistir.
Sonuc
Service mesh, mikro servis mimarisinin olgunlasma surecinde kritik bir altyapi bilesenidir. Istio gelismis ozellik seti ile kurumsal projelerde one cikarken, Linkerd hafiflik ve basitlikle dikkat cekmekte, Cilium ise eBPF tabanli yaklasimi ile performans odakli senaryolarda tercih edilmektedir.
Ambient mesh'in olgunlasmasi ile sidecar proxy'lerin getirdigi kaynak yuku ortadan kalkma yolundadir. 2026 itibariyle yeni projelerde ambient mesh yaklasimini degerlendirmek, mevcut sidecar tabanli kurulumlarda ise kademeli gecis planlamak mantikli bir strateji olacaktir.
Basarili bir service mesh benimsemesi icin onemli olan, teknolojiyi bir anda degil kademeli olarak devreye almak, ekipleri yetkilendirmek ve gozlemlenebilirlik altyapisini mesh ile birlikte kurmaktir.
Related Articles
MLOps Rehberi: Makine Öğrenmesi Modellerini Production'a Taşıma
Giriş: MLOps Nedir ve Neden Önemlidir? Makine öğrenmesi modelleri geliştirmek günümüzde nispeten kolaydır. Açık kaynak kütüphaneleri kullanarak son derece başarılı modeller oluşturabiliriz. Ancak bu modelleri production ortamına taşıyarak, ölçeklendirebilir, güvenilir ve sürdürülebilir şekilde çalıştırmak tamamen farklı bir hikayedir. Araştırmalara göre, veri bilimcileri tarafından geliştirilen makine öğrenmesi modellerinin %87'si hiçbir zaman production ortamına ulaşmaz. Bu başarısızlı
Read MoreLLM Fine-Tuning ve Özel Model Eğitimi Rehberi [2026]
LLM Fine-Tuning: Kurumsal Yapay Zeka Stratejisinin Temel Taşı Büyük dil modelleri (LLM), genel amaçlı metin üretimi ve anlama konusunda etkileyici performans sergiliyor. Ancak kurumsal ortamlarda belirli bir alan, terminoloji veya iş sürecine uyum sağlamaları gerektiğinde, genel bilgileri çoğu zaman yetersiz kalıyor. Bu noktada fine-tuning, yani ince ayar süreci devreye giriyor. Fine-tuning sayesinde mevcut bir temel modeli, kendi verileriniz ve ihtiyaçlarınız doğrultusunda özelleştirmek
Read MoreBilgisayarlı Görü Uygulamaları: Nesne Tespiti, OCR ve Endüstriyel AI
Bilgisayarlı Görü Uygulamaları: Endüstriyel ve Medikal AI'nin Temel Teknolojisi Bilgisayarlı görü, makine öğrenmesinin en etkili alanlarından biridir. Türkiye'de yaşanan dijital dönüşüm sürecinde, özellikle üretim, sağlık ve lojistik sektörlerinde görü tabanlı otomasyon kritik hale gelmiştir. Smart Maple olarak Ankara'da geliştirdiğimiz çözümler, son beş yılda 150+ kuruluşunun üretim verimliliğini ortalama %35 oranında artırmıştır. Bu rehberde, bilgisayarlı görü teknolojisinin iş değeri
Read More
