Skip to content

Latest commit

 

History

History

istio

Istio

Cloud-Plattformen bieten den Unternehmen, die sie verwenden, zahlreiche Vorteile.

Dazu müssen Entwickler das Architekturmuster Microservices verwenden, was dazu führt das schnell Unterschiedliche Versionen von Microservices parallel betrieben werden müssen.

Mit den vielfältigen Funktionen von Istio kann man eine verteilte Microservice-Architektur erfolgreich und effizient ausführen und auf einheitliche Weise Microservices absichern, verbinden und überwachen.

Es ist ein vollständiger Open-Source-Service-Mesh, das auf vorhandenen verteilten Anwendungen aufbaut.

Was ist ein Service-Mesh?

Der Begriff Service-Mesh beschreibt das Netzwerk von Microservices und die Wechselwirkungen zwischen ihnen.

Je grösser und komplexer ein Service-Mesh wird, desto schwieriger ist es, es zu verstehen und zu verwalten.

Zu den Anforderungen zählen Erkennung, Lastenausgleich, Fehlerbehebung, Metriken und Überwachung.

Ein Service-Mesh hat häufig komplexere betriebliche Anforderungen, wie A/B-Tests (Bewertung zweier Varianten), Canary-Rollouts, Beschränkungen, Zugangskontrolle und End-to-End-Authentifizierung.

Weitere Informationen: Istio Homepage

Installation

Vor der Installation müss Sichergestellt werden, dass der Cluster min. 4 CPU pro Node und min. 16 GB haben.

Wechsel in der Virtuelle Machine mit Kubernetes und folgendes darin ausführen:

vagrant ssh master-01
curl -L https://git.io/getLatestIstio | ISTIO_VERSION=1.3.3 sh -
cd istio-1.3.3
export PATH=$PWD/bin:$PATH

Anschliessend können wir die Demo Installation Variante installieren:

for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl apply -f $i; done
kubectl apply -f install/kubernetes/istio-demo.yaml

Mittels den nachfolgenden Befehlen können wir kontrollieren ob die Installation erfolgreich war:

kubectl get pods,services -n istio-system 

Es müssten > 10 Pods und 2 Jobs laufen und eine etwa gleiche Anzahl von Services erstellt worden sein.

Mittels den zwei nachfolgenden Befehlen bekommen wir die IP-Adresse des Kubernetes Cluster und der Istio Port:

kubectl cluster-info
kubectl get service -n istio-system istio-ingressgateway   -o=jsonpath='{.spec.ports[1].nodePort}'

Beide Informationen brauchen um den URL der Beispiele zusammen zu setzen.

Um die Installation abzuschliessen, müssen wir festlegen welche Namespaces von Istio verwaltet werden. Dazu ist der Namespace mit dem Label istio-injection=enabled zu kennzeichnen, z.B.:

kubectl label namespace default istio-injection=enabled

Alle Pods in diesem Namespace bekommen automatisch einen Side Car und der Netzwerkverkehr wird über Istio abgehandelt.

Tools

Kiali — Observability

Kiali ist eine Web UI für Istio. Es hilft Ihnen, die Struktur Ihres Servicenetzes und deren Topologie zu verstehen.

Nach der Port Weiterleitung kann das Kiali UI mittels http://localhost:20001.

kubectl port-forward $(kubectl get pod -n istio-system -l app=kiali -o jsonpath='{.items[0].metadata.name}') -n istio-system 20001       

Jaeger — Tracing

Die Ablaufinformationen für Kiali werden durch das verteiltes Tracing-System Jaeger bereitgestellt.

Nach der Port Weiterleitung kann das Jaeger UI mittels http://localhost:16686.

kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686

Istio Beispielanwendung

Die Beispielanwendung zeigt Informationen zu einem Buch an, ähnlich einem einzelnen Katalogeintrag eines Online-Buchladens. Auf der Seite werden eine Beschreibung des Buches, Buchdetails (ISBN, Seitenzahl usw.) und einige Buchbesprechungen angezeigt.

Für Details siehe Bookinfo Application und den Sourcecode auf Github.

kubectl create namespace bookinfo
kubectl label namespace bookinfo istio-injection=enabled
kubectl apply -f istio-1.3.3/samples/bookinfo/platform/kube/bookinfo.yaml -n bookinfo
kubectl apply -f istio-1.3.3/samples/bookinfo/networking/bookinfo-gateway.yaml -n bookinfo
kubectl apply -f istio-1.3.3/samples/bookinfo/networking/destination-rule-all.yaml -n bookinfo

Die Applikation kann mittels http://:/productpage erreicht werden.

Beispiel Web Server V1 und V2

Das Beispiel startet zwei Pods mit Version 1 und Version 2 eines Services.

kubectl create namespace web
kubectl label namespace web istio-injection=enabled    
kubectl apply -f duk/istio/ -n web

Der Service wird mittels Gateway und VirtualService auf dem URL http://:/web/ veröffentlicht.

Eine DestinationRule ermöglicht es zwischen Version 1 und 2 zu wechseln.

Ohne eine expliziete Zuweisung werden Version 1 und 2 abwechselnd angezeigt.

Wechsel auf Version 1:

kubectl apply -f duk/istio/v1 -n web

Wechsel auf Version 2:

kubectl apply -f duk/istio/v2 -n web

Beispiel "Back to Microservices with Istio"

Das Beispiel "Back to Microservices with Istio" Demonstriert die Verwendung von Tools wie Kiali und Jaeger. Bei aktiviertem Prometheus kann ausserdem die Metrikinformationen von Istio visualisiert werden.

Installation:

git clone https://github.com/rinormaloku/istio-mastery.git
kubectl create namespace mastery
kubectl label namespace mastery istio-injection=enabled
kubectl apply -f istio-mastery/resource-manifests/kube -n mastery
kubectl apply -f istio-mastery/resource-manifests/istio/http-gateway.yaml -n mastery
kubectl apply -f istio-mastery/resource-manifests/istio/sa-virtualservice-external.yaml -n mastery
kubectl get all,gw,vs,dr -n mastery

Grafana — Metrics Visualization

Die von Istio gesammelten Metriken werden nach Prometheus geschrieben und mit Grafana visualisiert. Um auf die Admin-Benutzeroberfläche von Grafana zuzugreifen, führen Sie den folgenden Befehl aus und öffnen http://localhost:3000 und wechseln auf "istio / Istio Mesh Dashboard".

kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath={.items[0].metadata.name}) 3000

Um Trafik zu produzieren, kann folgendes Script in der Bash gestartet werden:

vagrant ssh master-01

while true 
do 
    curl -i http://192.168.137.100:31380/sentiment -H "Content-type: application/json" -d '{"sentence": "I love yogobella"}'; 
    sleep .8
done

Hinweis: Damit Daten angezeigt werden, muss Prometheus installiert sein.

Authentication & Authorization in Istio

Aktivieren der Authentication mittels:

kubectl apply -f istio-mastery/resource-manifests/istio/security/auth-policy.yaml -n mastery

Für die weiteren Details siehe Part II.

Links