Kubernetes İstio nedir? Ve Kurulumu Nasıl Yapılır

  Bir mikro hizmet mimarisinin karmaşıklığı arttıkça, kümenize ve mikro hizmetlerinize ilişkin daha iyi öngörüler için bir hizmet ağı uygulamak önemli hale gelir.Bu blog yazımda ,  İstio ‘nun ayrıntılı kurulum adımları ve yapılandırma kurulumuyla birlikte Istio’nun bir hizmet ağı olarak nasıl kullanılabileceğini açıklamaya çalışacağım.

Istio nedir?

  Istio, kümenizi ve mikro hizmetleri geliştirmek ve size daha iyi bilgi vermek için tasarlanmış bir hizmet ağıdır(service mesh). Istio genel olarak hizmet ağları ile ilgili harika şeylerden biri, çalışması için kesinlikle hiçbir kod değişikliği gerektirmemeleridir. Istio, kendisini Kubernetes kümesi içinde ek bir katman olarak entegre ederek çalışır ve böylece avantajınıza kullanabileceğiniz modern özellikler sunar. Bu özellikler arasında gelişmiş load balancer, devre kesme, mTLS trafik şifrelemesi, daha iyi kimlik doğrulama ve yetkilendirme seçenekleri, ölçümler, telemetri ve kümenin giren ve çıkan trafiği üzerinde genel hassas denetim yer alabilir. Artık Istio, kurduğunuz tek bir nesne değildir. Daha çok, birlikte çalışan ve tüm hizmet ağını oluşturan bir varlıklar topluluğudur. Kubernetes gibi, Istio da her şeyi yöneten bir kontrol düzlemine ve hizmetler arasındaki trafiği yöneten bir veri düzlemine sahiptir. Yalnızca Kubernetes kümesinde çalışmak zorunda olmadığı için Istio’da daha fazlası var. Ayrıca sanal makinelerle çalışacak ve hem yükleme hem de çalıştırma için farklı dağıtım seçeneklerini destekler. Bir sonraki bölümde, Istio’nun bileşenlerini ve mimarisini açıklayacağız.

Istio Mimarisi

“Söylendiği gibi, bir resim bin kelimeye bedeldir.”

Aşağıdaki diyagramı göz önünde bulundurun:

Kubernetes bağlamında Istio, hizmet sağlayan her bölmenin içinde sepet taşıyıcı olarak bir Envoy proxy’si dağıtır . Bu proxy’ler her bağlantıya aracılık eder ve bu konumdan gelen/giden trafiği yönlendirir ve farklı güvenlik ve ağ politikalarını uygular. Bu dinamik proxy grubu, yönlendirmeyi, güvenliği, canlı kural kümesi güncellemelerini vb. düzenleyen ayrı bir bölme seti olan Istio “kontrol düzlemi” tarafından yönetilir.

Konteynerler inanılmaz derecede hafif ve hızlıdır, yoğunluklarının sanal makinelerden kabaca bir büyüklük sırası daha fazla olması şaşırtıcı değildir. Klasik monolitik bileşen ara bağlantı şemaları, kendi iç güvenlik kuralları, etiketlemeye dayalı yollar, DNS ve hizmet dizinleri vb. ile hızla son derece dinamik, hataya dayanıklı N’den N’ye iletişimlere dönüşüyor. Bu, ünlü mikro hizmet ağıdır. Bu, yazılımdan bağımsız birimler (konteynerler) daha basit ve sayısız hale gelirken, ara bağlantı ve sorun giderme dağıtılmış yazılım davranışının gerçekten zorlaştığı anlamına gelir . Ve tabii ki kapsayıcılara bu karmaşıklığı yüklemek istemiyoruz, onların ince kalmalarını ve platformdan bağımsız olmalarını istiyoruz. Kubernetes, hizmetin kendisini sunucu bölmelerinden ayıran temel bir soyutlama katmanı sunar . Çeşitli yazılım projeleri, görünürlük, izlenebilirlik ve diğer gelişmiş pod ağ özellikleri sunarak bu karmaşıklığı evcilleştirmeye çalışıyor.

Istio’nun unsurları şunları içerir:

Envoy – Istio, büyük hizmet odaklı mimari ( SOA ) için tasarlanmış bir uygulama katmanı proxy’si ve iletişim veri yolu olan Envoy’un genişletilmiş bir sürümünü kullanır . Istio , her uygulama örneğinin yanında bir Envoy sepet dağıtır  . Aslen Lyft için tasarlanan Envoy, Istio’nun trafik davranışı hakkında ayrıntılı bilgilere erişmesini sağlar.

Pilot – Pilot, Envoy sepetleri için hizmet keşfi ve A/B testi , Canary deploymentları ve zaman aşımları dahil işlevler için trafik yönetimi sağlayan Istio hizmet ağını çalıştırır .

