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.
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
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.
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
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
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.
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
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.
- Links zum Blog
- Original App im Blog Learn Kubernetes in Under 3 Hours und Sourcecode auf Github.
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
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.
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.
- Istio
- Istio on Github
- Istio Installation
- Bookinfo Application
- Back to Microservices Part I + II
- Abhandlung Microservices Muster Circuit Breaker and Bulkhead patterns
- Istio Authentifizierung
- Blog: Using Istio to secure multi-cloud Kubernetes applications with zero code change
- Securing Kubernetes Clusters with Istio and Auth0
- Auth0 Beispiele
- Canary Deployments using Istio