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-Cluster-Gatewaysgke-l7-rilb-mc
für regionale interne Multi-Cluster-Gatewaysgke-l7-gxlb-mc
für globale externe klassische 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-Ingress und -Gateways beschrieben.
Hinweise
Führen Sie die folgenden Schritte durch, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe 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
gcloud components update
ab.
Anforderungen für GKE Gateway Controller
- Für Standard, GKE-Version 1.24 oder höher
- Für Autopilot, GKE-Version 1.26 oder höher.
- Google Cloud CLI-Version 407.0.0 oder höher.
- 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 GKE Gateway Controller müssen Sie für Multi-Cluster-Gateway-Bereitstellungen 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ütztServiceImport
nur als gültigenbackendRefs
.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.
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.
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.
Erstellen Sie in
us-west1
einen GKE-Cluster mit dem Namengke-west-1
:gcloud container clusters create gke-west-1 \ --gateway-api=standard \ --zone=us-west1-a \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --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 \ --zone=us-west1-a \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --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 \ --zone=us-east1-b \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --project=PROJECT_ID
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 --zone=us-west1-a --project=PROJECT_ID gcloud container clusters get-credentials gke-west-2 --zone=us-west1-a --project=PROJECT_ID gcloud container clusters get-credentials gke-east-1 --zone=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.
Cluster in der Flotte registrieren
Nachdem alle drei Cluster erfolgreich erstellt wurden, müssen Sie diese Cluster für die Flotte Ihres Projekts registrieren. Wenn Sie Ihre GKE-Cluster in einer Flotte gruppieren, können sie von einem Multi-Cluster-Gateway ausgewählt werden.
gcloud container fleet memberships register gke-west-1 \ --gke-cluster us-west1-a/gke-west-1 \ --enable-workload-identity \ --project=PROJECT_ID gcloud container fleet memberships register gke-west-2 \ --gke-cluster us-west1-a/gke-west-2 \ --enable-workload-identity \ --project=PROJECT_ID gcloud container fleet memberships register gke-east-1 \ --gke-cluster us-east1-b/gke-east-1 \ --enable-workload-identity \ --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
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 \
--region=COMPUTE_REGION
Dabei gilt:
CLUSTER_NAME
: Der Name Ihres Clusters.COMPUTE_REGION
ist die Compute Engine-Region des Clusters. Verwenden Sie für zonale Cluster--zone=COMPUTE_ZONE
.
Bekannte Probleme
- Es gibt ein bekanntes Problem mit dem Multi-Cluster-Gateway-Controller, bei dem er möglicherweise nicht gestartet wird. Aktivieren Sie die Gateway API im Konfigurationscluster und fügen Sie die CRDs ein, bevor das Fleet-Ingress-Feature aktiviert wird.
- In Multi-Cluster-Gateways können in folgenden Szenarien Load-Balancer-Ressourcen offengelegt werden:
- Das Fleet-Ingress-Feature wird mit einem neuen Konfigurationscluster aktualisiert, der nicht alle
Gateway
-Ressourcen im aktuellen Konfigurationscluster hat. - 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.
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.