Amazon EKS Üzerinde Istio Service Mesh Kurulumu: Pratik Rehber
Mikroservisler uygulamaları ölçeklendirmeyi ve geliştirmeyi kolaylaştırır, ancak servisler arası iletişim güvenliği, görünürlük ve trafik yönetimi gibi yeni zorlukları da beraberinde getirir. İşte burada, en yaygın kullanılan service mesh çözümlerinden biri olan Istio devreye girer.
Bu rehberde, Amazon EKS üzerinde Istio'yu nasıl kuracağınızı, gözlemlenebilirliği (observability) nasıl sağlayacağınızı, mTLS ile servisleri nasıl güvence altına alacağınızı ve trafik yönetimini nasıl yapacağınızı öğreneceksiniz.
Istio Nedir ve Neden Önemlidir?
Istio, servisleriniz arasında durur ve hafif Envoy sidecar proxy'leri kullanarak iletişimi otomatik olarak yönetir. Istio ile şunları elde edersiniz:
- Akıllı trafik kontrolü
- Karşılıklı TLS (mTLS) ve sıfır güven (zero-trust) güvenliği
- Yerleşik telemetri ve izleme
- Dayanıklılık, yeniden denemeler ve devre kesiciler (circuit-breaking)
Tüm bunları uygulama kodunuzu değiştirmeden kazanırsınız.
Gereksinimler
Başlamadan önce aşağıdakilere ihtiyacınız olacak:
- Bir AWS hesabı
awsclikubectleksctlistioctl
Adım 1: EKS Cluster Oluşturma
Öncelikle, Kubernetes cluster'ımızı oluşturalım. Bunun için eksctl aracını kullanacağız.
eksctl create cluster --name istio-eks-demo --region us-east-1 --nodegroup-name standard-workers --node-type t3.medium --nodes 3
Cluster oluştuğunda (yaklaşık 15-20 dakika sürebilir), bağlantıyı doğrulayın:
kubectl get nodes

Adım 2: Istio Kurulumu
En son Istio sürümünü indirin ve kurun:
curl -L https://istio.io/downloadIstio | sh -
cd istio-*
export PATH=$PWD/bin:$PATH
Şimdi Istio'yu cluster'a demo profili ile kurun. Bu profil, test ve demo amaçlı kullanım için uygundur.
istioctl install --set profile=demo -y

Kurulumun başarılı olduğunu doğrulamak için:
kubectl get pods -n istio-system

Adım 3: Otomatik Sidecar Enjeksiyonunu Etkinleştirme
Istio'nun çalışabilmesi için her servisin yanına bir Envoy proxy (sidecar) eklenmesi gerekir. Bunu otomatik hale getirmek için default namespace'ini etiketleyin:
kubectl label namespace default istio-injection=enabled

Adım 4: Örnek Uygulama Dağıtımı (Bookinfo)
Istio'nun özelliklerini test etmek için klasik Bookinfo uygulamasını kullanacağız.
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Podların ve servislerin çalıştığını doğrulayın:
kubectl get pods
kubectl get services

Adım 5: Uygulamayı Dışarı Açma (Gateway)
Uygulamaya dışarıdan erişebilmek için bir Istio Gateway oluşturmamız gerekiyor.
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Gateway IP adresini veya DNS adını alın:
kubectl get svc istio-ingressgateway -n istio-system

Tarayıcınızdan bu adrese giderek /productpage yolunu kontrol edin. Bookinfo uygulamasını görmelisiniz.

Adım 6: Gözlemlenebilirlik (Kiali ve Grafana)
Istio'nun en güçlü yanlarından biri sunduğu görünürlüktür. Kiali panosunu açarak servis haritasını görebilirsiniz.
Önce eklentileri yükleyin:
kubectl apply -f samples/addons
Ardından Kiali panosunu açın:
istioctl dashboard kiali
Traffic Graph sekmesinde servisler arasındaki iletişimi görsel olarak izleyebilirsiniz.

Adım 7: Trafik Yönetimi ve Canary Dağıtımı
Istio ile trafiği farklı sürümler arasında dağıtabilirsiniz. Örneğin, trafiğin %80'ini v1 sürümüne, %20'sini v2 sürümüne yönlendirelim.
Önce hedef kurallarını (destination rules) oluşturun:
kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
Ardından VirtualService tanımını uygulayın:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 80
- destination:
host: reviews
subset: v2
weight: 20
Bu konfigürasyon, DevOps süreçlerinde Canary dağıtımları için kritik öneme sahiptir.
Sonuç
Bu rehberde, Amazon EKS üzerinde Istio Service Mesh kurulumunu tamamladık, örnek bir uygulama dağıttık ve temel trafik yönetimi özelliklerini inceledik. Istio, karmaşık mikroservis yapılarını yönetmek için güçlü bir araçtır ve AWS üzerinde sorunsuz bir şekilde çalışır.