Citadel — Bu, Istio hizmet ağının güvenlik yönüdür. Citadel, hizmetlerin birbirleriyle konuşmasına ve geliştiricilerin, ileri geri hareket ederken şifrelendiğinden emin olmak için hizmet ağı aracılığıyla şifrelenmemiş trafiği yükseltmelerine olanak tanır . Citadel, yerleşik kimlik ve kimlik bilgisi yönetimi ile hizmetten hizmete güvenli kimlik doğrulama sağlar .

Mixer— Mixer, her Envoy proxy’sinden telemetrinin toplandığı ve erişim denetimi ilkelerinin uygulandığı platformdan bağımsız, merkezi noktadır . Mixer takılabilir, üçüncü taraf uygulamaların eklenmesine izin verir.

Bir Istio hizmet ağı iki düzleme ayrılır: Data Plane ( DP ) ve Control Plane ( CP ). DP, Mikser ile birlikte mikro hizmetler arasındaki ağ iletişimini kontrol etmek için sepet olarak dağıtılan bir dizi akıllı proxy’dir.

CP, Istio’nun çekirdeğidir. DP’yi korur ve trafiği yönlendirmek ve çalışma zamanında ilkeleri uygulamak için proxy’leri yönetir ve yapılandırır . CP, Karıştırıcıları telemetri toplamak ve ilkeleri uygulamak için de yapılandırır. Katman 7 anlayışına sahiptir ve DP’yi güvenlik duruşlarına, sabit telemetri verilerine ve düzenlemelere bağlı olarak karmaşık yönlendirme seçeneklerine karar vermek için eğitebilir.

Istio işlevselliği şunları içerir:

  • Otomatik yük dengeleme — Yük dengeleme, mikro hizmetler arasında iletişimin nasıl gerçekleştiğine ilişkin HTTP , gRPC , WebSocket ve TCP trafik denetimi denetimine olanak tanır . Istio şu anda üç Envoy yük dengeleme modunu desteklemektedir: döngüsel deneme, rastgele ve ağırlıklı en az istek.
  • Trafik davranışının hassas denetimi — İnce ayrıntı denetimi, geliştiricilerin tüm mikro hizmetleri aynı anda etkileyen kod değişiklikleri yapmak yerine her bir mikro hizmetin nasıl çalıştığını kontrol ederken yönlendirme kuralları, yeniden denemeler, yük devretmeler ve injection yerleştirme uygulamalarına olanak tanır .
  • Erişim kontrolü – Istio’nun güvenlik mimarisi, şeffaf TLS şifrelemesinin yanı sıra her bir mikro hizmet için güçlü kimlik tabanlı, kimlik doğrulama, yetkilendirme ve muhasebe ( AAA ) içerir.
  • Görünürlük — Istio, günlük kaydı , grafik oluşturma, otomatik ölçümler ve izleme yetenekleri aracılığıyla küme trafiğine ilişkin görünürlük sunar .

Istio’nun Kurulumu

Kurulum seçenekleri helm, istioctl veya operator kullanma arasında değişebilir.

Bunları aşağıdaki linkten inceleyebilirsiniz .

Bu rehber için istioctl aracını kullanarak Istio’yu kuracağız .

İlk önce, ikili dosyayı indirmeniz gerekir:

curl -L https://istio.io/downloadIstio | sh -

Curl ile çekilen klasöre gidin, ikili dosyanın yolunu dışa aktarın ve çalıştığını doğrulayın:

cd istio-1.11.1/
export PATH=$PWD/bin:$PATH
istioctl version

no running Istio pods in "istio-system"
1.11.1

Sorun değil, hala Istio’yu kurmadın.

Kümenizde Istio hizmet ağını çalıştırırken herhangi bir sorun olup olmadığını doğrulamak için uçuş öncesi denetimi çalıştırmak iyi bir fikirdir.

istioctl x precheck

Install Pre-Check passed! The cluster is ready for Istio installation.

İlerlemeden önce, Istio’nun hangi tür profille yüklenmesini istediğinizi değerlendirmelisiniz.

Bu yazı yazılırken bunlardan altı tanesi var:

  • Default
  • Demo
  • Minimal
  • External
  • Empty
  • Preview

Her profili burada genişletilmiş bir açıklama ile görüntüleyebilirsiniz .

Üretim ortamlarına yönelik varsayılan profil ile gideceğiz. Her profil, yalnızca Istio’nun kurulduğunda etkinleştireceği bir dizi özelliktir. Her özelliği test etmek istiyorsanız, demo profilini kullanarak yükleyebilirsiniz . Not: Giriş veya Çıkış Ağ Geçidini içeren profillerin yüklenmesi, otomatik olarak harici bir yük dengeleyiciyi çalıştıracaktır. Istio, profile ekleyebileceğiniz özelleştirmeler ve özel üçüncü taraf eklentiler de sunar.

