Istio ile Service Mesh

Ömer Burak Demirpolat
3 min readAug 31, 2023

Selamlar, bu yazı serisi Istio üzerine olacak.

Plan şöyle:

  • Istio nedir?
  • Istio bileşenleri ve objeleri
  • Local k8s üzerinde Istio kurulumu
  • Istio üzerinden haberleşecek server ve client deployment
  • Kiali incelemesi
  • Istio ile Canary Deployment

Istio nedir, neden ihtiyaç duyarız?

Istio bir service mesh aracıdır. Öncelikle service mesh nedir, bununla başlayalım.

Service mesh mikro servis mimarisinde trafik yönetimi, güvenlik ve servis keşfi (service discovery) gibi işlemleri kolaylaştıran sürece deniyor.

Service mesh aracı

  • İki mikro servis arasındaki trafiğe girebilir
  • Yetkilendirme uygulayabilir
  • Load balancing yapabilir
  • Servis trafiğini versiyonlamanızı sağlayabilir
  • Service discovery yapabilir, yeni deploy edilen servisleri servis ağına ekleyebilir
  • Rate limit uygulayabilir
  • Canary deployment yapabilir
  • Proxy uygulayabilir

Istio ise açık kaynaklı bir service mesh aracıdır. Yukarıdaki bahsettiğim özelliklerin tamamı Istio’da mevcut. Bir çok kurumsal firma tarafından kullanılmakta olup yakın zamanda CNCF’e dahil olmuştur.

Mikro servis mimarisindeki karmaşık network yönetimini daha basit hale getirmek amaçlı oluşturulan bir araçtır.

Istio componentleri ve objeleri nelerdir?

Istio mimarisi temel olarak 2 parçada incelenebilir.

Data Plane

Istio Envoy Proxy’nin genişletilmiş bir versiyonunu kullanır. Data plane sidecar olarak deploy ettiğimiz container’ların yanında çalışan Envoy containerlarından oluşur.

Sidecar kısmını daha sonra inceleyeceğiz. Kısaca sidecar şöyle açıklanabilir, deploy ettiğimiz podların içerisindeki uygulama containerının yanında çalışan containerlardır. İlgili poddaki tüm inbound ve outbound trafik sidecar’dan geçer. Bu sidecar’lar ise Data Plane’i oluşturur.

Control Plane

Istio control plane Pilot, Citadel, Galley, Mixer adlı araçlardan oluşuyordu fakat Istio 1.5 versiyonu ile birlikte bu componentlerin sorumluluklarının tamamı istiod altında toplandı.

Pilot: Service discovery ve trafik yönetiminden sorumludur. Sidecar üzerindeki konfigürasyonları, kuralları Pilot yönetir.

Citadel: Sertifika yönetiminin yapıldığı araçtır.

Galley: Istio genişletilmiş Envoy konfigürasyonları kullanır. Istio objesinin denetimi ve Envoy objelerine dönüştürülmesi Galley tarafından yapılır.

Mixer: Istio’nun izleme, güvenlik ve yükleme dengeleme gibi çeşitli özelliklerini sağlayan bir bileşendir.

Bunlara ek olarak Istio ile genellikle birlikte kullanılan bir araçtan bahsetmek istiyorum. Bu aracın adı Kiali.

Kiali Istio manifestlerini görüntülemek ve yönetmek için kullanılıyor, servisleriniz arasındaki trafiği izlemek, hata tespiti yapmak için de hoş bir arayüz sunuyor. Makalenin ilerleyen kısımlarında Istio ile birlikte Kiali kuracağız ve arayüzden bazı işlemler yapacağız.

Istio bileşenlerinden bahsettik biraz da temel bu makale serisi doğrultusunda ihtiyaç duyacağımız Istio CRD (Kubernetes Custom Resource Definition) objelerini inceleyelim.

Bu yazı içeriği boyunca aşağıdaki bahsedilen 3 Istio CRD objesi kullanılacaktır, şimdilik tanım olarak bahsedilecek olan bu objeler Canary Deployment ve Circuit Breaker uygulanışı sırasında kullanılacaktır, kullanırken de detaylarına ineceğiz.

1. Gateway

  • Outbound trafiği içeri almak ve içeriden dışarıya yönlendirmek için kullanılır.
  • Genellikle gelen trafiği belirli hizmetlere veya VirtualService’lere yönlendirir.

2. VirtualService

  • Client isteklerinin istemcilerin bir hizmete nasıl erişeceğini tanımlar.
  • URL matching, trafik yönlendirme, timeout ayarları VirtualService tarafından yönetilir.
  • İstemcilerin hangi subset’lere yönlendirileceğini belirlemek için kullanılır. Subset’ler ise DestinationRule ile tanımlanır yani VirtualService DestinatinRule’un üzerinde bir objedir.

3. DestinationRule

  • Bir hizmetin belirli sürümleri veya hedefleri için trafiği nasıl yönlendireceğinizi tanımlar.
  • Bu obje, bir hizmetin kaç adet sürümünün olduğunu ve bu sürümlere ne tür trafik politikaları uygulanacağını belirtir.
  • Örneğin servisinizin yeni versiyonu ve eski versiyonu burada tanımlanır, hangi version’un hangi podlara hizmet verdiği burada seçilir. VirtualService tarafında ise bu tanımlara göre trafik yönetilir.

Temel Istio objelerini tanımladık, şimdi kurulum işlemlerine geçebiliriz.

Ben tüm işlemleri cihazımda kurduğum kind ile kurduğum local k8s cluster’ım üzerinden gerçekleştireceğim. Bunun için cihazınızda Docker kurulmuş olmalı.

Kurulumu için kind dökümanını takip edebilirsin.

Mac için kısaca komutları yazayım.

brew install kind && kind create cluster

Cihazınızda k8s cluster’ı hazir ise Istio kurulumuna başlayabiliriz.

Burada Istio dökümanında yazanlardan farklı bir şey yapmayacağım aslında.

Aşağıdaki komut ile Istio’yu indiriyoruz ve indirdiğimiz klasöre gidiyoruz.

curl -L https://istio.io/downloadIstio | sh - && cd istio-1.18.2

İndirdiğimiz klasör altındaki “bin” dizinini PATH’imize eklememiz gerekiyor bu sayede Istio araçlarını çalıştırabileceğiz.

export PATH=$PWD/bin:$PATH

Kalıcı olarak Istio araçlarına erişebilmek için tanımı full path ile profile dosyanıza da eklemeyi unutmayın.

Full Path Örneği:

export PATH=/Users/burak/Desktop/istio-1.18.2/bin

Bash kullanıyorsanız $HOME/.bashrc veya $HOME/.bash_profile

Zsh kullanıyorsanız $HOME/.zshrc

Evet artık bir tutorial yapmak için hazırız.

→ Sonraki: 2. Deployment ve Istio

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

No responses yet

Write a response