Multi-Cluster-Gateways aktivieren


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-Gateways
  • gke-l7-regional-external-managed-mc für regionale externe Multi-Cluster-Gateways
  • gke-l7-rilb-mc für regionale interne Multi-Cluster-Gateways
  • gke-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 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 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 des GKE-Gateway-Controllers müssen Sie bei Multi-Cluster-Gateway-Bereitstellungen die folgenden Aufgaben ausgeführt haben:

  • 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:

    • Traffic Director 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.

Neben 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 als backendRefs von Multi-Cluster-Gateway unterstützt. Multi-Cluster-Gateway unterstützt nur ServiceImport als gültige backendRefs.

  • 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:

Die Clustertopologie, die die Beziehung zwischen Regionen, Flotte und Projekt zeigt

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.

  1. Erstellen Sie in us-west1 einen GKE-Cluster mit dem Namen gke-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.
  2. Erstellen Sie in us-west1 (oder in der Region des vorherigen Clusters) einen weiteren GKE-Cluster mit dem Namen gke-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
    
  3. Erstellen Sie einen GKE-Cluster mit dem Namen gke-east-1 in us-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.

  1. Rufen Sie die Anmeldedaten für die Cluster gke-west-1, gke-west-2 und gke-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.

  2. 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

  1. 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
    
  2. 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

  1. 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
    
  2. 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.

  3. 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.

  1. 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-a/memberships/gke-west-1 \
        --project=PROJECT_ID
    
  2. Erteilen Sie die vom Multi-Cluster-Gateway-Controller benötigten 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 und PROJECT_NUMBER durch die Projekt-ID und die Projektnummer, in der Ihre Cluster bereitgestellt werden.

  3. 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'
    
  4. 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.

  5. 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.
  • Multi-Cluster-Gateways können in folgenden Szenarien Load-Balancer-Ressourcen offenlegen:
    • Das Fleet-Ingress-Feature wird mit einem neuen Konfigurationscluster aktualisiert, der nicht alle Gateway-Ressourcen hat, 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.
  • 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