Im Cluster zu verwaltet in einem neuen Cluster migrieren
In dieser Anleitung erfahren Sie, wie Sie eine Anwendung von einem GKE-Cluster (Google Kubernetes Engine) mit Anthos Service Mesh im Cluster zu einem neuen Cluster mit verwaltetem Anthos Service Mesh migrieren – dem vollständig verwalteten, mit Istio konformen Service Mesh von Google.
In dieser Anleitung erwartet Sie Folgendes:
- Erstellen Sie einen neuen Google Kubernetes Engine-Cluster und installieren Sie Anthos Service Mesh im Cluster und das Anthos Service Mesh-Ingress-Gateway auf dem Cluster. Dieser Cluster fungiert als vorhandener Cluster, von dem Sie weg migrieren möchten.
- Stellen Sie die Beispielanwendung Online Boutique mit Anthos Service Mesh im Cluster im Cluster bereit.
- Sie erstellen im selben Google Cloud-Projekt einen weiteren Google Kubernetes Engine-Cluster.
- Verwaltetes Anthos Service Mesh auf dem zweiten Cluster bereitstellen und das Anthos Service Mesh-Ingress-Gateway bereitstellen.
- Stellen Sie Online Boutique mit verwaltetem Anthos Service Mesh im Cluster bereit, um die Bereitstellung aus dem Cluster mit Anthos Service Mesh im Cluster zu replizieren.
- Verschieben Sie 50% des Nutzertraffics aus dem Cluster mit Anthos Service Mesh im Cluster auf den Cluster mit verwaltetem Anthos Service Mesh. Verwenden Sie dazu die Funktionen zur Trafficaufteilung im Cluster mit Anthos Service Mesh im Cluster.
- Schließen Sie die Migration von Anthos Service Mesh im Cluster zum verwalteten Anthos Service Mesh ab, indem Sie den DNS-Eintrag des Clusters mit Anthos Service Mesh im Cluster auf den Cluster mit verwaltetem Anthos Service Mesh verweisen.
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 Anthos Service Mesh ein und verschieben den Nutzertraffic schrittweise dorthin. Zuerst leiten Sie 0% des Nutzertraffics an den neuen Cluster weiter, dann 50 % und schließlich 100%. In der Produktion sollten Sie kleinere und mehr Inkremente verwenden. Wenn Sie feststellen, dass der neue Cluster einen Prozentsatz 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 Anthos Service Mesh im Cluster zum verwalteten Anthos Service Mesh:
- Migration der Canary-Steuerungsebene: Bei dieser Strategie stellen Sie verwaltetes Anthos Service Mesh auf demselben Cluster bereit, in dem derzeit Anthos Service Mesh im Cluster installiert ist.
- Canary-Clustermigration: Bei dieser Strategie erstellen Sie einen neuen Cluster und stellen dann verwaltetes Anthos 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.
Hinweise
- 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 Anthos Service Mesh im Cluster einrichten
Cluster erstellen und Anthos Service Mesh im Cluster installieren
In diesem Abschnitt erstellen Sie den Cluster, der Anthos Service Mesh im Cluster verwendet. In der Praxis wären 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-in-cluster-asm \ --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-in-cluster-asm \ cluster-with-in-cluster-asm
Prüfen Sie, ob der Clusterkontext umbenannt wurde:
kubectl config get-contexts --output="name"
Laden Sie die Version herunter, mit der Anthos Service Mesh 1.23.2 in das aktuelle Arbeitsverzeichnis installiert wird:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.23 > asmcli
Sie werden aufgefordert, „y“ einzugeben, und dann die Eingabetaste drücken.
Die Ausgabe sieht etwa so aus:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 167k 100 167k 0 0 701k 0 --:--:-- --:--:-- --:--:-- 701k
Machen Sie das Skript
asmcli
ausführbar:chmod +x asmcli
Installieren Sie Anthos Service Mesh im Cluster mit
asmcli
:./asmcli install \ --project_id PROJECT_ID \ --cluster_name cluster-with-in-cluster-asm \ --cluster_location us-central1-a \ --output_dir . \ --enable_all \ --ca mesh_ca
Es kann einige Minuten dauern, bis die Ausführung des
asmcli
-Tools abgeschlossen ist. Das Tool gibt informative Meldungen aus, damit Sie den Fortschritt verfolgen können.Bei Erfolg sieht die Ausgabe in etwa so aus:
... asmcli: Successfully installed ASM.
Ingress-Gateway von Anthos Service Mesh bereitstellen
Sie stellen das Ingress-Gateway von Anthos Service Mesh in einem separaten Namespace namens
asm-ingress
bereit. Erstellen Sie den Namespace:kubectl \ --context cluster-with-in-cluster-asm \ create namespace asm-ingress
Verwenden Sie das Label
istio.io/rev=asm-1232-2
, um den Namespaceasm-ingress
dem Service Mesh hinzuzufügen und die automatische Sidecar-Proxy-Injektion zu aktivieren.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace asm-ingress istio.io/rev=asm-1232-2
Die Ausgabe sieht etwa so aus:
namespace/asm-ingress labeled
Stellen Sie das Ingress-Gateway für Anthos Service Mesh bereit:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yaml
Die Ausgabe sieht etwa so aus:
serviceaccount/asm-ingressgateway created service/asm-ingressgateway created deployment.apps/asm-ingressgateway created gateway.networking.istio.io/asm-ingressgateway created
Online Boutique bereitstellen
Sie stellen Online Boutique in einem separaten Namespace namens
onlineboutique
bereit. Erstellen Sie den Namespace:kubectl \ --context cluster-with-in-cluster-asm \ create namespace onlineboutique
Verwenden Sie das Label
istio.io/rev=asm-1232-2
, um den Namespaceonlineboutique
dem Service Mesh hinzuzufügen und die automatische Sidecar-Proxy-Injektion zu aktivieren.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace onlineboutique istio.io/rev=asm-1232-2
Die Ausgabe sieht etwa so aus:
namespace/onlineboutique labeled
Stellen Sie die 12 Dienste von Online Boutique bereit, einschließlich des Load-Generators, der den Nutzertraffic weiterleitet:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Rufen Sie die öffentliche IP-Adresse des Anthos Service Mesh-Ingress-Gateways ab:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Kopieren Sie die öffentliche IP-Adresse des Ingress-Gateways und greifen Sie über Ihren Webbrowser darauf zu. Die Beispiel-App Online Boutique wird angezeigt.
Neuen Cluster mit verwaltetem Anthos Service Mesh einrichten
Cluster erstellen und verwaltetes Anthos Service Mesh bereitstellen
In diesem Abschnitt erstellen Sie den Cluster, zu dem Sie migrieren. Sie stellen ein verwaltetes Anthos Service Mesh bereit und stellen die Online-Boutique bereit, um die Bereitstellungen aus dem Cluster zu replizieren, der Anthos Service Mesh im Cluster verwendet.
Speichern Sie Ihre Projektnummer in einer Umgebungsvariable:
export PROJECT_NUMBER=$(gcloud projects \ describe PROJECT_ID --format='get(projectNumber)')
Erstellen Sie einen neuen Cluster:
gcloud container clusters create cluster-with-managed-asm \ --project=PROJECT_ID --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool PROJECT_ID.svc.id.goog \ --labels mesh_id=proj-${PROJECT_NUMBER}
Benennen Sie den Clusterkontext um, damit der Cluster leichter verwendet werden kann:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-managed-asm \ cluster-with-managed-asm
Prüfen Sie, ob der Clusterkontext umbenannt wurde:
kubectl config get-contexts --output="name"
Aktivieren Sie Anthos 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_ID
Die 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-managed-asm-membership \ --gke-cluster=us-central1-a/cluster-with-managed-asm \ --enable-workload-identity \ --project PROJECT_ID
Die Ausgabe sieht etwa so aus:
Waiting for membership to be created...done. Created a new membership [projects/your-project-id/locations/global/memberships/cluster-with-gke-membership] for the cluster [cluster-with-gke-membership] Generating the Connect Agent manifest... Deploying the Connect Agent on cluster [cluster-with-gke-membership] in namespace [gke-connect]... Deployed the Connect Agent on cluster [cluster-with-gke-membership] in namespace [gke-connect]. Finished registering the cluster [cluster-with-gke-membership] with the Fleet.
Aktivieren Sie verwaltetes Anthos Service Mesh im Cluster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-managed-asm-membership \ --project PROJECT_ID
Die Ausgabe sieht etwa so aus:
Waiting for Feature Service Mesh to be updated...done.
Prüfen Sie, ob das verwaltete Anthos Service Mesh für den Cluster bereitgestellt wurde und einsatzbereit ist:
gcloud container fleet mesh describe --project PROJECT_ID
Es kann etwa 10 Minuten dauern, bis Anthos Service Mesh bereitgestellt wird und im Cluster bereit ist. 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-managed-asm-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/cluster-with-managed-asm-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 Anthos Service Mesh bereitstellen
Sie stellen das Ingress-Gateway von Anthos Service Mesh in einem separaten Namespace namens
asm-ingress
bereit. Erstellen Sie den Namespace:kubectl \ --context cluster-with-managed-asm \ 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-managed-asm \ label namespace asm-ingress 'istio.io/rev=asm-managed'
Stellen Sie das Ingress-Gateway für Anthos Service Mesh bereit:
kubectl \ --context cluster-with-managed-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-managed-asm \ --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-managed-asm \ 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-managed-asm \ 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-managed-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-managed-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yaml
Rufen Sie die öffentliche IP-Adresse des Anthos Service Mesh-Ingress-Gateways ab:
kubectl \ --context cluster-with-managed-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Kopieren Sie die öffentliche IP-Adresse des Dienstes
asm-ingressgateway
und greifen Sie über Ihren Webbrowser darauf zu. Sie sehen die Beispielanwendung Online Boutique. Sie verwenden die öffentliche 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-managed-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \ )
Cluster mit Anthos Service Mesh unter Verwendung eines Canary-Deployments testen
In diesem Abschnitt konfigurieren Sie den Cluster mit Anthos Service Mesh im Cluster so, dass 50% des Nutzertraffics zu Online Boutique auf die Instanz von Online Boutique im Cluster mit verwaltetem Anthos Service Mesh verschoben werden. Dazu stellen Sie mit Anthos Service Mesh im Cluster zwei Istio-Ressourcen im Cluster bereit:
- Einen ServiceEntry, um Anthos Service Mesh im Cluster über den Online-Boutique-Endpunkt des verwalteten Anthos Service Mesh-Clusters zu informieren
- einen VirtualService, der das clusterinterne Anthos Service Mesh-Ingress-Gateway anweist, den Traffic auf 50–50 aufzuteilen.
Legen Sie die IP-Adresse des Ingress-Gateways des verwalteten Anthos Service Mesh-Clusters in der Ressource
ServiceEntry
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
ServiceEntry
mit Anthos Service Mesh im Cluster im Cluster bereit:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Stellen Sie
VirtualService
mit Anthos Service Mesh im Cluster im Cluster bereit:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service-in-cluster-asm.yaml
Rufen Sie in Ihrem Webbrowser die IP-Adresse des Ingress-Gateways des Clusters mit Anthos Service Mesh im Cluster auf:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ 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 auf dem Cluster mit verwaltetem Anthos Service Mesh verarbeitet werden.
Mit verwaltetem Anthos 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 den DNS-Einstellungen einen A-Eintrag hinzu, um den Domainnamen (z. B. beispiel.de) auf die IP-Adresse des Ingress-Gateways mit Anthos Service Mesh im Cluster zu verweisen.
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 den A-Eintrag Ihres Domainnamens auf die öffentliche IP-Adresse des Ingress-Gateways des Clusters mit verwaltetem Anthos Service Mesh fest.
Wenn die Migration erfolgreich ist, löschen Sie den Cluster mit Anthos Service Mesh im Cluster:
gcloud container clusters delete cluster-with-in-cluster-asm \ --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 verwaltetem Anthos Service Mesh:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
Nächste Schritte
- Weitere Informationen zu Verwaltetes Anthos Service Mesh.
- Weitere Informationen zu Best Practices für Anthos Service Mesh-Sicherheit.