Von Istio 1.11 oder höher zu Cloud Service Mesh migrieren
In diesem Tutorial erfahren Sie, wie Sie eine Anwendung von einem Google Kubernetes Engine-Cluster (GKE) mit Istio auf einen neuen Cluster mit verwaltetem Cloud Service Mesh – das vollständig verwaltete, Istio-konforme Service Mesh von Google.
In dieser Anleitung erwartet Sie Folgendes:
- Sie erstellen einen neuen Google Kubernetes Engine-Cluster und installieren Istio und das Istio-Ingress-Gateway auf dem Cluster. Dieser Cluster fungiert als vorhandener Cluster, von dem Sie migrieren möchten.
- Sie stellen die Beispielanwendung Online Boutique mit Istio auf dem Cluster bereit.
- Sie erstellen im selben Google Cloud-Projekt einen weiteren Google Kubernetes Engine-Cluster.
- Aktivieren Sie das verwaltete Cloud Service Mesh im zweiten Cluster und stellen Sie das Cloud Service Mesh-Ingress-Gateway.
- Sie stellen Online Boutique mit Cloud Service Mesh auf dem Cluster bereit, um die Bereitstellung mit Istio aus dem Cluster zu replizieren.
- Verlagerung von 50% des Nutzertraffics vom Cluster mit Istio in den Cluster mit Cloud Service Mesh, indem Sie die Traffic-Aufteilungsfunktionen von Istio auf der mit Istio arbeiten.
- Sie schließen die Migration von Istio zu Cloud Service Mesh ab. Dazu verweisen Sie den DNS-Eintrag (Domain Name System) des Clusters mit Istio auf den Cluster mit Cloud Service Mesh.
Canary-Deployment
„Canary-Deployment“ ist eine Technik, die in der Softwareentwicklung verwendet wird, um eine neue Version einer Software zu testen, bevor diese für alle Nutzer veröffentlicht wird. Dabei wird der Prozentsatz des Traffics, der an die neue Version weitergeleitet wird, schrittweise erhöht. In dieser Anleitung richten Sie einen neuen Cluster mit verwalteten Cloud Service Mesh nutzen und den Nutzertraffic schrittweise dorthin verlagern. Sie beginnen mit Sie leitet 0% des Nutzertraffics an den neuen Cluster, dann 50 % und schließlich 100%. In der Produktion sollten Sie kleinere und mehr Schritte verwenden. Wenn Sie irgendwann dass der neue Cluster einen Teil des Traffics nicht verarbeiten kann. können Sie ein Rollback durchführen, indem Sie den Prozentsatz auf 0 % reduzieren.
Canary-Steuerungsebene im Vergleich zu Canary-Cluster
Es gibt zwei häufig verwendete Strategien für die Migration von Istio zu verwaltetes Cloud Service Mesh:
- Migration der Canary-Steuerungsebene: Bei dieser Strategie stellen Sie verwalteten Cloud Service Mesh im selben Cluster, in dem Istio ist installiert.
- Canary-Clustermigration: Bei dieser Strategie erstellen Sie einen neuen Cluster und stellen dann verwaltetes Cloud Service Mesh darauf bereit.
In dieser Anleitung werden Sie die Migrationsstrategie für den Canary-Cluster durchlaufen.
Kosten
In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:
Nach Abschluss dieser Anleitung können Sie weitere Kosten durch Löschen von erstellten Ressourcen vermeiden. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Enable the required APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Enable the required APIs.
Cloud Shell starten
In dieser Anleitung verwenden Sie Cloud Shell, eine in Google Cloud gehostete Shell-Umgebung, mit der Sie Ihre Google Cloud-Ressourcen verwalten können.
Cloud Shell wird mit den Befehlszeilentools Google Cloud CLI, kubectl und istioctl vorinstalliert. Die gcloud CLI stellt die primäre Befehlszeile für Google Cloud bereit.
Öffnen Sie in der rechten oberen Ecke dieser Seite eine Cloud Shell-Sitzung, klicken Sie auf terminal und dann auf Bestätigen. In einem Frame im unteren Teil der Seite wird eine Cloud Shell-Sitzung geöffnet. Führen Sie in dieser Cloud Shell-Sitzung die folgenden Befehle aus.
Beispielcode herunterladen
Klonen Sie die Git-Repositories mit den Kubernetes- und Istio-Ressourcen, die Sie verwenden werden:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
Cluster mit Istio einrichten
Cluster erstellen und Istio installieren
In dem Abschnitt erstellen Sie Ihren Cluster, der Istio verwendet. In der Praxis sind dies die Cluster, die Sie bereits verwenden.
Ersetzen Sie
PROJECT_ID
durch Ihre Projekt-ID und erstellen Sie einen neuen Cluster:gcloud container clusters create cluster-with-istio \ --project=PROJECT_ID \ --zone=us-central1-a \ --machine-type=e2-standard-2 --num-nodes=3
Benennen Sie den Clusterkontext um, damit der Cluster leichter verwendet werden kann:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-istio \ cluster-with-istio
Prüfen Sie, ob der Clusterkontext umbenannt wurde:
kubectl config get-contexts --output="name"
Installieren Sie Istio im Cluster: Zur Vereinfachung installieren Sie das Standardprofil von Istio und die Version, die Ihrer
istioctl
-Installation entspricht.istioctl install
Sie werden aufgefordert, „y“ einzugeben, und dann die Eingabetaste drücken.
Die Ausgabe sieht etwa so aus:
This will install the Istio X.Y.Z default profile with ["Istio core" "Istiod" "Ingress gateways"] components into the cluster. Proceed? (y/N) ✔ Istio core installed ✔ Istiod installed ✔ Ingress gateways installed ✔ Installation complete Making this installation the default for injection and validation.
Online Boutique bereitstellen
Sie stellen Online Boutique in einem separaten Namespace namens
onlineboutique
bereit. Erstellen Sie den Namespace:kubectl \ --context cluster-with-istio \ create namespace onlineboutique
Stellen Sie die 12 Dienste von Online Boutique bereit. Dazu gehören ein Ladegenerator, der den Nutzertraffic weiterleitet:
kubectl \ --namespace=onlineboutique \ --context=cluster-with-istio \ apply -f microservices-demo/release/kubernetes-manifests.yaml
Im vorherigen Schritt wurde auch ein Dienst namens
frontend-external
(von TypLoadBalancer
), dem eine externe IP-Adresse zugewiesen wird. Sie möchten jedoch nur öffentlichen eingehenden Traffic über die Bereitstellung des Istio-Ingress-Gateways zulassen. Löschen Sie die Dienstressourcefrontend-external
:kubectl \ --namespace=onlineboutique \ --context=cluster-with-istio \ delete service frontend-external
Stellen Sie eine Istio-
Gateway
-Ressource und eine Istio-VirtualService
-Ressource für den öffentlichen Traffic bereit, um auf Online Boutique zuzugreifen:kubectl \ --namespace=onlineboutique \ --context=cluster-with-istio \ apply -f microservices-demo/istio-manifests/frontend-gateway.yaml
Rufen Sie die externe IP-Adresse des Istio Ingress Gateways ab:
kubectl \ --namespace istio-system \ --context=cluster-with-istio \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Kopieren Sie die externe IP-Adresse des Dienstes
istio-ingressgateway
und dann können Sie über Ihren Webbrowser darauf zugreifen. Sie sehen die Beispiel-App „Online Boutique“.
Neuen Cluster mit verwaltetem Cloud Service Mesh einrichten
Cluster erstellen und verwaltetes Cloud Service Mesh bereitstellen
In diesem Abschnitt erstellen Sie den Cluster, zu dem Sie migrieren. Sie werden verwalteten Cloud Service Mesh bereitstellen und Online Boutique bereitstellen, um die Bereitstellungen aus dem Cluster zu replizieren, der Istio verwendet.
Erstellen Sie einen neuen Cluster:
gcloud container clusters create cluster-with-csm \ --project=PROJECT_ID --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool PROJECT_ID.svc.id.goog
Benennen Sie den Clusterkontext um, damit der Cluster leichter verwendet werden kann:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-csm \ cluster-with-csm
Prüfen Sie, ob der Clusterkontext umbenannt wurde:
kubectl config get-contexts --output="name"
Aktivieren Sie Cloud Service Mesh in der Flotte Ihres Projekts. A fleet ist eine logische Gruppierung von Kubernetes-Clustern und anderen Ressourcen, die verwaltet werden können miteinander verbinden.
gcloud container fleet mesh enable --project PROJECT_ID
Die Ausgabe sieht etwa so aus:
Waiting for Feature Service Mesh to be created...done.
Registrieren Sie den Cluster bei der Flotte des Projekts:
gcloud container fleet memberships register cluster-with-csm-membership \ --gke-cluster=us-central1-a/cluster-with-csm \ --enable-workload-identity \ --project PROJECT_ID
Die Ausgabe sieht etwa so aus:
Waiting for membership to be created...done. Finished registering to the Fleet.
Aktivieren Sie das verwaltete Cloud Service Mesh auf dem Cluster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-csm-membership \ --project PROJECT_ID
Die Ausgabe sieht etwa so aus:
Waiting for Feature Service Mesh to be updated...done.
Prüfen, ob das verwaltete Cloud Service Mesh für den Cluster bereitgestellt wurde und kann verwendet werden:
gcloud container fleet mesh describe --project PROJECT_ID
Es kann etwa 10 Minuten dauern, bis das Cloud Service Mesh bereitgestellt ist und und kann im Cluster verwendet werden. Wenn
controlPlaneManagement.state: DISABLED
odercontrolPlaneManagement.state: PROVISIONING
angezeigt wird, müssen Sie den vorherigen Befehl alle paar Minuten noch einmal ausführen, biscontrolPlaneManagement.state: ACTIVE
angezeigt wird.Die Ausgabe sieht etwa so aus:
createTime: '2022-07-06T01:05:39.110120474Z' membershipSpecs: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: servicemesh: controlPlaneManagement: details: - code: REVISION_READY details: 'Ready: asm-managed' state: ACTIVE dataPlaneManagement: details: - code: OK details: Service is running. state: ACTIVE state: code: OK description: 'Revision(s) ready for use: asm-managed.' updateTime: '2022-07-06T01:19:24.243993678Z' name: projects/your-project-id/locations/global/features/servicemesh resourceState: state: ACTIVE spec: {} state: state: {} updateTime: '2022-07-06T01:19:27.475885687Z'
Ingress-Gateway von Cloud Service Mesh bereitstellen
Sie stellen das Ingress-Gateway des Cloud Service Mesh in einem separaten Namespace namens
asm-ingress
. Erstellen Sie den Namespace:kubectl \ --context cluster-with-csm \ create namespace asm-ingress
Verwenden Sie das Label
istio.io/rev=asm-managed
, um den Namespaceasm-ingress
dem Service Mesh hinzuzufügen und die automatische Sidecar-Proxy-Injektion zu aktivieren.kubectl \ --context cluster-with-csm \ label namespace asm-ingress 'istio.io/rev=asm-managed'
Cloud Service Mesh bereitstellen Ingress-Gateway:
kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
Die Ausgabe sieht etwa so aus:
namespace/asm-ingress configured serviceaccount/asm-ingressgateway configured service/asm-ingressgateway configured deployment.apps/asm-ingressgateway configured gateway.networking.istio.io/asm-ingressgateway configured
Online Boutique bereitstellen
Sie stellen Online Boutique in einem separaten Namespace namens
onlineboutique
bereit. Erstellen Sie den Namespace:kubectl \ --context cluster-with-csm \ create namespace onlineboutique
Verwenden Sie das Label
istio.io/rev=asm-managed
, um den Namespaceonlineboutique
dem Service Mesh hinzuzufügen und die automatische Sidecar-Proxy-Injektion zu aktivieren.kubectl \ --context cluster-with-csm \ label namespace onlineboutique 'istio.io/rev=asm-managed'
Stellen Sie die 12 Dienste von Online Boutique bereit, einschließlich des Load-Generators, der den Nutzertraffic weiterleitet:
kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Rufen Sie die externe IP-Adresse des Cloud Service Mesh-Ingress-Gateways ab:
kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Kopieren Sie die externe IP-Adresse des
asm-ingressgateway
-Dienstes und greifen Sie auf über Ihren Webbrowser. Sie sehen die Beispiel-App Online Boutique. Da Sie die externe IP-Adresse im nächsten Abschnitt verwenden werden, kopieren Sie sie in eine Umgebungsvariable:export INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM=$( \ kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \ )
Cluster mit Cloud Service Mesh mithilfe eines Canary-Deployments testen
In diesem Abschnitt konfigurieren Sie den Cluster mit Istio so, dass 50% des Nutzer-Traffics bei Online Boutique wird auf die Instanz Online verlagert. Boutique im Cluster mit verwaltetem Cloud Service Mesh. Um dies zu erreichen, stellen Sie mit Istio zwei Istio-Ressourcen für den Cluster an:
- Einen ServiceEntry, um Istio über das verwaltete Cloud Service Mesh zu informieren Online Boutique-Endpunkt des Clusters
- einen VirtualService, der das Istio Ingress Gateway anweist, zwischen 50 und 50 liegen.
Legen Sie die IP-Adresse des Ingress-Gateways des verwalteten Cloud Service Mesh-Clusters in der
ServiceEntry
-Ressource fest:sed -i "s/1.2.3.4/${INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM}/" anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Stellen Sie den
ServiceEntry
mit Istio im Cluster bereit:kubectl \ --context cluster-with-istio \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Stellen Sie den
VirtualService
mit Istio im Cluster bereit:kubectl \ --context cluster-with-istio \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service.yaml
Rufen Sie die IP-Adresse des Ingress-Gateways des Clusters mit Istio in Ihrem Webbrowser:
kubectl \ --context cluster-with-istio \ --namespace istio-system \ get service
Aktualisieren Sie die Online Boutique-Startseite mehrmals und prüfen Sie jedes Mal die Fußzeile der Seite. Beachten Sie, dass 50% der Anfragen von einem Pod dem Cluster mit verwaltetem Cloud Service Mesh.
Mit verwaltetem Cloud Service Mesh zum Cluster migrieren
In diesem Abschnitt wird davon ausgegangen, dass Sie Inhaber eines Domainnamens sind und Zugriff auf die DNS-Einstellungen (Domainnamenserver) haben.
Fügen Sie einen A-Eintrag zu den DNS-Einstellungen hinzu, um den Domainnamen (z. B. example.com) auf die IP-Adresse des Ingress-Gateways zu verweisen, das auf dem Cluster mit Istio läuft.
Greifen Sie über den Domainnamen in Ihrem Webbrowser auf Online Boutique zu.
Minimieren Sie die Gültigkeitsdauer (TTL) des DNS-Eintrags, damit Sie den DNS-Eintrag, wenn ein Rollback erforderlich ist.
Setzen Sie den A-Eintrag Ihres Domainnamens auf die externe IP-Adresse des Ingress-Gateway des Clusters mit verwaltetem Cloud Service Mesh.
Löschen Sie nach erfolgreicher Migration den Cluster mit Istio:
gcloud container clusters delete cluster-with-istio \ --zone=us-central1-a \ --project=PROJECT_ID
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Ressourcen löschen
Löschen Sie den Cluster mit dem verwalteten Cloud Service Mesh:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
Nächste Schritte
- Weitere Informationen zu verwaltetem Cloud Service Mesh
- Best Practices für die Sicherheit von Cloud Service Mesh