Verwaltete Cloud Service Mesh-Steuerungsebene in GKE bereitstellen
Cloud Service Mesh ist ein von Google verwaltetes Service Mesh, das Sie einfach aktivieren. Google sorgt für Zuverlässigkeit, Upgrades, Skalierung und Sicherheit.
Auf dieser Seite wird gezeigt, wie Sie mit der Fleet API ein verwaltetes Cloud Service Mesh mit Istio-APIs einrichten.
Vorbereitung
Sie sollten Folgendes bereits haben:
- Ein Cloud-Projekt
- Ein Cloud-Rechnungskonto
- Erforderliche Berechtigungen zum Bereitstellen von Cloud Service Mesh
- Workload Identity in Ihren Clustern und Knotenpools aktiviert.
Voraussetzungen
- Ein oder mehrere Cluster mit einer unterstützten Version von GKE in einer der unterstützten Regionen.
Bei der verwalteten Version von Cloud Service Mesh werden GKE-Release-Channels verwendet, um ein Gleichgewicht zwischen Stabilität und Upgrade-Geschwindigkeit zu schaffen. Neue Änderungen an den In-Cluster-Komponenten von Cloud Service Mesh (einschließlich CNI, MDPC, Proxys und Istio-CRDs) werden zuerst für Cluster eingeführt, die den GKE-Rapid-Channel abonnieren. Anschließend werden sie in den regulären GKE-Channel und schließlich in den stabilen GKE-Channel hochgestuft, sobald sie ausreichend Stabilität aufweisen.
- Managed Cloud Service Mesh unterstützt das sichere Ändern von GKE-Release-Channels nicht.
- Wenn Sie die GKE-Release-Version ändern, führt Cloud Service Mesh automatisch ein Upgrade oder Downgrade der In-Cluster-Komponenten (CNI, MDPC, standardmäßig eingefügte Proxyversion und Istio-CRDs) durch, um sie an die aktuelle GKE-Release-Version anzupassen.
Achten Sie darauf, dass Ihr Cluster genügend Kapazität für die erforderlichen Komponenten hat, die von Managed Cloud Service Mesh im Cluster installiert werden.
- Das
mdp-controller
-Deployment im Namespacekube-system
fordert CPU: 50 m und Arbeitsspeicher: 128 Mi an. - Das
istio-cni-node
-DaemonSet im Namespacekube-system
fordert auf jedem Knoten CPU: 100m, Arbeitsspeicher: 100Mi an.
- Das
Prüfen Sie, ob die Organisationsrichtlinie
constraints/compute.disableInternetNetworkEndpointGroup
deaktiviert ist. Wenn die Richtlinie aktiviert ist, funktioniert „ServiceEntry“ möglicherweise nicht.Prüfen Sie, ob der Clientcomputer, auf dem Sie Managed Cloud Service Mesh bereitstellen, eine Netzwerkverbindung zum API-Server hat.
Ihre Cluster müssen in einer Flotte registriert sein. Dies ist in der Anleitung enthalten, falls das Gerät vor der Bereitstellung noch nicht registriert wurde.
In Ihrem Projekt muss das Service Mesh Flotten-Feature aktiviert sein. Dies ist in der Anleitung enthalten, falls Sie die Funktion noch nicht aktiviert haben.
GKE Autopilot wird nur mit der GKE-Version 1.21.3+ unterstützt.
Cloud Service Mesh kann mehrere GKE-Cluster in einem Projekt mit einem einzelnen Projekt oder in einer Umgebung mit einem einzelnen Netzwerk mit mehreren Projekten verwenden.
- Wenn Sie Cluster zusammenführen, die sich nicht im selben Projekt befinden, müssen sie im selben Flottenhostprojekt registriert sein und die Cluster müssen sich zusammen in einer Konfiguration mit freigegebener VPC im selben Netzwerk befinden.
- In einer Multi-Cluster-Umgebung mit einem einzelnen Projekt kann das Flottenprojekt mit dem Clusterprojekt identisch sein. Weitere Informationen zu Flotten finden Sie unter Flottenübersicht.
- In einer Umgebung mit mehreren Projekten empfehlen wir, die Flotte in einem separaten Projekt zu hosten, das nicht mit den Clusterprojekten identisch ist. Wenn die Richtlinien Ihrer Organisation und die vorhandene Konfiguration dies zulassen, empfehlen wir, das freigegebene VPC-Projekt als Flotten-Hostprojekt zu verwenden. Weitere Informationen finden Sie unter Cluster mit freigegebener VPC einrichten.
Rollen, die zum Installieren von Cloud Service Mesh erforderlich sind
In der folgenden Tabelle werden die Rollen beschrieben, die zum Installieren von verwaltetem Cloud Service Mesh erforderlich sind.
Rollenname | Rollen-ID | Standort erteilen | Beschreibung |
---|---|---|---|
GKE-Hub-Administrator | roles/gkehub.admin | Flottenprojekt | Vollständiger Zugriff auf GKE-Hubs und zugehörige Ressourcen. |
Service Usage-Administrator | roles/serviceusage.serviceUsageAdmin | Flottenprojekt | Erlaubnis, Dienststatus zu aktivieren, zu deaktivieren und Zustände zu überprüfen, Vorgänge zu überprüfen, sowie Kontingent und Abrechnung für ein Nutzerprojekt zu verarbeiten. (Hinweis 1) |
CA Service-Administrator Beta | roles/privateca.admin | Flottenprojekt | Vollständiger Zugriff auf alle CA Service-Ressourcen. (Hinweis 2) |
Rollen, die zum Ausführen von Cloud Service Mesh erforderlich sind
In der folgenden Tabelle werden die Rollen beschrieben, die das Dienstkonto zum Ausführen von verwaltetem Cloud Service Mesh benötigt. Wenn sich Ihre Netzwerk- oder Clusterprojekte vom Flotten-Hostprojekt unterscheiden, müssen Sie dem Dienstkonto im Flottenprojekt Zugriff auf diese Rollen in den anderen Projekten gewähren.
Rollenname | Rollen-ID | Standort erteilen | Beschreibung |
---|---|---|---|
Anthos Service Mesh-Dienst-Agent | roles/anthosservicemesh.serviceAgent | Flottenprojekt | |
Vom Mesh-Netzwerk verwalteter Dienst-Agent der Steuerungsebene (Legacy) | roles/meshcontrolplane.serviceAgent | Flottenprojekt | Dies ist eine Legacy-Rolle, die Teil älterer Installationen von Cloud Service Mesh war. Wenn Ihre Installation diese Dienstrolle hat, können Sie sie beibehalten. Bei neuen Installationen ist diese Rolle nicht erforderlich. |
Beschränkungen
Wir empfehlen Ihnen, die Liste der von Cloud Service Mesh unterstützten Features und Einschränkungen durchzugehen. Insbesondere ist Folgendes zu berücksichtigen:
Die
IstioOperator
API wird nicht unterstützt, da sie hauptsächlich den Zugriff auf Clusterkomponenten steuert.Für die Verwendung des Certificate Authority Service (CA-Dienst) ist es erforderlich, Cloud Service Mesh pro Cluster zu konfigurieren. Die Verwendung des CA-Dienst wird nicht unterstützt, wenn Sie die Standardkonfiguration der Flotte in GKE Enterprise verwenden.
Bei GKE Autopilot-Clustern wird die projektübergreifende Einrichtung nur mit GKE 1.23 oder höher unterstützt.
Bei GKE Autopilot-Clustern werden zur Anpassung an das Ressourcenlimit von GKE Autopilot die Standardanfragen und -limits für Proxy-Ressourcen auf 500 mCPU und 512 MB Arbeitsspeicher festgelegt. Sie können die Standardwerte mit benutzerdefiniertem Einfügen überschreiben.
Bei GKE Autopilot-Clustern werden möglicherweise Warnungen für Cloud Service Mesh-Komponenten angezeigt, die besagen, dass für DaemonSets keine Knoten ausgewählt sind, bis der Knotenpool des Clusters skaliert wird.
Während des Bereitstellungsprozesses für eine verwaltete Steuerungsebene werden Istio-CRDs im angegebenen Cluster bereitgestellt. Wenn im Cluster bereits Istio-CRDs vorhanden sind, werden diese überschrieben.
Istio CNI und Cloud Service Mesh sind nicht mit GKE Sandbox kompatibel. Daher werden Cluster mit aktivierter GKE Sandbox nicht von verwaltetem Cloud Service Mesh mit der
TRAFFIC_DIRECTOR
-Implementierung unterstützt.
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.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Konfigurieren Sie
gcloud
(auch wenn Sie Cloud Shell verwenden). -
Authentifizieren Sie sich mit der Google Cloud CLI. Dabei ist FLEET_PROJECT_ID die ID Ihres Flotten-Hostprojekts. Normalerweise wird FLEET_PROJECT_ID standardmäßig erstellt und hat denselben Namen wie das Projekt.
gcloud auth login --project FLEET_PROJECT_ID
- Aktualisieren Sie die Komponenten:
gcloud components update
-
Aktivieren Sie die erforderlichen APIs in Ihrem Fleet-Host-Projekt.
gcloud services enable mesh.googleapis.com \ --project=FLEET_PROJECT_ID
Rufen Sie in der Google Cloud Console die Seite Feature Manager auf.
Klicken Sie im Bereich Service Mesh auf Konfigurieren.
Prüfen Sie die Einstellungen, die von allen neuen Clustern übernommen werden, die Sie in der Google Cloud -Konsole erstellen und bei der Flotte registrieren.
Klicken Sie auf Konfigurieren, um diese Einstellungen anzuwenden.
Klicken Sie im Dialogfeld zur Bestätigung auf Bestätigen.
Optional: Synchronisieren Sie vorhandene Cluster mit den Standardeinstellungen.
- Wählen Sie in der Liste Cluster in der Flotte die Cluster aus, die Sie synchronisieren möchten. Sie können nur Cluster auswählen, auf denen Cloud Service Mesh installiert ist.
- Klicken Sie auf Mit Flotteneinstellungen synchronisieren und im angezeigten Bestätigungsdialogfeld auf Bestätigen. Dies kann einige Minuten dauern.
Einstellungen auf Flottenebene
Erstellen Sie eine
mesh.yaml
-Datei, die nur die Zeilemanagement: automatic
enthält:echo "management: automatic" > mesh.yaml
Aktivieren Sie Cloud Service Mesh für Ihre Flotte:
gcloud container fleet mesh enable --project FLEET_PROJECT_ID \ --fleet-default-member-config mesh.yaml
Wenn der folgende Fehler angezeigt wird, müssen Sie GKE Enterprise aktivieren.
ERROR: (gcloud.container.fleet.mesh.enable) FAILED_PRECONDITION: The [anthos.googleapis.com] service is required for this operation and is not enabled for the project [PROJECT_NUMBER]. Please use the Google Developers Console to enable it.: failed precondition
Einstellungen auf Netzwerkebene
Wenn sich das Projekt Ihres Netzwerks von Ihrem Flotten-Hostprojekt unterscheidet (z. B. wenn Sie eine freigegebene VPC verwenden), müssen Sie Cloud Service Mesh-Dienstkonten im Flottenprojekt Zugriff auf das Netzwerkprojekt gewähren. Dies ist nur einmal für das Netzwerkprojekt erforderlich.
Gewähren Sie Dienstkonten im Fleet-Projekt die Berechtigung für den Zugriff auf das Netzwerkprojekt:
gcloud projects add-iam-policy-binding "NETWORK_PROJECT_ID" \ --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role roles/anthosservicemesh.serviceAgent
Einstellungen auf Clusterebene
Wenn Sie bereit sind, Cluster für die Verwendung mit Cloud Service Mesh zu erstellen, erstellen und registrieren Sie sie in einem einzigen Schritt mit der Google Cloud CLI, um die Standardkonfiguration zu verwenden. Beispiel:
gcloud container clusters create-auto CLUSTER_NAME \ --fleet-project FLEET_PROJECT_ID \ --location=LOCATION
Sie können die Projektnummer für Ihr Flottenprojekt mit dem folgenden Befehl abrufen:
gcloud projects list --filter="FLEET_PROJECT_ID" --format="value(PROJECT_ID)"
Das Flag
--location
ist die Compute-Zone oder -Region (z. B.us-central1-a
oderus-central1
) für den Cluster.Wenn sich das Projekt Ihres Clusters von Ihrem Fleet-Hostprojekt unterscheidet, müssen Sie Cloud Service Mesh-Dienstkonten im Fleetprojekt Zugriff auf das Clusterprojekt gewähren und die erforderlichen APIs im Clusterprojekt aktivieren. Dies ist nur einmal für jedes Clusterprojekt erforderlich.
Gewähren Sie Dienstkonten im Fleet-Projekt die Berechtigung für den Zugriff auf das Clusterprojekt:
gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID" \ --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role roles/anthosservicemesh.serviceAgent
Aktivieren Sie die Mesh API im Projekt des Clusters:
gcloud services enable mesh.googleapis.com \ --project=CLUSTER_PROJECT_ID
Ersetzen Sie CLUSTER_PROJECT_ID durch die eindeutige Kennung Ihres Clusterprojekts. Wenn Sie Ihren Cluster im selben Projekt wie Ihre Flotte erstellt haben, ist CLUSTER_PROJECT_ID mit FLEET_PROJECT_ID identisch.
Registrieren Sie einen GKE-Cluster mit Workload Identity für Geräte. Das Flag
--location
ist die Compute-Zone oder -Region (z. B.us-central1-a
oderus-central1
) für den Cluster.gcloud container clusters update CLUSTER_NAME \ --location CLUSTER_LOCATION \ --fleet-project FLEET_PROJECT_ID
Prüfen Sie, ob Ihr Cluster registriert ist:
gcloud container fleet memberships list --project FLEET_PROJECT_ID
Beispielausgabe:
NAME EXTERNAL_ID LOCATION cluster-1 1d8e255d-2b55-4df9-8793-0435461a2cbc us-central1
Notieren Sie sich die MEMBERSHIP_NAME, da Sie sie benötigen, wenn Sie die automatische Verwaltung aktivieren.
Wenn sich das Projekt des Netzwerks Ihres Clusters von Ihrem Fleet-Hostprojekt unterscheidet (z. B. wenn Sie eine freigegebene VPC verwenden), müssen Sie Cloud Service Mesh-Dienstkonten im Fleetprojekt Zugriff auf das Netzwerkprojekt gewähren. Dies ist nur einmal für das Netzwerkprojekt erforderlich.
Gewähren Sie Dienstkonten im Fleet-Projekt die Berechtigung für den Zugriff auf das Netzwerkprojekt:
gcloud projects add-iam-policy-binding "NETWORK_PROJECT_ID" \ --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role roles/anthosservicemesh.serviceAgent
Wenn sich das Projekt Ihres Clusters von Ihrem Fleet-Hostprojekt unterscheidet, müssen Sie Cloud Service Mesh-Dienstkonten im Fleetprojekt Zugriff auf das Clusterprojekt gewähren und die erforderlichen APIs im Clusterprojekt aktivieren.
Dies ist nur einmal für jedes Clusterprojekt erforderlich. Wenn Sie zuvor verwaltetes Cloud Service Mesh für diese Kombination von Cluster- und Flottenprojekten konfiguriert haben, wurden diese Änderungen bereits angewendet und Sie müssen die folgenden Befehle nicht ausführen.
Gewähren Sie Dienstkonten im Fleet-Projekt die Berechtigung für den Zugriff auf das Clusterprojekt:
gcloud projects add-iam-policy-binding "CLUSTER_PROJECT_ID" \ --member "serviceAccount:service-FLEET_PROJECT_NUMBER@gcp-sa-servicemesh.iam.gserviceaccount.com" \ --role roles/anthosservicemesh.serviceAgent
Aktivieren Sie die Mesh API im Projekt des Clusters:
gcloud services enable mesh.googleapis.com \ --project=CLUSTER_PROJECT_ID
- MEMBERSHIP_NAME ist der Mitgliedschaftsname, der bei der Registrierung des Clusters bei der Flotte aufgeführt wurde.
MEMBERSHIP_LOCATION ist der Standort Ihrer Mitgliedschaft (entweder eine Region oder
global
).Wenn Sie die Mitgliedschaft vor Kurzem mit dem Befehl in dieser Anleitung erstellt haben, sollte dies die Region Ihres Clusters sein. Wenn Sie einen zonalen Cluster haben, verwenden Sie die Region, die der Zone des Clusters entspricht. Wenn Sie beispielsweise einen zonenbasierten Cluster in
us-central1-c
haben, verwenden Sie den Wertus-central1
.Dieser Wert kann
global
sein, wenn Sie sich vor Mai 2023 registriert haben oder wenn Sie bei der Registrierung der Mitgliedschaft den Standortglobal
angegeben haben. Du kannst den Standort deiner Mitgliedschaft mitgcloud container fleet memberships list --project FLEET_PROJECT_ID
prüfen.- Nicht eingefügte Pods
- Manuell eingefügte Pods
- Jobs
- StatefulSets
- DaemonSets
Öffnen Sie die Seite Kommunikation.
Wählen Sie in der Zeile Cloud Service Mesh-Upgrade in der Spalte E-Mail das Optionsfeld aus, um Wartungsbenachrichtigungen zu aktivieren (AN).
- So wenden Sie das Standard-Injektionslabel auf einen Namespace an:
Verwenden Sie folgenden Befehl, um die verfügbaren Release-Kanäle zu finden:
kubectl -n istio-system get controlplanerevision
Die Ausgabe sieht etwa so aus:
NAME AGE asm-managed-rapid 6d7h
HINWEIS: Wenn in der Liste oben zwei Überarbeitungen der Steuerungsebene angezeigt werden, entfernen Sie eine. Mehrere Steuerungsebenenkanäle im Cluster werden nicht unterstützt.
In der Ausgabe ist der Wert in der
NAME
-Spalte das Überarbeitungslabel, das dem verfügbaren Release-Kanal für die Cloud Service Mesh-Version entspricht.Wenden Sie das Überarbeitungslabel auf den Namespace an.
kubectl label namespace NAMESPACE \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
- In Kubernetes muss das Feld
image
festgelegt werden, bevor die Einfügung erfolgt. Sie können zwar ein bestimmtes Image festlegen, um das Standardimage zu überschreiben, wir empfehlen jedoch,image
aufauto
zu setzen. In diesem Fall wählt der Sidecar-Injector das zu verwendende Image automatisch aus. - Einige Felder in
containers
sind von zugehörigen Einstellungen abhängig. Der Wert muss beispielsweise kleiner oder gleich dem CPU-Limit sein. Wenn beide Felder nicht richtig konfiguriert sind, kann der Pod möglicherweise nicht gestartet werden. - Mit Kubernetes können Sie sowohl
requests
als auchlimits
für Ressourcen in Ihrem Podspec
festlegen. GKE Autopilot berücksichtigt nurrequests
. Weitere Informationen finden Sie unter Ressourcenlimits in Autopilot festlegen. - Wenn
sidecar.istio.io/proxyCPU
für GKE Standard festgelegt ist, müssen Siesidecar.istio.io/proxyCPULimit
explizit festlegen. Andernfalls wird das CPU-Limit des Sidecars auf „unbegrenzt“ festgelegt. - Wenn
sidecar.istio.io/proxyMemory
für GKE Standard festgelegt ist, müssen Siesidecar.istio.io/proxyMemoryLimit
explizit festlegen. Andernfalls wird das Speicherlimit des Sidecars auf „unbegrenzt“ festgelegt. - Bei GKE Autopilot kann die Konfiguration von Ressourcen
requests
undlimits
mithilfe von Annotationen zu einer Überbereitstellung von Ressourcen führen. Verwenden Sie den Ansatz mit der Bildvorlage, um Folgendes zu vermeiden: Beispiele für Ressourcenänderungen in Autopilot - Ersetzen Sie das aktuelle Namespace-Label. Die Schritte hängen von Ihrer Implementierung der Steuerungsebene ab.
- So wenden Sie das Standard-Injektionslabel auf einen Namespace an:
Verwenden Sie folgenden Befehl, um die verfügbaren Release-Kanäle zu finden:
kubectl -n istio-system get controlplanerevision
Die Ausgabe sieht etwa so aus:
NAME AGE asm-managed-rapid 6d7h
HINWEIS: Wenn in der Liste oben zwei Überarbeitungen der Steuerungsebene angezeigt werden, entfernen Sie eine. Mehrere Steuerungsebenenkanäle im Cluster werden nicht unterstützt.
In der Ausgabe ist der Wert in der
NAME
-Spalte das Überarbeitungslabel, das dem verfügbaren Release-Kanal für die Cloud Service Mesh-Version entspricht.Wenden Sie das Überarbeitungslabel auf den Namespace an.
kubectl label namespace NAMESPACE \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
So führen Sie ein Rolling Upgrade von Bereitstellungen im Namespace durch:
kubectl rollout restart deployment -n NAMESPACE
Testen Sie Ihre Anwendung, um zu prüfen, ob die Arbeitslasten ordnungsgemäß funktionieren.
Wenn Sie Arbeitslasten in anderen Namespaces haben, wiederholen Sie die vorherigen Schritte für jeden Namespace.
Wenn Sie die Anwendung in einer Multi-Cluster-Einrichtung bereitgestellt haben, replizieren Sie die Kubernetes- und Istio-Konfiguration in allen Clustern, es sei denn, Sie möchten die Konfiguration auf eine Teilmenge von Clustern beschränken. Die auf einen bestimmten Cluster angewendete Konfiguration ist die "Source of Truth" für diesen Cluster.
Aktualisieren Sie Arbeitslasten, damit die vorherige Version der Steuerungsebene eingeschleust werden kann: Im folgenden Befehl wird der Überarbeitungswert
asm-191-1
nur als Beispiel verwendet. Ersetzen Sie den Beispielwert durch das Überarbeitungslabel der vorherigen Steuerungsebene.kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-191-1 --overwrite
Starten Sie die Pods neu, um die erneute Injektion auszulösen, damit die Proxys die vorherige Version erhalten:
kubectl rollout restart deployment -n NAMESPACE
Durch Aktivieren von mesh.googleapis.com werden die folgenden APIs aktiviert:
API | Zweck | Kann deaktiviert werden? |
---|---|---|
meshconfig.googleapis.com |
Cloud Service Mesh verwendet die Mesh Configuration API, um Konfigurationsdaten von Ihrem Mesh an Google Cloudweiterzuleiten. Darüber hinaus können Sie durch Aktivieren der Mesh Configuration API auf die Cloud Service Mesh-Seiten in der Google Cloud -Konsole zugreifen und die Cloud Service Mesh-Zertifizierungsstelle verwenden. | Nein |
meshca.googleapis.com |
Bezieht sich auf die Cloud Service Mesh-Zertifizierungsstelle, die von verwaltetem Cloud Service Mesh verwendet wird. | Nein |
container.googleapis.com |
Erforderlich zum Erstellen von Google Kubernetes Engine-Clustern (GKE). | Nein |
gkehub.googleapis.com |
Erforderlich zum Verwalten des Mesh-Netzwerks als Flotte. | Nein |
monitoring.googleapis.com |
Erforderlich zum Erfassen von Telemetrie für Mesh-Arbeitslasten. | Nein |
stackdriver.googleapis.com |
Erforderlich für die Verwendung der Dienste-UI. | Nein |
opsconfigmonitoring.googleapis.com |
Erforderlich, um die Services-UI für Cluster außerhalb vonGoogle Cloudzu verwenden. | Nein |
connectgateway.googleapis.com |
Erforderlich, damit die verwaltete Cloud Service Mesh-Steuerungsebene auf Mesh-Arbeitslasten zugreifen kann. | Ja* |
trafficdirector.googleapis.com |
Ermöglicht eine hochverfügbare und skalierbare verwaltete Steuerungsebene. | Ja* |
networkservices.googleapis.com |
Ermöglicht eine hochverfügbare und skalierbare verwaltete Steuerungsebene. | Ja* |
networksecurity.googleapis.com |
Ermöglicht eine hochverfügbare und skalierbare verwaltete Steuerungsebene. | Ja* |
Verwaltetes Cloud Service Mesh konfigurieren
Die Schritte, die zum Bereitstellen von verwaltetem Cloud Service Mesh mit der Fleet API erforderlich sind, hängen davon ab, ob Sie die Aktivierung standardmäßig für neue Flottencluster oder pro Cluster bevorzugen.
Für Ihre Flotte konfigurieren
Sie müssen die Google Kubernetes Engine (GKE) Enterprise-Version aktiviert haben, um Managed Cloud Service Mesh als Standardkonfiguration für Ihre Flotte zu aktivieren. Dies bedeutet, dass für jeden neuen GKE-Cluster in Google Cloud, der während der Clustererstellung registriert wird, verwaltetes Cloud Service Mesh im Cluster aktiviert ist. Weitere Informationen zur Standardkonfiguration für Flotten finden Sie unter Features auf Flottenebene verwalten.
Wenn Sie verwaltetes Cloud Service Mesh als Standardkonfiguration für Ihre Flotte aktivieren und Cluster während der Clustererstellung bei der Flotte registrieren, wird nur Mesh-CA unterstützt. Wenn Sie den Certificate Authority Service verwenden möchten, empfehlen wir, ihn pro Cluster zu aktivieren.
Führen Sie die folgenden Schritte aus, um Standardeinstellungen auf Flottenebene für das verwaltete Cloud Service Mesh zu aktivieren:
Console
gcloud
Wenn Sie Standardeinstellungen auf Flottenebene mit der Google Cloud CLI konfigurieren möchten, müssen Sie die folgenden Einstellungen festlegen:
Fahren Sie mit Bereitstellung der Steuerungsebene prüfen fort.
Pro Cluster konfigurieren
Führen Sie die folgenden Schritte aus, um verwaltetes Cloud Service Mesh für jeden Cluster in Ihrem Mesh-Netzwerk einzeln zu konfigurieren.
Cloud Service Mesh-Flottenfeature aktivieren
Aktivieren Sie das Feature mesh
im Flottenprojekt. Wenn Sie mehrere Cluster registrieren möchten, wird die Cloud Service Mesh-Flottenfunktion auf Flottenebene aktiviert, sodass Sie diesen Befehl nur einmal ausführen müssen.
gcloud container fleet mesh enable --project FLEET_PROJECT_ID
Cluster bei einer Flotte registrieren
Certificate Authority Service konfigurieren (optional)
Wenn Ihr Service Mesh-Deployment einen Certificate Authority Service (CA-Dienst) erfordert, folgen Sie der Anleitung unter Certificate Authority Service für verwaltetes Cloud Service Mesh konfigurieren, um ihn für Ihre Flotte zu aktivieren. Führen Sie alle Schritte aus, bevor Sie mit dem nächsten Abschnitt fortfahren.
Automatische Verwaltung aktivieren
Führen Sie den folgenden Befehl aus, um die automatische Verwaltung zu aktivieren:
gcloud container fleet mesh update \
--management automatic \
--memberships MEMBERSHIP_NAME \
--project FLEET_PROJECT_ID \
--location MEMBERSHIP_LOCATION
Dabei gilt:
Terraform-Unterstützung
Cloud Service Mesh unterstützt die Bereitstellung über Terraform über das GKE Hub-Modul für die Mitgliedschaft in Features.
Eine detaillierte Anleitung finden Sie im Tutorial zum Bereitstellen eines verwalteten Service Mesh.
Bereitstellung der Steuerungsebene prüfen
Prüfen Sie nach einigen Minuten, ob der Status der Steuerungsebene ACTIVE
lautet:
gcloud container fleet mesh describe --project FLEET_PROJECT_ID
Die Ausgabe sieht etwa so aus:
...
membershipSpecs:
projects/746296320118/locations/us-central1/memberships/demo-cluster-1:
mesh:
management: MANAGEMENT_AUTOMATIC
membershipStates:
projects/746296320118/locations/us-central1/memberships/demo-cluster-1:
servicemesh:
controlPlaneManagement:
details:
- code: REVISION_READY
details: 'Ready: asm-managed'
state: ACTIVE
implementation: ISTIOD | TRAFFIC_DIRECTOR
dataPlaneManagement:
details:
- code: OK
details: Service is running.
state: ACTIVE
state:
code: OK
description: 'Revision(s) ready for use: asm-managed.'
...
Beachten Sie die Steuerungsebene, die im Feld implementation
angezeigt wird, entweder ISTIOD
oder TRAFFIC_DIRECTOR
. Informationen zu den Unterschieden bei der Steuerungsebene, den unterstützten Konfigurationen und zur Auswahl der Implementierung der Steuerungsebene finden Sie unter Unterstützte Cloud Service Mesh-Funktionen.
kubectl
so konfigurieren, dass es auf den Cluster verweist
In den folgenden Abschnitten müssen Sie kubectl
-Befehle für jeden Ihrer Cluster ausführen. Bevor Sie mit den folgenden Abschnitten fortfahren, führen Sie den folgenden Befehl für jeden Ihrer Cluster aus, um kubectl
so zu konfigurieren, dass er auf den Cluster verweist.
gcloud container clusters get-credentials CLUSTER_NAME \
--location CLUSTER_LOCATION \
--project CLUSTER_PROJECT_ID
Beachten Sie, dass ein Gateway für eingehenden Traffic nicht automatisch mit der Steuerungsebene bereitgestellt wird. Durch das Entkoppeln der Bereitstellung des Ingress-Gateways können Sie Ihre Gateways in einer Produktionsumgebung verwalten. Wenn Sie ein Istio-Ingress-Gateway oder ein Istio-Egress-Gateway verwenden möchten, lesen Sie den Abschnitt Gateways bereitstellen. Wenn Sie die Kubernetes Gateway API verwenden möchten, lesen Sie den Abschnitt Gateway für Mesh vorbereiten. Informationen zum Aktivieren anderer optionaler Features finden Sie unter Optionale Features in Cloud Service Mesh aktivieren.
Verwaltete Datenebene
Wenn Sie verwaltetes Cloud Service Mesh verwenden, verwaltet Google Upgrades Ihrer Proxys vollständig.
Wenn die verwaltete Datenebene aktiviert ist, werden die Sidecar-Proxys und die eingefügten Gateways aktiv und automatisch in Verbindung mit der verwalteten Steuerungsebene aktualisiert. Dazu werden Arbeitslasten neu gestartet, um neue Versionen des Proxys neu einzufügen. Dies beginnt nach dem Upgrade der Steuerungsebene und ist in der Regel innerhalb von zwei Wochen nach dem Start abgeschlossen.
Die verwaltete Datenebene basiert auf dem GKE-Release-Kanal. Wenn Sie den GKE-Release-Channel ändern, während die verwaltete Datenebene aktiviert ist, aktualisiert Managed Cloud Service Mesh die Proxys aller vorhandenen Arbeitslasten wie bei der Einführung einer verwalteten Datenebene.
Wenn diese Option deaktiviert ist, erfolgt die Proxyverwaltung passiv. Sie wird durch den natürlichen Lebenszyklus der Pods im Cluster gesteuert und muss vom Nutzer manuell ausgelöst werden, um die Aktualisierungsrate zu steuern.
Die verwaltete Datenebene aktualisiert Proxys durch Entfernen von Pods, auf denen ältere Versionen des Proxys ausgeführt werden. Die Bereinigungen werden schrittweise vorgenommen. Dabei wird das Budget für Pod-Störungen berücksichtigt und die Änderungsrate kontrolliert.
Die verwaltete Datenebene verwaltet nicht Folgendes:
Verwaltete Datenebene deaktivieren (optional)
Wenn Sie das verwaltete Cloud Service Mesh auf einem neuen Cluster bereitstellen, können Sie die verwaltete Datenebene vollständig oder für einzelne Namespaces oder Pods deaktivieren. Die verwaltete Datenebene bleibt für vorhandene Cluster deaktiviert, in denen sie standardmäßig oder manuell deaktiviert wurde.
Wenn Sie die verwaltete Datenebene auf Clusterebene deaktivieren und wieder die Sidecar-Proxys verwalten möchten, ändern Sie die Annotation:
kubectl annotate --overwrite controlplanerevision -n istio-system \
mesh.cloud.google.com/proxy='{"managed":"false"}'
So deaktivieren Sie die verwaltete Datenebene für einen Namespace:
kubectl annotate --overwrite namespace NAMESPACE \
mesh.cloud.google.com/proxy='{"managed":"false"}'
So deaktivieren Sie die verwaltete Datenebene für einen Pod:
kubectl annotate --overwrite pod POD_NAME \
mesh.cloud.google.com/proxy='{"managed":"false"}'
Wartungsfenster für die verwaltete Datenebene aktivieren
Wenn Sie ein GKE-Wartungsfenster konfiguriert haben, beginnen aktive Upgrades zu Beginn des nächsten verfügbaren Wartungsfensters und werden ohne Pause fortgesetzt, bis alle verwalteten Pods aktualisiert wurden (normalerweise 12 Stunden). Das Wartungsfenster wird bei Rollouts im Zusammenhang mit CVEs nicht berücksichtigt.
Cloud Service Mesh verwendet das GKE-Wartungsfenster, um sich an GKE anzupassen.
Wartungsbenachrichtigungen für die verwaltete Datenebene aktivieren
Sie können bis zu eine Woche vor der geplanten Wartung über die bevorstehende Wartung der verwalteten Datenebene informiert werden. Wartungsbenachrichtigungen werden nicht standardmäßig gesendet. Sie müssen außerdem ein GKE-Wartungsfenster konfigurieren, bevor Sie Benachrichtigungen erhalten können. Wenn diese Option aktiviert ist, werden Benachrichtigungen mindestens zwei Tage vor dem Upgradevorgang gesendet.
So aktivieren Sie Wartungsbenachrichtigungen für verwaltete Datenebenen:
Jeder Nutzer, der Benachrichtigungen erhalten möchte, muss separat aktiviert werden. Wenn Sie einen E-Mail-Filter für diese Benachrichtigungen festlegen möchten, lautet der Betreff:
Upcoming upgrade for your Cloud Service Mesh cluster "CLUSTER_LOCATION/CLUSTER_NAME"
.
Das folgende Beispiel zeigt eine typische Wartungsbenachrichtigung für die verwaltete Datenebene:
Betreff: Bevorstehendes Upgrade für Ihren Cloud Service Mesh-Cluster „
<location/cluster-name>
“Lieber Cloud Service Mesh-Nutzer,
Für die Cloud Service Mesh-Komponenten in Ihrem Cluster ${instance_id} (https://console.cloud.google.com/kubernetes/clusters/details/${instance_id}/details?project=${project_id}) wird ein Upgrade auf ${scheduled_date_human_readable} um ${scheduled_time_human_readable} geplant.
In den Versionshinweisen (https://cloud.google.com/service-mesh/docs/release-notes) finden Sie weitere Informationen zu diesem neuen Update.
Wenn diese Wartung gekündigt wird, erhalten Sie eine weitere Benachrichtigung.
Viele Grüße
Ihr Cloud Service Mesh-Team
(c) 2023 Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA Mit dieser Servicemitteilung informieren wir Sie über wichtige Änderungen in Bezug auf die Google Cloud Platform oder Ihr Konto. Sie können Benachrichtigungen zu Wartungsfenstern deaktivieren, indem Sie Ihre Einstellungen anpassen: https://console.cloud.google.com/user-preferences/communication?project=${project_id}
Endpunkterkennung konfigurieren (nur für Installationen mit mehreren Clustern)
Wenn Ihr Mesh-Netzwerk nur einen Cluster hat, überspringen Sie diese Schritte für mehrere Cluster und fahren mit Anwendungen bereitstellen oder Anwendungen migrieren fort.
Prüfen Sie, ob Cloud Service Mesh in jedem Cluster konfiguriert ist, bevor Sie fortfahren.
Wenn Sie Cloud Service Mesh mit der Fleet API aktivieren, wird die Endpunkterkennung für diesen Cluster aktiviert. Sie müssen jedoch Firewallports öffnen. Informationen zum Deaktivieren der Endpunkterkennung für einen oder mehrere Cluster finden Sie in der Anleitung zum Deaktivieren der Endpunkterkennung zwischen Clustern mit deklarativer API.
Eine Beispielanwendung mit zwei Clustern finden Sie im HelloWorld-Dienstbeispiel.
Anwendungen bereitstellen
Wenn Sie mehr als einen Cluster in der Flotte mit verwaltetem Cloud Service Mesh haben, müssen Sie sicherstellen, dass die Endpunkterkennung oder die Firewallports wie vorgesehen konfiguriert sind, bevor Sie fortfahren und Anwendungen bereitstellen.Aktivieren Sie den Namespace für die Injection: Die Schritte hängen von Ihrer Implementierung der Steuerungsebene ab.
Verwaltet (TD)
kubectl label namespace NAMESPACE \
istio.io/rev- istio-injection=enabled --overwrite
Verwaltet (Istiod)
Empfohlen:Führen Sie den folgenden Befehl aus, um das Standard-Injektionslabel auf den Namespace anzuwenden:
kubectl label namespace NAMESPACE \
istio.io/rev- istio-injection=enabled --overwrite
Wenn Sie ein vorhandener Nutzer mit der verwalteten Istiod-Steuerungsebene sind:Wir empfehlen die Verwendung der Standardeinfügung, aber die revisionsbasierte Einfügung wird unterstützt. Gehen Sie dazu so vor:
Prüfen Sie mit dem folgenden Befehl, ob das Namespace-Label richtig angewendet wurde.
kubectl get namespace -L istio-injection
Beispielausgabe:
NAME STATUS AGE ISTIO-INJECTION
default Active 5m9s enabled
Sie haben das verwaltete Cloud Service Mesh konfiguriert. Wenn Sie bereits Arbeitslasten in beschrifteten Namespaces haben, starten Sie diese neu, damit sie Proxys einfügen.
Wenn Sie eine Anwendung in einer Multi-Cluster-Konfiguration bereitstellen, replizieren Sie die Kubernetes- und Steuerungsebene auf allen Clustern, sofern Sie diese bestimmte Konfiguration nicht auf eine Teilmenge von Clustern beschränken. Die auf einen bestimmten Cluster angewendete Konfiguration ist die "Source of Truth" für diesen Cluster.
Einschleusung anpassen (optional)
Sie können Standardwerte überschreiben und die Einstellungen für das Einfügen anpassen. Dies kann jedoch zu unvorhergesehenen Konfigurationsfehlern und Problemen mit Sidecar-Containern führen. Bevor Sie die Einfügung anpassen, sollten Sie die Informationen nach dem Beispiel lesen, um Hinweise zu bestimmten Einstellungen und Empfehlungen zu erhalten.
Mit der Konfiguration pro Pod können Sie diese Optionen für einzelne Pods überschreiben.
Dazu fügen Sie Ihrem Pod einen istio-proxy
-Container hinzu. Bei der Sidecar-Einfügung wird jede hier definierte Konfiguration als Überschreibung der Standardvorlage für die Einfügung behandelt.
Mit der folgenden Konfiguration werden beispielsweise verschiedene Einstellungen angepasst, darunter das Senken der CPU-Anforderungen, das Hinzufügen einer Volume-Einbindung und das Hinzufügen eines preStop
-Hooks:
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- name: hello
image: alpine
- name: istio-proxy
image: auto
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "200m"
memory: "256Mi"
volumeMounts:
- mountPath: /etc/certs
name: certs
lifecycle:
preStop:
exec:
command: ["sleep", "10"]
volumes:
- name: certs
secret:
secretName: istio-certs
Im Allgemeinen kann jedes Feld in einem Pod festgelegt werden. Bei bestimmten Feldern ist jedoch Vorsicht geboten:
Außerdem können bestimmte Felder über Anmerkungen im Pod konfiguriert werden. Es wird jedoch empfohlen, die Einstellungen wie oben beschrieben anzupassen. Achten Sie besonders auf die folgenden Anmerkungen:
Sehen Sie sich beispielsweise die Anmerkung zu den folgenden Ressourcen an:
spec:
template:
metadata:
annotations:
sidecar.istio.io/proxyCPU: "200m"
sidecar.istio.io/proxyCPULimit: "200m"
sidecar.istio.io/proxyMemory: "256Mi"
sidecar.istio.io/proxyMemoryLimit: "256Mi"
Anwendungen zu verwaltetem Cloud Service Mesh migrieren
Führen Sie die folgenden Schritte aus, um Anwendungen von Cloud Service Mesh im Cluster zu einem verwalteten Cloud Service Mesh zu migrieren:
Verwaltet (TD)
kubectl label namespace NAMESPACE \
istio.io/rev- istio-injection=enabled --overwrite
Verwaltet (Istiod)
Empfohlen:Führen Sie den folgenden Befehl aus, um das Standard-Injektionslabel auf den Namespace anzuwenden:
kubectl label namespace NAMESPACE \
istio.io/rev- istio-injection=enabled --overwrite
Wenn Sie ein vorhandener Nutzer mit der verwalteten Istiod-Steuerungsebene sind:Wir empfehlen die Verwendung der Standardeinfügung, aber die revisionsbasierte Einfügung wird unterstützt. Gehen Sie dazu so vor:
Wenn Sie mit der Anwendung zufrieden sind, können Sie den clusterinternen istiod
entfernen, nachdem Sie alle Namespaces für die verwaltete Steuerungsebene geändert haben oder diese als Sicherung beibehalten. istiod
wird automatisch herunterskaliert, um weniger Ressourcen zu verwenden. Fahren Sie mit Alte Steuerungsebene löschen fort.
Falls Probleme auftreten, können Sie diese bestimmen und beheben. Dazu verwenden Sie die Informationen unter Probleme mit der verwalteten Steuerungsebene beheben und führen bei Bedarf ein Rollback auf die vorherige Version durch.
Alte Steuerungsebene löschen
Nachdem Sie die Installation abgeschlossen und bestätigt haben, dass alle Namespaces die von Google verwaltete Steuerungsebene verwenden, können Sie die alte Steuerungsebene löschen.
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
Wenn Sie istioctl kube-inject
anstelle der automatischen Einschleusung verwendet oder zusätzliche Gateways installiert haben, prüfen Sie die Messwerte für die Steuerungsebene und achten Sie darauf, dass die Anzahl der verbundenen Endpunkte null ist.
Rollback durchführen
Führen Sie die folgenden Schritte aus, um ein Rollback auf die vorherige Version der Steuerungsebene durchzuführen:
Die verwaltete Steuerungsebene wird automatisch auf null skaliert und verwendet keine Ressource, wenn sie nicht verwendet wird. Die geänderten Webhooks und die Bereitstellung bleiben erhalten und wirken sich nicht auf das Clusterverhalten aus.
Für das Gateway ist jetzt die Überarbeitung asm-managed
festgelegt. Führen Sie den Cloud Service Mesh-Installationsbefehl noch einmal aus, um ein Rollback durchzuführen. Dadurch wird das Gateway wieder bereitgestellt, das auf Ihre clusterinterne Steuerungsebene verweist:
kubectl -n istio-system rollout undo deploy istio-ingressgateway
Bei Erfolg können Sie diese Ausgabe erwarten:
deployment.apps/istio-ingressgateway rolled back
Cloud Service Mesh deinstallieren
Die verwaltete Steuerungsebene wird automatisch auf null skaliert, wenn sie nicht von Namespaces verwendet wird. Eine ausführliche Anleitung finden Sie unter Cloud Service Mesh deinstallieren.