Einführung
Eine praktische Methode zur Verwaltung von Microservices einer Cloud-nativen Anwendung ist die Automatisierung von Anwendungsnetzwerkfunktionen.
Istio ist eine konfigurierbare Service-Mesh-Plattform, die als Steuerungsebene fungiert und die Konfiguration an Sidecar-Proxys und Gateways verteilt. Es ist eine beliebte Option zum Verbinden, Überwachen und Sichern von Containern in einem Kubernetes-Cluster.
In diesem Tutorial erfahren Sie, wie Sie Istio installieren, eine Testanwendung bereitstellen und Ihren Kubernetes-Cluster für die Zusammenarbeit mit der Plattform einrichten.

Voraussetzungen
- Ein Kubernetes-Cluster (oder Minikube)
- kubectl-Befehlszeilentool
Laden Sie die neueste Istio-Version herunter
Navigieren Sie zum Herunterladen der neuesten Version von Istio zur Istio-Versionsseite auf GitHub.
Alternativ können Linux-Benutzer curl
verwenden um die neueste Version automatisch herunterzuladen und zu extrahieren:
curl -L https://istio.io/downloadIstio | sh -
Der Befehl extrahiert die Installationsdateien in den Ordner namens istio-[version]
:

Um eine ältere Version von Istio herunterzuladen, verwenden Sie curl
, aber geben Sie die Version und die Prozessorarchitektur an, indem Sie die folgende Syntax verwenden:
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.6.8 TARGET_ARCH=x86_64 sh -
Istio-Installationsanleitung
1. Starten Sie Ihren Kubernetes-Cluster. Dieser Artikel verwendet Minikube:
minikube start
2. Starten Sie als Nächstes die Installation von Istio, indem Sie in den Ordner mit den extrahierten Dateien wechseln:
cd istio-1.9.2
3. Der bin/
Verzeichnis enthält istioctl
Client-Binärdatei. Fügen Sie unter Linux den Client Ihrem Pfad hinzu, indem Sie Folgendes eingeben:
export PATH=$PWD/bin:$PATH
Die auf diese Weise gesetzte Variable bleibt nur bestehen, bis Sie die aktuelle Shell-Sitzung beenden. Um die Variable dauerhaft zu setzen, lesen Sie wie man Umgebungsvariablen in Linux setzt.
4. Verwenden Sie istioctl
Tool zum Starten des Installationsvorgangs:
istioctl install --set profile=demo -y
Die Ausgabe bestätigt die erfolgreiche Installation:

5. Istio kann bei der Anwendungsbereitstellung automatisch Envoy-Sidecar-Proxys einfügen. Um dies zu aktivieren, verwenden Sie kubectl
um ein Namespace-Label hinzuzufügen, das diese Anweisung enthält:
kubectl label namespace default istio-injection=enabled

Damit ist der Istio-Installationsprozess abgeschlossen.
Testen Sie die Bereitstellung über die Bookinfo-Anwendung
Das Istio-Installationsarchiv enthält alle Dateien, die zum Bereitstellen der Beispielanwendung mit dem Namen Bookinfo erforderlich sind .
1. Beginnen Sie mit der Anwendung der bookinfo.yaml
Datei mit kubectl
:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Das System erstellt mehrere Bereitstellungen, Dienste und Pods:

2. Überprüfen Sie die laufenden Dienste:
kubectl get services

3. Überprüfen Sie, ob die Pods bereit sind:
kubectl get pods
Wenn die Pods hochfahren, setzt Istio zusammen mit ihnen Seitenwagen ein:

4. Warten Sie bis READY
Label für jeden Pod ist 2/2
. Führen Sie dann den folgenden Befehl aus, um zu sehen, ob die App HTML-Seiten korrekt bereitstellt:
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o ""
Die Ausgabe sollte das Titel-Tag der Seite zusammen mit dem Titel selbst sein:

5. Der nächste Schritt besteht darin, die App für externen Datenverkehr zu öffnen. Wenden Sie bookinfo-gateway.yaml
an Datei aus den samples
Ordner:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Die Ausgabe bestätigt, dass die Anwendung erfolgreich mit dem Istio-Gateway verknüpft wurde:

6. Verwenden Sie istioctl
um die Konfiguration zu analysieren und auf mögliche Probleme zu prüfen:
istioctl analyze
Wenn das System keine Probleme findet, wird die folgende Meldung angezeigt:

7. Um auf das im vorherigen Schritt eingerichtete Gateway zuzugreifen, legen Sie die Ingress-Variablen fest. Exportieren Sie zuerst INGRESS_PORT
:
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
8. Wiederholen Sie nun den Vorgang für SECURE_INGRESS_PORT
:
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
9. Überprüfen Sie mit dem Echo-Befehl, ob die Ports erfolgreich zugewiesen wurden:
echo "$INGRESS_PORT" && echo "$SECURE_INGRESS_PORT"
Die Ausgabe zeigt die Portnummern:

10. Exportieren Sie INGRESS_HOST
Variable:
export INGRESS_HOST=$(minikube ip)
11. Überprüfen Sie die Variable mit echo
:
echo "$INGRESS_HOST"

12. Um Datenverkehr an das Istio Ingress Gateway weiterzuleiten, öffnen Sie ein neues Terminalfenster und geben Sie den folgenden Befehl ein:
minikube tunnel
Minikube dient jetzt als Load Balancer für Istio. Die Ausgabe zeigt, dass Minikube den Datenverkehr leitet:

13. Gehen Sie zurück zum vorherigen Terminalfenster und exportieren Sie die GATEWAY_URL
Variable, die aus INGRESS_HOST
besteht und INGRESS_PORT
Variablen:
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
14. Verwenden Sie echo
um die vollständige IP-Adresse und Portnummer anzuzeigen:
echo "$GATEWAY_URL"

15. Geben Sie den folgenden Befehl ein, um die externe Adresse der Anwendung anzuzeigen:
echo http://$GATEWAY_URL/productpage

16. Kopieren Sie die im vorherigen Schritt erhaltene Adresse und fügen Sie sie in einen Webbrowser ein. Die Bookinfo-Website wird erfolgreich geladen:

Richten Sie einen Kubernetes-Cluster für Istio ein
Istio wird mit einer Reihe von Add-ons für beliebte Istio-Dienste geliefert, darunter das Grafana-Dashboard, die Jaeger-Transaktionsverfolgungssoftware, Prometheus-Metrik-Scraper und die Kiali-Verwaltungskonsole.
1. Installieren Sie diese Add-Ons, indem Sie die samples/addons
anwenden Ordner:
kubectl apply -f samples/addons

2. Erstellen Sie nun eine Kubernetes-Ingress-Ressource für jedes der Add-Ons. Fügen Sie dazu Folgendes in eine yaml
ein Datei.
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: istio-system
namespace: istio-system
annotations:
kubernetes.io/ingress.class: istio
spec:
rules:
- host: my-istio-dashboard.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: grafana
servicePort: 3000
- host: my-istio-tracing.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: tracing
servicePort: 9411
- host: my-istio-logs-database.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: prometheus
servicePort: 9090
- host: my-kiali.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: kiali
servicePort: 20001
3. Speichern Sie die Datei und übernehmen Sie die Konfiguration mit kubectl:
kubectl apply -f [file-name]

Die Add-Ons sind nun konfiguriert und einsatzbereit.