Von Istio 1.11 oder höher zu Google Service Mesh migrieren
In dieser Anleitung wird beschrieben, wie Sie eine Anwendung von einem GKE-Cluster (Google Kubernetes Engine) mit Istio zu einem neuen Cluster mit verwaltetem Cloud Service Mesh migrieren, dem vollständig verwalteten Istio-kompatiblen 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.
- Sie aktivieren verwaltetes Cloud Service Mesh im zweiten Cluster und stellen das Cloud Service Mesh-Ingress-Gateway bereit.
- Sie stellen Online Boutique mit Cloud Service Mesh auf dem Cluster bereit, um die Bereitstellung mit Istio aus dem Cluster zu replizieren.
- Sie verschieben 50% des Nutzertraffics vom Cluster mit Istio auf den Cluster mit Cloud Service Mesh. Dazu werden die Aufteilungsfunktionen der Zugriffe von Istio auf dem Cluster mit Istio genutzt.
- 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 verwaltetem Cloud Service Mesh ein und verschieben den Nutzertraffic schrittweise in diesen Cluster. Sie leiten zuerst 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 feststellen, dass der neue Cluster einen Prozentsatz des Traffics nicht verarbeiten kann, können Sie ein Rollback durchführen. Reduzieren Sie dazu den Prozentsatz auf 0%.
Canary-Steuerungsebene im Vergleich zu Canary-Cluster
Es gibt zwei häufig verwendete Strategien für Migrationen von Istio zu verwaltetem Cloud Service Mesh:
- Canary-Clustermigration: Bei dieser Strategie erstellen Sie einen neuen Cluster und stellen dann verwaltetes Cloud Service Mesh darauf bereit.
- Migration der Canary-Steuerungsebene: Bei dieser Strategie stellen Sie verwaltetes Cloud Service Mesh auf demselben Cluster bereit, auf dem Istio installiert ist. Dies ist kein unterstützter Migrationspfad mit Cloud Service Mesh.
In dieser Anleitung werden Sie die Migrationsstrategie für den Canary-Cluster durchlaufen.
Kosten
In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloudverwendet:
Nach Abschluss dieser Anleitung können Sie weitere Kosten durch Löschen von erstellten Ressourcen vermeiden. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistung unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Cloud Shell starten
In dieser Anleitung verwenden Sie Cloud Shell, eine in gehostete Shell Umgebung, mit der Sie Ihre Google Cloud Ressourcen verwalten können. Google Cloud
Cloud Shell wird mit den Befehlszeilentools, Google Cloud CLI, kubectlund istioctl vorinstalliert. Die gcloud CLI stellt die primäre Befehlszeile für Google Cloudbereit.
Ö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_IDdurch 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=3Benennen 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-istioPrü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 installSie 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
onlineboutiquebereit. Erstellen Sie den Namespace:kubectl \ --context cluster-with-istio \ create namespace onlineboutiqueStellen 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.yamlIm vorherigen Schritt wurde auch ein Dienst namens
frontend-externalvom TypLoadBalancerbereitgestellt, 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-externalStellen 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.yamlRufen 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-ingressgatewayund greifen Sie dann über Ihren Webbrowser darauf zu. 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 stellen verwaltetes Cloud Service Mesh bereit und stellen Online Boutique bereit, 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.googBenennen 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-csmPrüfen Sie, ob der Clusterkontext umbenannt wurde:
kubectl config get-contexts --output="name"Aktivieren Sie Cloud Service Mesh in der Flotte Ihres Projekts. Eine Flotte ist eine logische Gruppierung von Kubernetes-Clustern und anderen Ressourcen, die zusammen verwaltet werden können.
gcloud container fleet mesh enable --project PROJECT_IDDie Ausgabe sieht etwa so aus:
Waiting for Feature Service Mesh to be created...done.Registrieren Sie den Cluster in 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_IDDie Ausgabe sieht etwa so aus:
Waiting for membership to be created...done. Finished registering to the Fleet.Aktivieren Sie verwaltetes Cloud Service Mesh im Cluster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-csm-membership \ --project PROJECT_IDDie Ausgabe sieht etwa so aus:
Waiting for Feature Service Mesh to be updated...done.Prüfen Sie, ob verwaltetes Cloud Service Mesh für den Cluster bereitgestellt wurde und bereit zur Verwendung ist:
gcloud container fleet mesh describe --project PROJECT_IDEs kann etwa 10 Minuten dauern, bis Cloud Service Mesh bereitgestellt wird und im Cluster bereit ist. Wenn
controlPlaneManagement.state: DISABLEDodercontrolPlaneManagement.state: PROVISIONINGangezeigt wird, müssen Sie den vorherigen Befehl alle paar Minuten noch einmal ausführen, biscontrolPlaneManagement.state: ACTIVEangezeigt 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 von Cloud Service Mesh in einem separaten Namespace namens
asm-ingressbereit. Erstellen Sie den Namespace:kubectl \ --context cluster-with-csm \ create namespace asm-ingressVerwenden Sie das Label
istio.io/rev=asm-managed, um den Namespaceasm-ingressdem 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'Stellen Sie das Cloud Service Mesh Ingress-Gateway bereit:
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.yamlDie 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
onlineboutiquebereit. Erstellen Sie den Namespace:kubectl \ --context cluster-with-csm \ create namespace onlineboutiqueVerwenden Sie das Label
istio.io/rev=asm-managed, um den Namespaceonlineboutiquedem 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.yamlRufen Sie die externe IP-Adresse des Ingress-Gateways von Cloud Service Mesh 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 Dienstes
asm-ingressgatewayund greifen Sie über Ihren Webbrowser darauf zu. Sie sehen die Beispielanwendung Online Boutique. Sie verwenden die externe IP-Adresse im nächsten Abschnitt. Kopieren Sie sie also 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 unter Verwendung eines Canary-Deployments testen
In diesem Abschnitt konfigurieren Sie den Cluster mit Istio so, dass 50% des Nutzertraffics zu Online Boutique auf die Instanz von Online Boutique im Cluster mit verwaltetem Cloud Service Mesh verschoben werden. Dazu stellen Sie mit Istio zwei Istio-Ressourcen im Cluster bereit:
- Einen ServiceEntry, um Istio über den Online-Endpunkt des verwalteten Cloud Service Mesh-Clusters zu informieren
- Einen VirtualService, um dem Istio-Ingress-Gateway mitzuteilen, dass der Traffic je zur Hälfte aufgeteilt werden soll.
Legen Sie die IP-Adresse des Ingress-Gateways des verwalteten Cloud Service Mesh-Clusters in der Ressource
ServiceEntryfest: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.yamlStellen Sie den
ServiceEntrymit Istio im Cluster bereit:kubectl \ --context cluster-with-istio \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yamlStellen Sie den
VirtualServicemit Istio im Cluster bereit:kubectl \ --context cluster-with-istio \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service.yamlRufen Sie in Ihrem Webbrowser die IP-Adresse des Ingress-Gateways des Clusters mit Istio auf:
kubectl \ --context cluster-with-istio \ --namespace istio-system \ get serviceAktualisieren 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 im Cluster mit verwaltetem Cloud Service Mesh verarbeitet werden.
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) für DNS-Einträge, damit Sie den DNS-Eintrag schnell zurücksetzen können, wenn Sie ein Rollback durchführen müssen.
Legen Sie für den A-Eintrag Ihres Domainnamens die externe IP-Adresse des Ingress-Gateways des Clusters mit verwaltetem Cloud Service Mesh fest.
Wenn die Migration erfolgreich ist, löschen Sie 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, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.
Projekt löschen
- Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Ressourcen löschen
Löschen Sie den Cluster mit verwaltetem 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.
- Weitere Informationen zu Best Practices für die Sicherheit von Cloud Service Mesh.