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