Kubernetes Service Mesh Nedir?
Kubernetes Service Mesh, mikroservis mimarisinde servisler arası iletişimi yöneten bir altyapı katmanıdır. Mikroservislerin birbirleriyle nasıl iletişim kurduğunu, trafiğin nasıl yönlendirildiğini, güvenlik politikalarını ve hata toleransını merkezi olarak yönetir.
Service Mesh, genellikle Sidecar Proxy adı verilen bir yapı ile çalışır. Bu proxy, her mikroservisin yanında çalışır ve gelen/giden tüm trafiği yönetir.
🎯 Neden Service Mesh Kullanılır?
Mikroservislerin sayısı arttıkça, servisler arası iletişim:
- Güvenlik
- Yük Dengeleme
- İzleme (Observability)
- Retry & Timeout
- Circuit Breaker
- Servis Keşfi (Service Discovery)
- Versiyonlama (Canary Deployments)
gibi özellikler gerektirir.
🔑 Nasıl Çalışır?
Service Mesh, aşağıdaki temel bileşenlerden oluşur:
Bileşen | Açıklama |
---|---|
Control Plane | Trafik politikalarını merkezi olarak yönetir |
Data Plane | Servisler arasındaki gerçek veri trafiğini yönetir (Sidecar Proxy) |
Sidecar Proxy | Her mikroservisin yanına eklenir ve gelen/giden trafiği denetler |
🎯 Popüler Service Mesh Araçları
Service Mesh | Açıklama | Proxy |
---|---|---|
Istio | En popüler, açık kaynaklı | Envoy |
Linkerd | Hafif ve kolay kurulabilir | Linkerd Proxy |
Consul | HashiCorp tarafından geliştirilmiştir | Envoy |
Kuma | Hafif, Envoy tabanlı | Envoy |
🔌 Istio ile Service Mesh Kurulumu (Kubernetes)
Istio, en çok kullanılan Service Mesh araçlarından biridir.
1. Istio Yükleme
bashCopyEdit# Istio CLI indir
curl -L https://istio.io/downloadIstio | sh -
# Istio yükleme
cd istio-<version>
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
2. Namespace Etiketleme
İlgili Namespace’e otomatik Sidecar Proxy eklenmesi için etiketleme yapılır.
bashCopyEditkubectl label namespace default istio-injection=enabled
3. Uygulama Deploy Edelim
Bir örnek BookInfo uygulaması deploy edelim:
bashCopyEditkubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
4. Servisleri Kontrol Et
bashCopyEditkubectl get pods
kubectl get svc
🔑 Traffic Management
İsteklerin yüzde kaçının hangi servise gideceğini belirleyebilirsiniz.
Örneğin:
yamlCopyEditapiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: productpage
spec:
hosts:
- productpage
http:
- route:
- destination:
host: productpage
subset: v1
weight: 80
- destination:
host: productpage
subset: v2
weight: 20
🔐 Güvenlik
- mTLS (Mutual TLS): Servisler arası şifreli iletişim
- Authentication Policies
- Authorization Policies
📊 Monitoring & Observability
- Prometheus
- Grafana
- Kiali (Servis Ağı Görselleştirme)
🔌 Circuit Breaker
Hata oranı belirli bir seviyeye ulaştığında istekleri durdurur:
yamlCopyEditapiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
trafficPolicy:
connectionPool:
http:
http1MaxPendingRequests: 1
maxRequestsPerConnection: 1
outlierDetection:
consecutiveErrors: 5
interval: 10s
baseEjectionTime: 30s
🎯 Avantajları
✅ Merkezi trafik yönetimi
✅ mTLS ile otomatik güvenlik
✅ Canary ve Blue-Green deployment desteği
✅ İzlenebilirlik (Observability)
✅ Circuit Breaker
⚠️ Dezavantajları
❌ Karmaşık yapı
❌ Yüksek CPU ve bellek tüketimi
❌ Öğrenme eğrisi yüksek
💪 Hangisini Seçmeliyim?
İhtiyaç | Önerilen Service Mesh |
---|---|
Basitlik | Linkerd |
Gelişmiş Özellikler | Istio |
Multi-Cluster | Consul |
Hafiflik | Kuma |
🌐 Mimari Şeması
lessCopyEdit[Client] --> [Ingress Gateway] --> [Sidecar Proxy] --> [Microservice A]
|
--> [Microservice B]
|
--> [Microservice C]
📌 Sonuç
Service Mesh, mikroservislerin güvenli, ölçeklenebilir ve izlenebilir şekilde iletişim kurmasını sağlar. Kubernetes ile entegre bir şekilde çalışarak altyapıyı daha dayanıklı hale getirir.
🔥 Öneri
filesharingsecure projesinde Istio + Azure Kubernetes Service (AKS) kullanarak:
- mTLS
- Traffic Management
- Canary Deployment
- Retry & Circuit Breaker
kullanabiliriz.