Bookinfo-Beispiel bereitstellen
wAuf dieser Seite wird erläutert, wie Sie eine Beispielanwendung bereitstellen, um Cloud Service Mesh zu demonstrieren. Wenn Sie Cloud Service Mesh nicht installiert haben, lesen Sie die Installationsanleitung.
In der Cloud Service Mesh-Installation sind mehrere Beispielanwendungen enthalten. In diesem Leitfaden wird die Bereitstellung des Beispiels BookInfo beschrieben. Dies ist eine einfache Simulation einer Buchhandlungsanwendung, die aus vier Diensten besteht, die eine Webproduktseite, Buchdetails, Rezensionen (mit mehreren Versionen des Rezensionsdienstes) und Bewertungen bereitstellen. Alle diese Dienste werden mit Cloud Service Mesh verwaltet. Sie finden den Quellcode und alle anderen Dateien, die in diesem Beispiel verwendet werden, im Verzeichnis Ihrer Cloud Service Mesh-Installation in samples/bookinfo
.
Automatische Sidecar-Injektion aktivieren
Zum Aktivieren der automatischen Sidecar-Einfügung müssen Sie Ihre Namespaces mit Labels versehen, damit der Sidecar-Injektor-Webhook eingefügte Sidecars mit einer bestimmten Überarbeitung der Steuerungsebene verknüpft. Wenn Sie das Standard-Tag eingerichtet haben, versehen Sie Ihre Namespaces mit den Standard-Injection-Labels. Andernfalls versehen Sie Ihre Namespaces mit dem Überarbeitungslabel. Darüber hinaus hängt das von Ihnen hinzugefügte Label auch davon ab, ob Sie das verwaltete Cloud Service Mesh bereitgestellt oder die Clusterinterne Steuerungsebene installiert haben.
Verwaltet
Sie können entweder das Standard-Injection-Label oder das Überarbeitungslabel für Ihren Namespace verwenden
Standard-Injektionslabels
Wenden Sie das Standard-Injection-Label auf den Namespace an.
kubectl label namespace NAMESPACE istio-injection=enabled istio.io/rev-
Überarbeitungslabel
Entfernen Sie vor dem Bereitstellen von Anwendungen alle vorherigen
istio-injection
-Labels aus ihren Namespaces und legen Sie stattdessen das Labelistio.io/rev=REVISION_LABEL
fest.Wenn Sie es in ein bestimmtes Versionslabel ändern möchten, klicken Sie auf
REVISION_LABEL
und ersetzen Sie es durch das entsprechende Label:asm-managed-rapid
für Rapid Channel,asm-managed
für regulären Channel oderasm-managed-stable
für stabilen Channel.Das Überarbeitungslabel entspricht einer Release-Version:
Überarbeitungslabel Kanal asm-managed
Regulär asm-managed-rapid
Rapid asm-managed-stable
Stabile Version kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Wenn Sie auch die optionale verwaltete Datenebene bereitgestellt haben, annotieren Sie den Namespace
NAMESPACE
so:kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
Clusterintern
Verwenden Sie den folgenden Befehl, um das Überarbeitungslabel für
istiod
zu finden:kubectl -n istio-system get pods -l app=istiod --show-labels
Die Ausgabe sieht dann ungefähr so aus:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-173-3-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=,istio=istiod,pod-template-hash=5788d57586 istiod-asm-173-3-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=,istio=istiod,pod-template-hash=5788d57586
Notieren Sie sich den Wert des Überarbeitungslabels
istiod
aus der Ausgabe in der SpalteLABELS
, das auf das Präfixistio.io/rev=
folgt. In diesem Beispiel ist der Wert.
Wenden Sie das Überarbeitungslabel auf den Standard-Namespace an. Im folgenden Befehl ist
REVISION
der Wert des Revisions-Labelsistiod
, den Sie im vorherigen Schritt notiert haben.kubectl label namespace default istio-injection- istio.io/rev=REVISION --overwrite
Sie können die Nachricht
"istio-injection not found"
in der Ausgabe ignorieren. Das bedeutet, dass der Namespace zuvor nicht das Labelistio-injection
hatte, was Sie bei Neuinstallationen von Cloud Service Mesh oder neuen Bereitstellungen erwarten sollten. Da das Verhalten der automatischen Einfügung nicht definiert ist, wenn ein Namespace sowohl dasistio-injection
- als auch das Versionslabel hat, sorgen allekubectl label
-Befehle in der Cloud Service Mesh-Dokumentation explizit dafür, dass nur ein Wert festgelegt ist.
Anwendung bereitstellen
Nachdem die automatische Injektion im Namespace default
aktiviert wurde, werden beim Bereitstellen der Dienste der BookInfo-Anwendung Sidecar-Proxys zusammen mit jedem Dienst eingefügt.
Wechseln Sie in der Befehlszeile des Computers, auf dem Sie Cloud Service Mesh installiert haben, zum Stammverzeichnis des Cloud Service Mesh-Installationsverzeichnisses. Laden Sie bei Bedarfdie Installationsdatei herunter.
Stellen Sie die Anwendung mit
kubectl
im Standard-Namespace bereit:kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Führen Sie die folgenden Befehle aus, um zu bestätigen, dass die Anwendung fehlerfrei bereitgestellt wurde:
kubectl get services
Ausgabe:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE details 10.0.0.31 <none> 9080/TCP 6m kubernetes 10.0.0.1 <none> 443/TCP 7d productpage 10.0.0.120 <none> 9080/TCP 6m ratings 10.0.0.15 <none> 9080/TCP 6m reviews 10.0.0.170 <none> 9080/TCP 6m
und
kubectl get pod
Ausgabe:
NAME READY STATUS RESTARTS AGE details-v1-1520924117-48z17 2/2 Running 0 6m productpage-v1-560495357-jk1lz 2/2 Running 0 6m ratings-v1-734492171-rnr5l 2/2 Running 0 6m reviews-v1-874083890-f0qf0 2/2 Running 0 6m reviews-v2-1343845940-b34q5 2/2 Running 0 6m reviews-v3-1813607990-8ch52 2/2 Running 0 6m
Definieren Sie abschließend das Ingress-Gateway-Routing für die Anwendung:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
Ausgabe:
gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
Anwendungsbereitstellung validieren
Zum Prüfen, ob die BookInfo-Anwendung funktioniert, müssen Sie Traffic an das Ingress-Gateway senden.
Wenn Sie Cloud Service Mesh in Google Distributed Cloud installiert haben, rufen Sie die externe IP-Adresse für das Ingress-Gateway ab, das Sie nach der Installation von Cloud Service Mesh konfiguriert haben
Wenn Sie Cloud Service Mesh in GKE installiert haben, rufen Sie die externe IP-Adresse des Ingress-Gateways so ab:
kubectl get service istio-ingressgateway -n istio-system
Ausgabe:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.19.247.233 35.239.7.64 80:31380/TCP,443:31390/TCP,31400:31400/TCP 27m
In diesem Beispiel lautet die IP-Adresse des Ingress-Dienstes
35.239.7.64
.
Anwendung testen
Prüfen Sie, ob die BookInfo-Anwendung mit
curl
ausgeführt wird:curl -I http://EXTERNAL_IP/productpage
Wenn in der Antwort
200
angezeigt wird, bedeutet dies, dass die Anwendung ordnungsgemäß mit dem Cloud Service Mesh funktioniert.Geben Sie die folgende Adresse in Ihren Browser ein, um die BookInfo-Webseite aufzurufen:
http://EXTERNAL_IP/productpage
Wenn Sie die Seite mehrmals aktualisieren, sollten auf der Produktseite verschiedene Versionen der Rezensionen in zufälliger Abfolge angezeigt werden (rote Sterne, schwarze Sterne, keine Sterne).
Da Sie jetzt eine Anwendung haben, die Traffic generiert, können Sie in der Google Cloud Console die Cloud Service Mesh-Seiten erkunden, um Messwerte und andere Beobachtbarkeitsfunktionen zu sehen.
Bereinigen
Wenn Sie mit dem Testen des Bookinfo-Beispiels fertig sind, entfernen Sie es aus Ihrem Cluster.
Deinstallieren Sie Bookinfo mit dem folgenden Skript:
samples/bookinfo/platform/kube/cleanup.sh
Bestätigen Sie das Herunterfahren:
kubectl get virtualservices #-- there should be no virtual services kubectl get destinationrules #-- there should be no destination rules kubectl get gateway #-- there should be no gateway kubectl get pods #-- the Bookinfo pods should be deleted
Nächste Schritte
Weitere Informationen zum Bookinfo-Beispiel