Auf dieser Seite erfahren Sie, wie Sie den Multi-Cluster-GKE-Gateway-Controller aktivieren, einen von Google gehosteten Controller, der externe und interne Load Balancer für Ihre GKE-Cluster bereitstellt. Informationen zur Verwendung von Gateway-Ressourcen für das Load-Balancing von Containern finden Sie unter Gateways bereitstellen oder Multi-Cluster-Gateways bereitstellen.
Der Multi-Cluster GKE Gateway Controller installiert die folgenden Multi-Cluster-GatewayClasses in Ihren Clustern:
gke-l7-global-external-managed-mc
für globale externe Multi-Cluster-Gatewaysgke-l7-regional-external-managed-mc
für regionale externe Multi-Clustergke-l7-cross-regional-internal-managed-mc
für regionenübergreifende interne Multi-Cluster-Gatewaysgke-l7-rilb-mc
für regionale interne Multi-Cluster-Gatewaysgke-l7-gxlb-mc
für globale externe Classic-Multi-Cluster-Gateways
Weitere Informationen zu den Funktionen der verschiedenen GatewayClasses in GKE.
Preise
Alle über die Gateway-Controller bereitgestellten Compute Engine-Ressourcen werden über das Projekt abgerechnet, in dem sich die GKE-Cluster befinden. Der Single-Cluster-Gateway-Controller wird kostenlos als Teil der GKE-Standard- und Autopilot-Preise angeboten. Die Preise für Multi-Cluster-Gateways werden auf der Seite Preise für Multi-Cluster-Gateways und Multi-Cluster-Ingress beschrieben.
Hinweise
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl
gcloud components update
ab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
Anforderungen für GKE Gateway Controller
- Die Gateway API wird nur in VPC-nativen Clustern unterstützt.
- Wenn Sie die internen GatewayClasses verwenden, müssen Sie ein Nur-Proxy-Subnetz aktivieren.
- Für den Cluster muss das Add-on
HttpLoadBalancing
aktiviert sein. - Wenn Sie Istio verwenden, müssen Sie Istio auf eine der folgenden Versionen aktualisieren:
- 1.15.2 oder höher
- 1.14.5 oder höher
- 1.13.9 oder höher
- Wenn Sie eine freigegebene VPC verwenden, müssen Sie dem GKE-Dienstkonto für das Dienstprojekt im Hostprojekt die Rolle
Compute Network User
zuweisen.
Multi-Cluster-Gateway-Anforderungen
Zusätzlich zu den Anforderungen für den GKE Gateway Controller müssen Sie für Gateway-Bereitstellungen in mehreren Clustern die folgenden Aufgaben ausführen:
- Aktivieren Sie die Gateway API in Ihrem Konfigurationscluster.
- Aktivieren Sie in Ihren Clustern die Workload Identity Federation for GKE.
- Erfüllen Sie die allgemeinen Voraussetzungen für die Flotte für die Registrierung Ihrer Cluster ab.
Aktivieren Sie in Ihrem Projekt die folgenden für Multi-Cluster-Gateways erforderlichen APIs:
- Cloud Service Mesh API
- Multi-Cluster Services API
- Multi Cluster Ingress API
Führen Sie den folgenden Befehl aus, um die erforderlichen APIs zu aktivieren, falls noch nicht geschehen:
gcloud services enable \ trafficdirector.googleapis.com \ multiclusterservicediscovery.googleapis.com \ multiclusteringress.googleapis.com \ --project=PROJECT_ID
Ersetzen Sie
PROJECT_ID
durch die Projekt-ID, auf der die GKE-Cluster ausgeführt werden.
Limits und Einschränkungen
Dieselben Einschränkungen und bekannten Probleme für Single-Cluster-Gateways gelten auch für Multi-Cluster-Gateways.
Zusätzlich zu den Einschränkungen für Single-Cluster-Gateways gelten die folgenden Einschränkungen für Multi-Cluster-Gateways:
Das Load Balancing für Back-Ends in verschiedenen Regionen wird von der regionalen internen GatewayClass
gke-l7-rilb-mc
nicht unterstützt. Weitere Informationen zu den verschiedenen Features, die bei jeder GatewayClass unterstützt werden, finden Sie unter GatewayClass-Funktionen.Ein
Service
wird nicht alsbackendRefs
von Multi-Cluster-Gateway unterstützt. Multi-Cluster-Gateway unterstützt nurServiceImport
als gültigesbackendRefs
.Alle Cluster in der Flotte müssen im Flotten-Hostprojekt vorhanden sein.
Projektübergreifendes Load Balancing wird nicht unterstützt. Alle Cluster (Konfigurationscluster und Zielcluster), die mit demselben Multi-Cluster-Gateway verknüpft sind, müssen im selben Host- oder Dienstprojekt mit freigegebener VPC bereitgestellt sein. Weitere Informationen zu unterstützten Topologien mit freigegebener VPC für Multi-Cluster-Gateway finden Sie unter Multi-Cluster-Gateway mit freigegebener VPC verwenden.
VPC-übergreifendes Load Balancing wird nicht unterstützt. Alle Cluster (Konfigurationscluster und Zielcluster), die mit demselben Multi-Cluster-Gateway verknüpft sind, müssen in derselben VPC bereitgestellt sein.
Multi-Cluster-Gateway hängt von MCS für die Verarbeitung der clusterübergreifenden Diensterkennung ab. Daher unterliegen Dienste, die Multi-Cluster-Gateway-Bereitstellungen machen, allen Multi-Cluster-Dienstanforderungen.
Bei Multi-Cluster-Gateways können Load-Balancer-Ressourcen in den folgenden Szenarien verloren gehen:
- Das Fleet-Ingress-Feature wird mit einem neuen Konfigurationscluster aktualisiert, der nicht alle
Gateway
-Ressourcen enthält, die im aktuellen Konfigurationscluster vorhanden sind. - Das Fleet-Ingress-Feature ist deaktiviert, während
Gateway
-Ressourcen, die auf einen Multi-Cluster-GatewayClass
verweisen, im Konfigurationscluster vorhanden sind.
- Das Fleet-Ingress-Feature wird mit einem neuen Konfigurationscluster aktualisiert, der nicht alle
Multi-Cluster-Gateway wird als globaler Dienst ausgeführt. Wenn der Multi-Cluster-Gateway-Controller einen Ausfall der regionalen Flotten-Steuerungsebene (Hub) feststellt, reagiert er mit einem statischen Ausfall und nimmt keine weiteren Load-Balancer-Änderungen vor, bis die Region wieder funktionsfähig ist.
Kontingente
GKE-Gateway verwendet Cloud Load Balancing-Kontingente, um die Anzahl der Ressourcen zu begrenzen, die der Gateway-Controller zum Verwalten von eingehendem Traffic erstellen kann, der an GKE-Cluster weitergeleitet wird.
Umgebung für Multi-Cluster-Gateways einrichten
Es sind mehrere GKE-Cluster erforderlich, um die Beispiele unter Multi-Cluster-Gateways bereitstellen durchzuspielen. Alle Cluster sind bei derselben Flotte registriert, sodass Multi-Cluster-Gateways und -Dienste überall in ihnen ausgeführt werden können.
Mit folgenden Schritten werden drei GKE-Cluster in zwei verschiedenen Regionen in Ihrem Projekt bereitgestellt:
us-west1-a/gke-west-1
us-west1-a/gke-west-2
us-east1-b/gke-east-1
Dadurch wird folgende Clustertopologie erstellt:
Diese GKE-Cluster zeigen das multiregionale Load-Balancing und die Blau/Grün-Multi-Cluster-Trafficaufteilung mit externen und internen Gateways.
Cluster bereitstellen
In diesen Schritten stellen Sie drei GKE-Cluster in den Regionen us-east1
und us-west1
bereit.
Cluster werden in der Flotte Ihres Projekts registriert. Wenn Sie Ihre GKE-Cluster in einer Flotte gruppieren, können sie von einem Multi-Cluster-Gateway ausgewählt werden.
Erstellen Sie in
us-west1
einen GKE-Cluster mit dem Namengke-west-1
:gcloud container clusters create gke-west-1 \ --gateway-api=standard \ --location=us-west1-a \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --enable-fleet \ --project=PROJECT_ID
Dabei gilt:
PROJECT_ID
ist die ID des Projekts, in dem Ihre GKE-Cluster ausgeführt werden.VERSION
ist die GKE-Version 1.24 oder höher.
Erstellen Sie in
us-west1
(oder in der Region des vorherigen Clusters) einen weiteren GKE-Cluster mit dem Namengke-west-2
:gcloud container clusters create gke-west-2 \ --gateway-api=standard \ --location=us-west1-a \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --enable-fleet \ --project=PROJECT_ID
Erstellen Sie einen GKE-Cluster mit dem Namen
gke-east-1
inus-east1
(oder einer anderen Region als der vorherigen)gcloud container clusters create gke-east-1 \ --gateway-api=standard \ --location=us-east1-b \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --enable-fleet \ --project=PROJECT_ID
Prüfen Sie, ob die Cluster erfolgreich für die Flotte registriert wurden:
gcloud container fleet memberships list --project=PROJECT_ID
Die Ausgabe sollte in etwa so aussehen:
NAME EXTERNAL_ID LOCATION gke-east-1 45a80b37-4b00-49aa-a68b-b430fce1e3f0 us-east1 gke-west-2 ac7087a5-f5ee-401e-b430-57f3af141239 us-west1 gke-west-1 549efe3a-b18e-4eb9-8796-e50b7967cde2 us-west1
Clusteranmeldedaten konfigurieren
In diesem Schritt werden Clusteranmeldedaten mit einsetzbaren Namen konfiguriert. Dies erleichtert den Wechsel zwischen Clustern, wenn Ressourcen auf mehreren Clustern bereitgestellt werden.
Rufen Sie die Anmeldedaten für die Cluster
gke-west-1
,gke-west-2
undgke-east-1
ab:gcloud container clusters get-credentials gke-west-1 --location=us-west1-a --project=PROJECT_ID gcloud container clusters get-credentials gke-west-2 --location=us-west1-a --project=PROJECT_ID gcloud container clusters get-credentials gke-east-1 --location=us-east1-b --project=PROJECT_ID
Dadurch werden die Anmeldedaten lokal gespeichert, sodass Sie mit Ihrem kubectl-Client auf die Cluster-API-Server zugreifen können. Standardmäßig wird für die Anmeldedaten ein automatisch generierter Name erstellt.
Benennen Sie die Clusterkontexte um, damit sie später leichter referenziert werden können:
kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-1 gke-west-1 kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-2 gke-west-2 kubectl config rename-context gke_PROJECT_ID_us-east1-b_gke-east-1 gke-east-1
Ersetzen Sie
PROJECT_ID
durch die Projekt-ID, unter der Ihre Cluster bereitgestellt sind.
Multi-Cluster-Dienste in der Flotte aktivieren
Aktivieren Sie Multi-Cluster-Dienste in Ihrer Flotte für die registrierten Cluster. Dadurch kann der MCS-Controller für die drei bei der Flotte registrierten Cluster aktiviert werden, damit er Dienste überwachen und exportieren kann.
gcloud container fleet multi-cluster-services enable \ --project PROJECT_ID
Erteilen Sie die vom MCS-Controller geforderten IAM-Berechtigungen (Identity and Access Management):
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-mcs/gke-mcs-importer]" \ --role "roles/compute.networkViewer" \ --project=PROJECT_ID
Ersetzen Sie
PROJECT_ID
durch die Projekt-ID, unter der Ihre Cluster bereitgestellt sind.Prüfen Sie, ob MCS für die registrierten Cluster aktiviert ist. Die Mitgliedschaften für die drei registrierten Cluster werden angezeigt. Es kann einige Minuten dauern, bis alle Cluster angezeigt werden.
gcloud container fleet multi-cluster-services describe --project=PROJECT_ID
Die Ausgabe sieht in etwa so aus:
createTime: '2023-10-12T06:14:33.466903587Z' membershipStates: projects/441323991697/locations/us-east1/memberships/gke-east-1: state: code: OK description: Firewall successfully updated updateTime: '2023-10-12T06:15:28.395318091Z' projects/441323991697/locations/us-west1/memberships/gke-west-1: state: code: OK description: Firewall successfully updated updateTime: '2023-10-12T06:15:30.534594027Z' projects/441323991697/locations/us-west1/memberships/gke-west-2: state: code: OK description: Firewall successfully updated updateTime: '2023-10-12T06:15:29.110582109Z' name: projects/pierre-louis-playground/locations/global/features/multiclusterservicediscovery resourceState: state: ACTIVE spec: {} updateTime: '2023-10-12T06:15:31.027276757Z'
Multi-Cluster-Gateway in der Flotte aktivieren
Der Multi-Cluster-GKE-Gateway-Controller steuert die Bereitstellung von Multi-Cluster-Gateways.
Beim Aktivieren des Multi-Cluster-Gateway-Controllers müssen Sie Ihren Konfigurationscluster auswählen. Der Konfigurationscluster ist der GKE-Cluster, in dem die Gateway-Ressourcen (Gateway, Routen und Richtlinien) bereitgestellt werden. An diesem zentralen Ort wird das Routing für Ihre Cluster gesteuert. Unter Clusterdesign konfigurieren können Sie entscheiden, welchen Cluster Sie als Konfigurationscluster auswählen möchten.
Aktivieren Sie das Multi-Cluster-Gateway und geben Sie den Konfigurationscluster in der Flotte an. Beachten Sie, dass Sie den Konfigurationscluster jederzeit aktualisieren können. In diesem Beispiel wird
gke-west-1
als Konfigurationscluster angegeben, auf dem die Ressourcen für Multi-Cluster-Gateways gehostet werden.gcloud container fleet ingress enable \ --config-membership=projects/PROJECT_ID/locations/us-west1/memberships/gke-west-1 \ --project=PROJECT_ID
Erteilen Sie die vom Multi-Cluster-Gateway-Controller geforderten IAM-Berechtigungen (Identity and Access Management):
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \ --role "roles/container.admin" \ --project=PROJECT_ID
Ersetzen Sie
PROJECT_ID
undPROJECT_NUMBER
durch die Projekt-ID und die Projektnummer, in der Ihre Cluster bereitgestellt werden.Prüfen Sie, ob der GKE-Gateway-Controller für Ihre Flotte aktiviert ist:
gcloud container fleet ingress describe --project=PROJECT_ID
Die Ausgabe sieht in etwa so aus:
createTime: '2023-10-12T06:23:06.732858524Z' membershipStates: projects/441323991697/locations/us-east1/memberships/gke-east-1: state: code: OK updateTime: '2023-10-12T06:30:08.815839024Z' projects/441323991697/locations/us-west1/memberships/gke-west-1: state: code: OK updateTime: '2023-10-12T06:30:08.815837031Z' projects/441323991697/locations/us-west1/memberships/gke-west-2: state: code: OK updateTime: '2023-10-12T06:30:08.815840985Z' name: projects/pierre-louis-playground/locations/global/features/multiclusteringress resourceState: state: ACTIVE spec: multiclusteringress: configMembership: projects/pierre-louis-playground/locations/us-west1/memberships/gke-west-1 state: state: code: OK description: Ready to use updateTime: '2023-10-12T06:23:51.317464415Z' updateTime: '2023-10-12T06:30:09.439319551Z'
Prüfen Sie, ob die GatewayClasses in Ihrem Konfigurationscluster vorhanden sind:
kubectl get gatewayclasses --context=gke-west-1
Die Ausgabe sieht in etwa so aus:
NAME CONTROLLER ACCEPTED AGE gke-l7-global-external-managed networking.gke.io/gateway True 78m gke-l7-global-external-managed-mc networking.gke.io/gateway True 4m22s gke-l7-gxlb networking.gke.io/gateway True 78m gke-l7-gxlb-mc networking.gke.io/gateway True 4m23s gke-l7-regional-external-managed networking.gke.io/gateway True 78m gke-l7-regional-external-managed-mc networking.gke.io/gateway True 4m22s gke-l7-rilb networking.gke.io/gateway True 78m gke-l7-rilb-mc networking.gke.io/gateway True 4m22s
Diese Ausgabe enthält die GatewayClass gke-l7-global-external-managed-mc, gke-l7-regional-external-managed-mc, gke-l7-gxlb-mc für externe Multi-Cluster-Gateways und die GatewayClass gke-l7-rilb-mc für interne Multi-Cluster-Gateways.
Wechseln Sie den kubectl-Kontext zum Konfigurationscluster:
kubectl config use-context gke-west-1
Sie können jetzt Multi-Cluster-Gateways im Konfigurationscluster bereitstellen.
Fehlerbehebung
In diesem Abschnitt wird beschrieben, wie Sie Probleme im Zusammenhang mit der Aktivierung des Multi-Cluster Gateway Controllers beheben.
GatewayClasses sind im Konfigurationscluster nicht verfügbar
Der folgende Fehler kann auftreten, wenn Sie den Befehl kubectl get gatewayclasses
ausführen:
error: the server doesn't have a resource type "gatewayclasses"
Um dieses Problem zu beheben, installieren Sie die Gateway API in Ihrem Cluster:
gcloud container clusters update CLUSTER_NAME \
--gateway-api=standard \
--location=CONTROL_PLANE_LOCATION
Dabei gilt:
CLUSTER_NAME
: Der Name Ihres Clusters.CONTROL_PLANE_LOCATION
: Der Compute Engine-Standort der Steuerungsebene des Clusters. Geben Sie für regionale Cluster eine Region und für zonale Cluster eine Zone an.
Multi-Cluster-Gateway-Controller wird nicht gestartet
Wenn Sie die Gateway API im Konfigurationscluster aktivieren und die CRDs nach der Aktivierung des Fleet-Ingress-Features einfügen, kann der Multi-Cluster-Gateway-Controller möglicherweise nicht gestartet werden.
Sie können dieses Problem vermeiden, indem Sie die Gateway API aktivieren, bevor Sie Fleet-Ingress aktivieren. Wenn Sie den Flottenzugang jedoch bereits aktiviert haben, können Sie das Problem beheben, indem Sie den Flottenzugang deaktivieren und dann wieder aktivieren:
Flotten-Ingress deaktivieren:
gcloud container fleet ingress disable
Flotten-Ingress aktivieren:
gcloud container fleet ingress enable \ --config-membership=CONFIG_MEMBERSHIP \ --project=PROJECT_ID
Ersetzen Sie Folgendes:
- CONFIG_MEMBERSHIP: Die ID der Mitgliedschaft oder die voll qualifizierte Kennzeichnung für die Mitgliedschaft. Beispiel:
projects/PROJECT_ID/locations/us-west1/memberships/gke-west-1
- PROJECT_ID ist die ID des Projekts, in dem Ihre GKE-Cluster ausgeführt werden.
Nächste Schritte
- Informationen zum Bereitstellen von Multi-Cluster-Load-Balancing finden Sie unter Multi-Cluster-Gateways bereitstellen.
- Weitere Informationen zum Gateway-Controller finden Sie unter Gateway.