Istio ile Kubernetes Service Mesh Mimarisi
Yüzlerce mikroservisin birbiriyle güvenli, izlenebilir ve kontrollü bir şekilde iletişim kurmasını sağlayan Istio Service Mesh altyapısı.
Genel Bakış
Kubernetes (K8s) ortamında mikroservis sayısı arttıkça, bu servislerin birbiriyle nasıl iletişim kurduğu, hataların nerede oluştuğu ve güvenliğin nasıl sağlanacağı karmaşık bir hal alır. Service Mesh (Hizmet Ağı), uygulamaların kodunu değiştirmeden bu sorunları çözen bir altyapı katmanıdır ve Istio bu alanın tartışmasız lideridir.
Sorun
Bir e-ticaret sitesinde Sepet servisi, Ödeme servisine HTTP isteği gönderiyor olsun. Ağda bir anlık kopma yaşanırsa Sepet servisi ne yapmalı? İsteği tekrar mı denemeli (Retry)? Kaç saniye bekleyip pes etmeli (Timeout)? Ya da iki servis arasındaki trafik şifrelenmiş mi? Bu tür ağ, güvenlik ve izlenebilirlik mantıklarını her bir mikroservisin içine (Java, Python, Node.js kodu olarak) ayrı ayrı yazmak büyük bir mimari hatadır.
Çözüm: Envoy Proxy ve Sidecar Modeli
Istio, Kubernetes pod'larının içine uygulamanızın yanına sessizce küçük bir yardımcı konteyner (Envoy Proxy - Sidecar) enjekte eder.
Uygulama dışarıya bir istek attığında, bu istek önce yanındaki Envoy Proxy'ye gider. Envoy Proxy, Istio Kontrol Düzlemi'nden (Istiod) aldığı kurallara göre bu trafiği şifreler, yönlendirir veya gerekirse tekrar dener.
Teknik Detaylar
Istio'nun en güçlü özelliklerinden biri mTLS (Mutual TLS) desteğidir. K8s içindeki servisler birbirleriyle konuşurken trafik varsayılan olarak açık metin (plaintext) akar. Istio, iki servis arasındaki tüm trafiği otomatik olarak mTLS ile şifreler; böylece ağ sızmalarına karşı içerideki veri izlenemez. Ayrıca Circuit Breaker (Devre Kesici) özelliği sayesinde, çökmekte olan bir backend servisine giden trafiği tamamen keserek (fail-fast), tüm sistemin zincirleme çökmesini engeller.
Sonuç
Istio Service Mesh, geliştiricileri ağ, güvenlik (Authentication/Authorization) ve izleme (Tracing/Metrics) yükünden kurtarır. Ancak K8s cluster'ına ciddi bir RAM ve CPU ek yükü getirdiği için, 20-30'dan az servisi olan küçük projeler için fazla ağır bir çözümdür.