Service Mesh Nedir?

Mikroservis mimarilerinde uygulamalar yazıyoruz. Bunları container olarak paketliyoruz daha sonra kubernetes üzerinde çalıştıyoruz vs.. Bir çok servisimiz birbiriyle haberleşmek durumunda kalıyor. Buraya kadar her şey normal peki ya daha sonra? Buradaki ilk sıkıntı, bu servisler arasında trafik oluşurken default olarak herhangi bir encryption’ın maalesef olmaması. Bunu manuel yapabiliriz. Her servise gidip tek tek sertifika tanımlarız vs.. bir sürü ek iş… Encrypt olmaması büyük sıkıntı mı değil fakat özellikle cloud ortamlarda çok istenilen bir özellik.

service mesh nedir

Encryption bir yana, büyük bir yapıda yüzlerce servis birbiriyle haberleştiğinde yönetim daha zor olabilir. Hangi servis hangi servisle haberleşecek, haberleşen servislerin akışları, kurallar vs.. Service Mesh ile katı kurallar koyabiliyoruz. Örneğin A servisi sadece B servisi ile haberleşsin, B servisi A servisi dışında bir yerden paket kabul etmesin gibi kurallar koyabiliyoruz. Bunun dışında da şöyle kurallar da ekleyebiliyoruz: A servisi B servisine gitsin fakat başarısız olursa C servisine fail döndürsün. Bir sürü varyasyon var. En güzel tarafı ise herhangi bir Code-level’da değişikliğe ihtiyacınız olmuyor. Bunları tek tek yazmaya gerek yok. Kafanızda aşağı yukarı neden kullandığımızın şablonu oturmuştur.

Servis Mesh kavramı yukarıdaki tüm sorunlara yanıt olmak için çıktı. En çok kullanılan ürün olan Istio tool’unu bu yazıda kubernetes üzerinde çalıştıracağız.

Service mesh ürünleri sadece http protokolü ya da grpc protokolleri üzerinde yani Layer 7 üzerinde çalışır. Trafiğiniz http yada grpc trafiği değilse service mesh trafiğinizi okuyarak split gibi işlemleri yapamaz.

Kuruluma geçmeden önce Helm paket yöneticisi ile kurulum yapacağımız için master sunucunuzda ekli olması gerekiyor. Bu yazımı inceleyerek kurabilir, detaylı komutlarını merak ediyorsanız da bu yazımı inceleyip merakınızı giderebilirsiniz.

Linkerd Kurulumu

Helm repomuzu ekleyelim

helm repo add linkerd https://helm.linkerd.io/stable

Repomuzu güncelleyelim

helm repo update

Nameserver oluşturalım

kubectl create namespace linkerd-mesh

Linkerd kurulumunu gerçekleştirelim

ca.crt issuer.crt issuer.key ssl dosyalarınızı daha önceden ayarlamış olduğunuzu varsayıyorum.

helm install linkerd2 \
  --set-file identityTrustAnchorsPEM=ca.crt \
  --set-file identity.issuer.tls.crtPEM=issuer.crt \
  --set-file identity.issuer.tls.keyPEM=issuer.key \
  linkerd/linkerd2 --namespace linkerd-mesh

Linkerd-cli kurulumu

curl -sL https://run.linkerd.io/install | sh
export PATH=$PATH:/root/.linkerd2/bin

Control-plane dashbord kurulumu

linkerd viz install | kubectl apply -f -

Istio Kurulumu

Helm repomuzu ekleyelim

helm repo add istio https://istio-release.storage.googleapis.com/charts

Repomuzu güncelleyelim

helm repo update

Namespace oluşturalım

kubectl create ns istio-system

Istio-base kurulumunu gerçekleştirelim

helm install istio-base istio/base -n istio-system

Istiod servisini kuralım

helm install istiod istio/istiod -n istio-system --wait

Istio-ingress kurulumunu gerçekleştirelim (opsiyonel)

Namespace oluşturalım

kubectl create namespace istio-ingress
kubectl label namespace istio-ingress istio-injection=enabled

Istio-ingress servisini kuralım

helm install istio-ingress istio/gateway -n istio-ingress --wait

Servisleri kontrol edelim

helm status istiod -n istio-system

Demonstrasyon için bu bağlantıdaki repoyu kontrol edebilirsiniz.