Kubernetes Istio Traffik Yönetimi Örnek_1

Deniz TÜRKMEN
5 min readDec 9, 2022

--

Uygulama Örneği 1

Merhabalar,

Bu yazımda Kubernetes istio, frontend uygulamamızı istio ile traffik yönetmini inceliycez.

Eğer sisteminizde istio kurulu değil ise diğer yazımdan istio kurulumunu gerçekleştirebilirsiniz.

Istio traffic

Örneğimizi biraz açıklarsak,

  • v1 ve v2 versiyonu olan bir frontend uygulaması.
version_1
version_2
  • Dışarıdan bu uygulamanın versiyonları eriştiğimizde istio arka tarafda load balancing kullanarak v1 ile v2 arasında trafiğin geçmesini amaçlıyoruz.
  • Istio ile istersek trafiği sadece bir versiyona yönlendirme işlemini yapabilcez.
  • Denemek isteyenler için image docker hub yükledim. İndirmek isteyenler “docker pull denizturkmen/frontend-web:v1 ve docker pull denizturkmen/frontend-web:v2” ile localinize image indirip uygulamayı deneyebilirsiniz.

Örneğimizi istio trafiğine devretmeye başlayalım . Bunun için ilk olarak bir tane namespace yaratıyorum ve yaratılan bu namespace deploy edilen tün objeleri isito üzerinden geçmesini sağlıyoruz.

kubectl create ns deniz-istio

Yukarıdaki şekilde görüldüğü gibi namespace oluştu. Şimdi de namespace label ekleyerek “istio trafiğinin yönetilmesini” sağlayalım. Bunu yapmanın bir kaç yolu vardır, fakat otomatik olarak yapmak için en iyi yol uygulamanızı deploy edeceğiniz namespace alanına label eklemektir. Label eklemek için,

kubectl label ns namespace_ismi key=value
ve
kubectl get ns --show-labels

Evet artık “deniz-istio” namespace deploy edilen tüm objeleri istio trafiği üzerinden otomatik olarak geçmesini sağladık. Şimdide version: 1 ile çalışan uygulamamızı deploy edelim.

kubectl apply -f v1kubectl get pods -n deniz-istiokubectl get sa -n deniz-istiokubectl get svc -n deniz-istio

Komutlarını terminalden uygulayalım.

Yukarıdaki şekilde görüldüğü gibi deployment objemizin “replicas=1” olmasına rağmen deployment objemizi ait iki tane pod oluşmuş. Istio trafiği ilk olarak sidecar proxy üzerine alıyor ve bu sidecar proxy ilgili service ,serviste ilgili pod yönlendirme yapıyor.

Şimdi de versiyon_2 deploy edelim.

kubectl apply -f v2.yamlkubectl get pods -n deniz-istio

versiyon 2 deploy ettik ve statusü çalışıyor durumda. Şimdide trafiği bu versiyonlara dağıtacak olan nginx uygulamızı deploy edelim.

kubectl apply -f h1.yamlkubectl get configmaps -n deniz-istiokubectl get sa -n deniz-istiokubectl get svc -n deniz-istiokubectl get pods -n deniz-istio

Şimdi istio dışardan traffic için “gateway” ve “virtual service” oluşturalım.

kubectl apply -f gv.yamlkubectl get gateways.networking.istio.io -n deniz-istiokubectl get virtualservices.networking.istio.io -n deniz-istiokubectl get svc -n istio-system istio-ingressgatewaysudo vim /etc/hosts

Tarayıcından “web.denizturkmen.com” adresine gittiğimizde.

ilk olarak “version:1” olan uygulamız geldi. Sayfayı reflesh ettiğimizde

version_2 uygulamın geldiği görmekteyiz. Sayfayı her reflesh‘lediğimzde version 1 ile version 2 arasında trafic değişicektir. İsterseniz virtual service ait bir tane “destination rule” yazarak trafiği istediğiniz version a yönlendirme yapabilirsiniz.

Şimdi de “kiali” ile monitor edelim. bunun için ilk olarak indirdiğimiz istio folderından ilgili yaml deploy edelim. Bunun için, istio indirdiğimiz path giderek kiali.yaml deploy ediyoruz.

Kiali dashbord açmak için,

kubectl get svc-n istio-systemkubectl get pods -n istio-systemkubectl -n istio-system port-forward pod_name port_numarası

Tarayıcıdan “localhost:20001” gittiğimizde

burdan deniz-istio geçelim. Workload graph

version graph

versiyonlar arası trafik yüzdesi

Burdan service bakalım.

“frontend” servisine tıklayalım.

Sağ üsteki “actions” sekmesinden trafiği sadece frontend-v2 olan servise yönlendirelim.

Version graphtan tekrar baktığımızda trafiğin sadece frontend-v2 den aktığını görebilirsiniz.

frontend-v2 version graph

Eğer trafiği kiali dashboard’dan yönlendirmek yerine virtual service kapsayan bir tane “Destination Rule” yazarak istediğiniz servise trafiğinizi yönlendirebilirsiniz.

Not: Gift görüntüsü kötü oldu farkındayım bununla ilgili daha iyi çözünürlüklü yapmak için yardımlarınıza açığım.

--

--

Deniz TÜRKMEN
Deniz TÜRKMEN

No responses yet