Istio Service Mesh
Günümüzde teknoloji ve iş dünyası hızla evrim geçirirken, yazılım uygulamalarının yapılandırılma şekli de bu değişime ayak uyduruyor. Geleneksel monolitik yapıdan mikroservis mimarisine geçiş, uygulamaların daha modüler, esnek ve ölçeklenebilir olmasını sağlıyor. Mikroservisler, büyük ve karmaşık uygulamaları daha yönetilebilir, bağımsız çalışan küçük parçalara bölerek geliştirme süreçlerini hızlandırıyor ve hizmet kalitesini artırıyor.
Ancak, bu mikroservislerin yönetimi ve aralarındaki iletişimi kontrol etmek karmaşık hale gelebilir. İşte burada "service mesh" devreye girer. "Service mesh", uygulamalara özel bir altyapı katmanı ekleyerek, mikroservisler arası iletişimi kolaylaştırır. Bu sayede, uygulama geliştiricileri, güvenlik, trafik yönetimi, gözlemlenebilirlik gibi özellikleri kodlarına eklemek zorunda kalmadan bu özelliklerden faydalanabilirler.
"Service mesh", adeta bir ağ örgüsü gibi, mikroservisler arasında bir köprü görevi görür. Bu köprü, servislerin birbirlerini bulmalarını (keşfetme), yükü dengeli bir şekilde dağıtmalarını (yük dengeleme), hatalardan kurtulmalarını (hata iyileştirme), performanslarını izlemelerini sağlar ve daha birçok işlevi yerine getirir.
Karmaşık uygulamaların yönetimi söz konusu olduğunda, "service mesh" ayrıca A/B testleri, kanarya dağıtımları (yeni özelliklerin küçük bir kullanıcı grubuna sunulması), erişim kontrolü, şifreleme gibi daha gelişmiş işlevleri de destekler.
Bütün bu işlemler, uygulama geliştiricilerinin üzerindeki yükü hafifletir ve onların asıl işlerine, yani uygulamalarının işlevselliğine odaklanmalarını sağlar. Örneğin, Istio gibi bir "service mesh" aracı, mikroservisler arasındaki iletişimi otomatik olarak yönetir ve geliştiricilerin bu karmaşık ağı kolayca kontrol etmelerine olanak tanır.
Kısacası, "service mesh", modern uygulamaların karmaşık dünyasında, mikroservislerin daha verimli ve güvenli bir şekilde çalışmasını sağlayan hayati bir araçtır. Bu sayede, uygulamalar daha esnek, güvenilir ve kolay yönetilebilir hale gelir.
Istio, dağıtık uygulamalar için geliştirilmiş açık kaynaklı bir "service mesh" çözümüdür. Bir "service mesh", mikroservislerin birbirleriyle nasıl iletişim kurduğunu, verilerin nasıl güvenli bir şekilde aktarılacağını ve hizmetlerin nasıl izleneceğini yöneten bir altyapı katmanıdır. Istio, bu altyapıyı var olan uygulamaların üzerine, ekstra kod değişikliği yapmaya gerek kalmadan ekleyebilir.
Istio'nun güçlü yanları şunları içerir:
Güvenlik: Mikroservisler arası iletişimi TLS şifrelemesi ile güvenli hale getirir. Bu, internetteki veri alışverişini güvenli kılan aynı teknolojidir. Ayrıca, kimlik tabanlı kimlik doğrulama ve yetkilendirme ile servislerin birbirleriyle güvenli bir şekilde iletişim kurmasını sağlar.
Yük Dengeleme: HTTP, gRPC, WebSocket ve TCP trafiği için otomatik yük dengeleme yapar. Örneğin, bir web sitesine gelen ziyaretçi trafiğini, sunucular arasında eşit bir şekilde dağıtarak hiçbir sunucunun aşırı yüklenmesini önler.
Trafik Kontrolü: Zengin yönlendirme kuralları, yeniden deneme, hata modları ve hata enjeksiyonu gibi özelliklerle trafik davranışını ince ayar yapabilir. Bu, eğer bir servis çökerse, sistem otomatik olarak kullanıcıyı bir yedek servise yönlendirebilir demektir.
Politika ve Yönetim: Erişim kontrolleri, hız limitleri ve kotalar gibi politikaları uygulayabilir. Bu, belirli servislere erişimi kısıtlamak veya sistemi aşırı kullanımdan korumak için kullanılabilir.
İzleme ve Loglama: Tüm trafik için otomatik metrikler, loglar ve izler sağlar. Bu, sistemde ne olduğunu anlamak ve sorunları daha hızlı çözmek için çok değerlidir.
Istio, Kubernetes üzerinde çalışır ve Kubernetes kümelerinde dağıtılan uygulamaları, mesh'e eklemenize, mesh'i diğer kümelerle genişletmenize veya hatta Kubernetes dışında çalışan VM'leri veya diğer uç noktaları bağlamanıza olanak tanır.
Istio, geniş bir katkıda bulunanlar ekosistemine sahiptir ve birçok farklı senaryoda genişletilebilir ve kullanılabilir.
Basit bir örnekle açıklamak gerekirse, bir alışveriş sitesini düşünün. Bu site, müşteri bilgilerini, ürün kataloğunu ve sipariş yönetimini farklı mikroservisler aracılığıyla yönetiyor olsun. Istio, bu servislerin birbirleriyle güvenli ve etkin bir şekilde iletişim kurmasını sağlar, böylece bir müşteri sipariş verdiğinde, her şey sorunsuz bir şekilde işler. Aynı zamanda, site sahipleri hangi ürünlerin daha popüler olduğunu veya hangi saatlerde site trafiğinin arttığını görebilir, böylece daha iyi kararlar alabilirler.
Istio mimarisini ve işleyişini düşündüğünüzde aslında üç ana bileşen olduğunu söylemek doğru olur: kontrol düzlemi, veri düzlemi ve bu düzlemleri birbirine bağlayan Envoy proxy'ler.
Kontrol Düzlemi: Bu, Istio'nun beyin merkezi gibidir. Tüm yönetim, yapılandırma ve güvenlik politikalarını belirler. Sistemi nasıl çalıştıracağınıza dair kuralları koyar ve bu kuralları veri düzlemine iletir.
Veri Düzlemi: Bu, uygulama trafiğinin yönlendirildiği ve işlendiği yerdir. Veri düzlemi, her bir mikroservisin yanına yerleştirilen Envoy proxy'lerden oluşur. Bu proxy'ler, gelen ve giden tüm trafik için aracılık eder, istekleri yönlendirir, dengeleme yapar ve güvenlik kurallarını uygular.
Envoy Proxy: Her mikroservise eşlik eden ve veri düzlemini oluşturan akıllı ajanlardır. Bu proxy'ler, kontrol düzlemi tarafından belirlenen politika ve kurallara göre trafik yönetimi, güvenlik ve gözlemlenebilirlik işlevlerini yerine getirir. Envoy proxy'ler, Istio'nun veri düzlemi içindeki servisler arası iletişimde kritik bir rol oynar ve kontrol düzlemi ile servisler arasında bir köprü görevi görür.
Bu üç bileşen bir arada, mikroservis mimarisindeki uygulamaların daha güvenli, daha esnek ve daha kolay yönetilebilir olmasını sağlar. Istio, bu bileşenleri kullanarak, mikroservisler arası iletişimi otomatize eder, yönetir ve güvenli bir şekilde kontrol altında tutar.
Istio'nun üç bileşenini (kontrol düzlemi, veri düzlemi ve Envoy proxy) içerecek şekilde konuyu daha iyi anlamak için gündelik hayatımızdan bir örnek verelim.
Bir çocuk parkında çocuklar (servisler) oyun oynuyorlar diyelim. Her çocuk, diğer çocuklarla oyun oynamak istiyor ama kiminle oynayacağı, oyunun kuralları gibi detayları tam olarak bilmiyor. Bu parkta, her çocuğun yanında, onlara oyun oynamak için diğer çocuklarla nasıl güvenli ve adil bir şekilde etkileşim kuracaklarını yönlendiren bir asistan (Envoy proxy) var. Bu asistanlar, parkın yönetiminden (kontrol düzlemi) aldıkları kuralları uygular ve çocukların (servislerin) birbiriyle etkileşimini kolaylaştırır.
Kuralların Belirlenmesi (Kontrol Düzlemi): Parkın yöneticisi (kontrol düzlemi), parka giren her çocuk için takip etmesi gereken genel kuralları belirler. Bu, hangi oyunların oynanabileceği, kimin kimle oynayabileceği, güvenlik kuralları gibi konuları içerir.
Asistanların Rolü (Envoy Proxy): Her çocuğun yanındaki asistan, parkın yöneticisi tarafından belirlenen kuralları her çocuk için uygular. Asistanlar, çocukların birbiriyle güvenli ve adil bir şekilde etkileşim kurmasını sağlar, hangi oyunların oynanacağını belirler ve oyun sırasında kurallara uyulup uyulmadığını denetler.
Oyunun Akışı (Veri Düzlemi): Çocuklar (servisler) arasındaki etkileşim, aslında oyunun oynandığı alanı (veri düzlemi) temsil eder. Çocuklar birbirleriyle konuşurken, oyun oynarken veya koşarken, bu etkileşimlerin hepsi veri düzlemi üzerinde gerçekleşir. Her çocuğun yanındaki asistan (Envoy proxy), bu etkileşimleri yönlendirir ve denetler, böylece her şeyin düzenli ve güvenli bir şekilde ilerlemesini sağlar.
Güvenlik ve Eğlence: Asistanlar, çocukların kiminle oynayabileceklerini, hangi oyunların güvenli olduğunu ve nasıl daha eğlenceli vakit geçirebileceklerini kolayca anlamalarını sağlar. Aynı zamanda, çocukların (servislerin) güvenliğini sağlamak için sürekli olarak çevreyi gözlemlerler.
Bu örnekte, kontrol düzlemi ve veri düzlemi bir araya gelerek, çocukların (servislerin) parkta (sistemde) hem eğlenmesini hem de güvende olmasını sağlayan bir yapı oluşturur. Kontrol düzlemi (parkın yönetimi) kuralları belirler ve günceller, asistanlar (Envoy proxy'ler) bu kuralları uygular, ve tüm bu etkileşimler veri düzlemi üzerinde, yani çocukların birbiriyle oynadığı alanda gerçekleşir. Bu yapı sayesinde, park (sistem) düzenli, güvenli ve eğlenceli bir şekilde işler.
Service Mesh ve özellikle Istio, modern yazılım geliştirme dünyasında etkileyici bir verimlilik sağlıyor. Bu teknoloji, mikroservislerin karmaşıklığını yönetirken, geliştiricilere yenilik yapma, uygulamalarını hızla ölçeklendirme ve kullanıcı deneyimini sürekli iyileştirme özgürlüğü sunuyor. Istio'nun sunduğu zengin özellik seti, güvenli servisler arası iletişimi, otomatik yük dengelemeyi, kapsamlı trafik yönetimini ve derinlemesine izleme yeteneklerini içerir, böylece uygulamaların daha dayanıklı, güvenli ve gözlemlenebilir olmasını sağlar. Kuruluşlar artık kodlarına müdahale etmeksizin bu avantajlardan faydalanabilir, bu da onların pazara daha hızlı ve daha güvenilir bir şekilde ulaşmalarını sağlar.
Sarav Asiye Yiğit – 27 Şubat 2024
Kaynakça: