İçerik
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.

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/stableRepomuzu güncelleyelim
helm repo updateNameserver oluşturalım
kubectl create namespace linkerd-meshLinkerd 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-meshLinkerd-cli kurulumu
curl -sL https://run.linkerd.io/install | shexport PATH=$PATH:/root/.linkerd2/binControl-plane dashbord kurulumu
linkerd viz install | kubectl apply -f -Istio Kurulumu
Helm repomuzu ekleyelim
helm repo add istio https://istio-release.storage.googleapis.com/chartsRepomuzu güncelleyelim
helm repo updateNamespace oluşturalım
kubectl create ns istio-systemIstio-base kurulumunu gerçekleştirelim
helm install istio-base istio/base -n istio-systemIstiod servisini kuralım
helm install istiod istio/istiod -n istio-system --waitIstio-ingress kurulumunu gerçekleştirelim (opsiyonel)
Namespace oluşturalım
kubectl create namespace istio-ingresskubectl label namespace istio-ingress istio-injection=enabledIstio-ingress servisini kuralım
helm install istio-ingress istio/gateway -n istio-ingress --waitServisleri kontrol edelim
helm status istiod -n istio-systemDemonstrasyon için bu bağlantıdaki repoyu kontrol edebilirsiniz.