Yukarıdaki profillerin hiçbirinin gereksinimlerinizi karşılamadığını varsayalım, gereksinimlerinize uygun özel bildirimler oluşturmak ve oluşturmak için istioctl’yi kullanabilirsiniz .

Varsayılan profili kullanarak yüklemek için:

istioctl install --set profile=default -y

✔ Istio core installed           	 
✔ Istiod installed                                                      	 
✔ Egress gateways installed  
✔ Ingress gateways installed
✔ Installation complete

Harika! Istio’yu başarıyla kurdunuz!

Yarı yoldasın.

Şimdi, Istio’nun hangi ad alanını kontrol edeceğini ve bölmelerdeki sepet proxy’lerini enjekte edeceğini etiketlemeniz gerekecek.

Örneğin, sepet ekleme için varsayılan ad alanını etiketlemek için:

kubectl label namespace default istio-injection=enabled

namespace/default labeled

Bunu şimdi şununla doğrulayabilirsiniz:

kubectl get ns --show-labels

NAME          	STATUS      AGE	     LABELS
default       	Active      19d     istio-injection=enabled
[other output truncated]

Bununla Istio çekirdek bileşenleri kurulumunu tamamladınız.

Gözlenebilirlik

Istio’yu kurdum ve şimdi ne olacak?

Ardından gözlemlenebilirlik kısmı gelir. Elçi proxy’leri, ağdaki trafiği görselleştirmek için kullanabileceğiniz telemetri ve diğer verileri gönderir. Prometheus ve Grafana kurulumunda olduğu gibi, verileri görüntülemek için Istio’nun bir görselleştirme aracıyla eşleştirilmiş olması gerekir. Cluster da neler olduğunu görselleştirmek ve görmek için Kiali panosunu kullanacağız . Ancak bir uyarı var. Kiali, kümenizde çalışan bir Prometheus örneğine sahip olmanızı gerektirir. Birini dağıtabilir veya zaten dağıttıysanız, mevcut olanın adresini sağlayabilirsiniz. Basitlik ve örnek amacıyla, aşağıdaki bölümde Kiali, Jaeger , Prometheus ve Grafana’yı dağıtmak için demo bildirimleri kullanılacaktır . Üretim ortamlarında çalışmak için bu kuruluma güvenmemeniz gerektiğini unutmayın!

Daha aşağıda, Kiali’nin mevcut bir Prometheus bulut sunucusuyla çalışacak şekilde nasıl kurulacağına dair bir açıklama olacak.

Kiali kontrol panelini yükleme

Istio klasörüne gidin ve samples/addons altında bulunan bildirimleri uygulayın :

kubectl apply -f samples/addons

Yukarıdakileri uygulamak birçok nesneyi dağıtacaktır, bu nedenle başlamaları için onlara birkaç dakika verin.

Kiali bölmesinin başlatılıp başlatılmadığını kontrol edin:

kubectl -n istio-system get pods -l app=kiali

NAME                               READY    STATUS	  RESTARTS      AGE
kiali-787bc487b7-fbxwm   	   1/1 	    Running       0             2m10s

Çalıştığında , artık kubectl ve port-forward kullanarak panoya erişebilirsiniz .

Ancak istioctl çok daha basit bir yol sunar:

istioctl dashboard kiali

http://localhost:20001/kiali

Tarayıcımızda http://localhost:20001/kiali’yi açın.

Gördüğünüz gibi, seçilen ad alanında çalışan trafik yok ve Kiali hiçbir bağlantı göstermeyecek.

istioctl dashboard grafana

istioctl dashboard jaeger

Kiali ipuçları

Kendi parametrelerinizi özelleştirebileceğiniz ve ayarlayabileceğiniz, üretim kullanımına daha yatkın olan Kiali’yi dağıtmanın başka yolları da vardır.

Kiali kurulumu, Kiali sunucusu veya Kiali operatörü dağıtılarak yapılabilir .

Her iki Helm grafiği için GitHub bağlantısını burada bulabilirsiniz .

Önceki bölümde bahsedildiği gibi, Prometheus’un ve diğer araçların harici örneklerini belirtebilirsiniz.

Servis ağında en fazla faydayı ve daha fazla gözlemlenebilirliği elde etmeniz için Kiali’nin ihtiyaç duyduğu tüm araçları kurmak en iyisidir.

Bunlar, izleme için Prometheus örneği, Grafana ve Jaeger’dir.

