---
title: "Service Mesh Nedir? Kubernetes Üzerinde 1 Adımda Istio ve Linkerd Kurulumu"
description: "Bu yazımda Service Mesh nedir ve Kubernetes üzerinde Istio kurulumu ve Linkerd kurulumu nasıl yapılır gibi bilgileri bulabilirsiniz."
image: "https://sezer.in/wp-content/uploads/2022/05/istio-and-kubernetes.jpg"
url: "https://sezer.in/service-mesh-nedir-istio-linkerd-kurulumu/"
date: "2022-05-17T10:54:07+03:00"
updated: "2022-05-17T10:55:14+03:00"
author: "Sezer Şanlıkan"
lang: "tr"
source: "https://sezer.in/service-mesh-nedir-istio-linkerd-kurulumu/"
---

# Service Mesh Nedir? Kubernetes Üzerinde 1 Adımda Istio ve Linkerd Kurulumu

## 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](https://sezer.in/wp-content/uploads/2022/05/service-mesh-1024x548.png)

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](https://istio.io/) 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ı](https://sezer.in/ubuntu-uzerine-helm-kurulumu/) inceleyerek kurabilir, detaylı komutlarını merak ediyorsanız da [bu yazımı](https://sezer.in/helm-cheat-sheet/) 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](https://github.com/istio/istio/blob/master/samples/helloworld/helloworld.yaml) bağlantıdaki repoyu kontrol edebilirsiniz.