Not: Uygulamalarınızda tam dağıtılmış izlemeye sahip olmak için ek yapılandırma gerektirdiğinden Jaeger belgelerine bakın.

Grafana ve Jaeger, Kiali için isteğe bağlıdır ve çalışması için gerekli değildir.

Kurulum sırasında diğer sistemlere olan her bağlantıyı belirtebilirsiniz.

Mevcut bir Prometheus örneğini belirtmek için örnek :

$ helm install kiali-server kiali-server --repo https://kiali.org/helm-charts \
  -n istio-system \
  --set auth.strategy="anonymous" \
  --set external_services.custom_dashboards.prometheus.url="http://prometheus-k8s.monitoring:9090/" \
  --set external_services.prometheus.url="http://prometheus-k8s.monitoring:9090/"

Kiali kimlik doğrulama seçenekleri burada mevcuttur .

Anonim Yukarıda kullanılan seçenek kontrol paneline ücretsiz doğrulanmamış erişim sağlar.

Demo uygulaması

Istio’yu dağıttınız, kümenizin içinde çalışan bir hizmet ağı var ve trafiği gözlemlemek için Kiali panosunu da yüklediniz.

Şimdi basit bir demo uygulamasını dağıtalım.

Test için basit bir web sayfası görüntüleyen aşağıdaki merhaba dünya web uygulamasını kullanabilirsiniz . Aşağıdaki dağıtım ve hizmet bildirimlerini uygulayın: hello_world.yaml  adında bir yaml file oluşturalım.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes
spec:
  selector:
    matchLabels:
      name: hello-kubernetes
  template:
    metadata:
      labels:
        name: hello-kubernetes
    spec:
      containers:
      - name: app
        image: paulbouwer/hello-kubernetes:1.10
        ports:
          - containerPort: 8080
        env:
        - name: KUBERNETES_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: KUBERNETES_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: KUBERNETES_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
---
apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 8080
  selector:
    name: hello-kubernetes

$ kubectl get pod,svc

NAME                                     READY   STATUS        RESTARTS  	 AGE
pod/hello-kubernetes-78c896db9c-hrcc8  	 2/2 	 Running       0            	 46s

NAME                   		TYPE        CLUSTER-IP       EXTERNAL-IP   	PORT(S)  	AGE
service/hello-kubernetes  	ClusterIP   10.0.12.41       <none>       	80/TCP	        47s

Şimdi, test için uygulamaya erişmek için bağlantı noktası iletmeyi kullanabilirsiniz. Ancak daha kalıcı bir çözüm, bir yük dengeleyici veya bir giriş kullanmak olacaktır.

Istio, uygulamayı kullanabileceğiniz ve test edebileceğiniz kendi giriş denetleyicisine sahiptir.

Aşağıdaki giriş bildirimi, uygulamayı ` / ` yolunda gösterecek :

Şimdi ise yönlendirme yapabilmesi için ingress_manifest.yaml  bir yaml file oluşturalım

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: istio
  name: ingress-hello-kubernetes
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: hello-kubernetes
            port:
              number: 80

Not: Annotatios kısmında ingress sınıfı kullanıyoruz. Istio giriş denetleyicisinin bu nesneyi alacağını belirtirsiniz.

IP adresini aşağıdakileri kullanarak alabilirsiniz:

$ kubectl -n istio-system get svc -l release=istio

NAME               		TYPE       		CLUSTER-IP		EXTERNAL-IP    
istio-egressgateway		ClusterIP  		10.0.12.131   		<none>     	                                                                        
istio-ingressgateway   	        LoadBalancer        	10.0.13.157   		54.214.101.125   
istiod                          ClusterIP  		10.0.8.105		<none>     	
[other output truncated]

Tarayıcımızda External IP kısmında yer alan IP’y, yazarsak / bu parametreden sonra belirtilen pathe yönlendirir.

Kiali panosunda bazı etkinlikleri görmek için önce biraz trafik oluşturmanız gerekir.

En basit yol curl ve while döngüsünü kullanmaktır:

Başka bir terminal açarak aşağıda yer alan komutu yapıştırıyoruz:

$ while true; do curl 34.140.202.188 ; sleep 1; done;

Ve Kiali kontrol panelini kontrol edin:

Süper!!

Artık Kiali’nin trafiği görüntülediğini ve web uygulamasına sorunsuz bir şekilde ulaştığını görebilirsiniz.

Özet

  • Istio’nun ne olduğunu ve nasıl çalıştığını öğrendik
  • Istio’yu bir kümede kurarak ve yapılandırdık
  • Buna ek olarak, ağdaki trafiği görselleştirmek için Kiali’yi kurduk.
  • Bir demo uygulaması dağıttınız ve onu Istio’nun girişini kullanarak bağladınız

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*