Multi-Cluster-Ingress einrichten

Auf dieser Seite wird gezeigt, wie Sie Multi-Cluster-Ingress so konfigurieren, dass der Traffic über mehrere GKE-Cluster (Google Kubernetes Engine) über verschiedene Regionen weitergeleitet wird.

Multi-Cluster-Ingress ist ein in der Cloud gehosteter Multi-Cluster-Ingress-Controller für GKE-Cluster, der das Deployment freigegebener Load-Balancing-Ressourcen in Clustern und Regionen unterstützt.

Weitere Informationen zu Multi-Cluster-Ingress finden Sie unter Multi-Cluster-Ingress. Sie erhalten außerdem Informationen zum Thema Ingress über mehrere Cluster hinweg bereitstellen.

Voraussetzungen

Multi-Cluster-Ingress wird unterstützt auf:

  • Nur auf GKE-Clustern.
  • Clustern im VPC-nativen Modus (Alias-IP). Weitere Informationen finden Sie unter VPC-nativen Cluster erstellen.
  • Clustern mit aktiviertem HTTP-Load Balancing, das standardmäßig aktiviert ist. Beachten Sie, dass Multi-Cluster-Ingress nur den externen HTTP(S)-Load-Balancer unterstützt.
  • Mit Workload Identity aktivierte GKE-Cluster.
  • Cloud SDK Version 290 oder höher (gcloud --version). Verwenden Sie den Befehl gcloud components update, um auf die neueste Version zu aktualisieren.

Hinweis

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

Mit den folgenden Methoden können Sie die gcloud-Einstellungen festlegen:

  • Verwenden Sie gcloud init, wenn Sie die Standardeinstellungen ansehen möchten.
  • Verwenden Sie gcloud config, um Ihre Projekt-ID, Zone und Region individuell festzulegen.

gcloud init verwenden

Wenn Sie die Fehlermeldung One of [--zone, --region] must be supplied: Please specify location erhalten, führen Sie diesen Abschnitt aus.

  1. Führen Sie gcloud init aus und folgen Sie der Anleitung:

    gcloud init

    Wenn Sie SSH auf einem Remote-Server verwenden, können Sie mit dem Flag --console-only verhindern, dass mit dem Befehl ein Browserfenster geöffnet wird:

    gcloud init --console-only
  2. Folgen Sie der Anleitung, um gcloud zur Verwendung Ihres Google Cloud-Kontos zu autorisieren.
  3. Erstellen Sie eine neue Konfiguration oder wählen Sie eine vorhandene aus.
  4. Wählen Sie ein Google Cloud-Projekt aus.
  5. Wählen Sie eine Compute Engine-Standardzone für zonale Cluster oder eine Region für regionale oder Autopilot-Cluster aus.

gcloud config verwenden

  • Legen Sie Ihre standardmäßige Projekt-ID fest:
    gcloud config set project PROJECT_ID
  • Wenn Sie mit zonalen Clustern arbeiten, legen Sie die Standardzone für Compute Engine fest:
    gcloud config set compute/zone COMPUTE_ZONE
  • Wenn Sie mit Autopilot oder regionalen Clustern arbeiten, legen Sie die Compute-Standardregion fest:
    gcloud config set compute/region COMPUTE_REGION
  • Aktualisieren Sie gcloud auf die neueste Version:
    gcloud components update

Übung zum Deployment

In dieser Übung stellen Sie Komponenten bereit und bereiten die Infrastruktur vor, die für die Verwendung von Multi-Cluster-Ingress erforderlich ist. Folgende Schritte sind erforderlich, um Multi-Cluster-Ingress in Ihrer Umgebung zu verwenden. Diese Schritte erfordern erhöhte Berechtigungen und sollten von einem GKE-Administrator ausgeführt werden.

Eine Zusammenfassung der Schritte in dieser Übung umfasst Folgendes:

  1. Aktivieren Sie die erforderlichen APIs.
  2. Stellen Sie GKE-Cluster zum Hosten von Arbeitslasten bereit.
  3. Gruppieren Sie die Cluster in einer Flotte.
  4. Konfigurieren Sie die Administratoreinstellungen für Multi-Cluster-Ingress.

Das folgende Diagramm zeigt, wie Ihre Umgebung nach Abschluss der Übung aussehen wird:

Grafik: Clustertopologie zeigt die Beziehungen zwischen Regionen, Flotte und Projekt

Im Diagramm gibt es zwei GKE-Cluster mit den Namen gke-us und gke-eu in den Zonen europe-west1 und us-central1. Die Cluster werden zu einem Flotte gruppiert, damit der Multi-Cluster-Ingress-Controller sie erkennen kann.

APIs aktivieren

Welche APIs Sie für Multi-Cluster-Ingress aktivieren, hängt von den von Ihnen genutzten Preisen für Multi-Cluster-Ingress ab.

Wenn Sie als einziges Anthos-Feature Multi-Cluster-Ingress verwenden, kann es kostengünstiger sein, einen eigenständigen Preis zu nutzen. Die Abrechnung Ihres Projekts hängt davon ab, ob die Anthos API (anthos.googleapis.com) aktiviert oder deaktiviert ist.

  • Wenn die Anthos API aktiviert ist, wird Ihr Projekt entsprechend der Anzahl der Cluster-vCPUs und der Anthos-Preise in Rechnung gestellt.
  • Wenn die Anthos API deaktiviert ist, wird Ihr Projekt entsprechend der Anzahl der Back-End-Multi-Cluster-Ingress-Pods in Ihrem Projekt abgerechnet.

Wenn Ihr Projekt andere Komponenten oder Features von Anthos in Google Cloud verwendet, sollten Sie die Anthos-Lizenzierung verwenden.

Sie können das Abrechnungsmodell für Multi-Cluster-Ingress jederzeit von eigenständig zu Anthos ändern oder umgekehrt. Dies hat keine Auswirkungen auf Ressourcen oder Traffic von Multi-Cluster-Ingress. Zum Ändern des Abrechnungsmodells aktivieren oder deaktivieren Sie die Anthos API wie in der folgenden Anleitung beschrieben.

Anthos-Preise

Führen Sie die folgenden Schritte aus, um die Anthos-Preise zu aktivieren:

  1. Aktivieren Sie die Anthos, Multi-Cluster-Ingress, Connect und GKE-APIs in Ihrem Projekt:

    gcloud services enable \
        anthos.googleapis.com \
        multiclusteringress.googleapis.com \
        gkehub.googleapis.com \
        container.googleapis.com \
        --project=PROJECT_ID
    

    Nachdem anthos.googleapis.com in Ihrem Projekt aktiviert ist, werden alle bei Connect registrierten Cluster gemäß den Anthos-Preisen abgerechnet.

Eigenständige Preise

Führen Sie die folgenden Schritte aus, um die eigenständige Preisgestaltung zu aktivieren:

  1. Prüfen Sie, ob die Anthos API in Ihrem Projekt deaktiviert ist:

    gcloud services list --project=PROJECT_ID | grep anthos.googleapis.com
    

    Ersetzen Sie PROJECT_ID durch die Projekt-ID, auf der die GKE-Cluster ausgeführt werden.

    Wenn die Ausgabe eine leere Antwort ist, ist die Anthos API in Ihrem Projekt deaktiviert und alle Multi-Cluster-Ingress-Ressourcen werden über eigenständige Preise abgerechnet.

  2. Aktivieren Sie in Ihrem Projekt die APIs für Multi-Cluster-Ingress, Connect und GKE:

    gcloud services enable \
        multiclusteringress.googleapis.com \
        gkehub.googleapis.com \
        container.googleapis.com \
        --project=PROJECT_ID
    

Cluster bereitstellen

In diesem Abschnitt erstellen Sie zwei GKE-Cluster mit den Namen gke-us und gke-eu in den Zonen europe-west1 und us-central1.

Wir empfehlen, Cluster mit aktivierter Workload Identity zu erstellen, da sich damit die Arbeitslasten in Ihrem Cluster authentifizieren können, ohne dass Sie Google Cloud-Dienstkontoschlüssel herunterladen, manuell rotieren oder verwalten müssen. Wenn Sie Ihre Cluster ohne aktivierte Workload Identity erstellen, müssen Sie Ihre Cluster mithilfe von Dienstkontoschlüsseln manuell in der Flotte registrieren.

Workload Identity

  1. Erstellen Sie den Cluster gke-us in der Zone us-central1-b:

    gcloud container clusters create gke-us \
        --zone=us-central1-b \
        --enable-ip-alias \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --release-channel=stable \
        --project=PROJECT_ID
    
  2. Erstellen Sie den Cluster gke-eu in der Zone europe-west1-b:

    gcloud container clusters create gke-eu \
        --zone=europe-west1-b \
        --enable-ip-alias \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --release-channel=stable \
        --project=PROJECT_ID
    

Manuell

  1. Erstellen Sie den Cluster gke-us in der Zone us-central1-b:

    gcloud container clusters create gke-us \
        --zone=us-central1-b \
        --enable-ip-alias \
        --release-channel=stable \
        --project=PROJECT_ID
    
  2. Erstellen Sie den Cluster gke-eu in der Zone europe-west1-b:

    gcloud container clusters create gke-eu \
        --zone=europe-west1-b \
        --enable-ip-alias \
        --release-channel=stable \
        --project=PROJECT_ID
    

Clusteranmeldedaten konfigurieren

In diesem Abschnitt konfigurieren Sie Clusteranmeldedaten mit einprägsamen Namen. Dies erleichtert den Wechsel zwischen Clustern, wenn Ressourcen auf mehreren Clustern bereitgestellt werden.

  1. Rufen Sie die Anmeldedaten für Ihre Cluster ab:

    gcloud container clusters get-credentials gke-us \
        --zone=us-central1-b \
        --project=PROJECT_ID
    
    gcloud container clusters get-credentials gke-eu \
        --zone=europe-west1-b \
        --project=PROJECT_ID
    

    Die Anmeldedaten werden lokal gespeichert, damit Sie mit dem 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:

    kubectl config rename-context gke_PROJECT_ID_us-central1-b_gke-us gke-us
    kubectl config rename-context gke_PROJECT_ID_europe-west1-b_gke-eu gke-eu
    

Cluster in einer Flotte registrieren

Sie müssen Ihre Cluster mithilfe von Connect für eine Flotte registrieren. Sie können Cluster manuell mit einem Google Cloud-Dienstkonto oder über Workload Identity registrieren.

Workload Identity

  1. Wenn Sie Workload Identity für Ihre Cluster aktiviert haben, führen Sie die folgenden Befehle aus, um Ihre Cluster zu registrieren:

    gcloud container hub memberships register gke-us \
        --gke-cluster us-central1-b/gke-us \
        --enable-workload-identity \
        --project=PROJECT_ID
    
    gcloud container hub memberships register gke-eu \
        --gke-cluster europe-west1-b/gke-eu \
        --enable-workload-identity \
        --project=PROJECT_ID
    
  2. Prüfen Sie, ob Ihre Cluster erfolgreich bei Connect registriert wurden:

    gcloud container hub memberships list --project=PROJECT_ID
    

    Die Ausgabe sieht etwa so aus:

    NAME                                  EXTERNAL_ID
    gke-us                                0375c958-38af-11ea-abe9-42010a800191
    gke-eu                                d3278b78-38ad-11ea-a846-42010a840114
    

Manuell

Wenn Sie Workload Identity für Ihre Cluster nicht aktiviert haben, führen Sie die folgenden Schritte aus, um die Cluster zu registrieren:

  1. Prüfen Sie, ob die Voraussetzungen für die Registrierung eines Clusters erfüllt sind.

  2. Erstellen Sie ein Dienstkonto und laden Sie die JSON-Datei des privaten Schlüssels für das Dienstkonto herunter.

  3. Registrieren Sie Ihre Cluster mithilfe der heruntergeladenen JSON-Datei mit dem privaten Schlüssel bei der Flotte.

    gcloud container hub memberships register gke-us \
         --gke-cluster us-central1-b/gke-us \
         --service-account-key-file=SERVICE_ACCOUNT_KEY_PATH \
         --project=PROJECT_ID
    
    gcloud container hub memberships register gke-eu \
        --gke-cluster europe-west1-b/gke-eu \
        --service-account-key-file=SERVICE_ACCOUNT_KEY_PATH \
        --project=PROJECT_ID
    

    Dabei gilt:

    • SERVICE_ACCOUNT_KEY_PATH: Der lokale Dateipfad zur JSON-Datei mit dem privaten Schlüssel des Dienstkontos, die Sie in den Registrierungsvoraussetzungen heruntergeladen haben. Dieser Dienstkontoschlüssel wird als Secret mit dem Namen creds-gcp im Namespace gke-connect gespeichert.
  4. Prüfen Sie, ob Ihre Cluster erfolgreich bei Connect registriert wurden:

    gcloud container hub memberships list --project=PROJECT_ID
    

    Die Ausgabe sieht etwa so aus:

    NAME                                  EXTERNAL_ID
    gke-us                                0375c958-38af-11ea-abe9-42010a800191
    gke-eu                                d3278b78-38ad-11ea-a846-42010a840114
    

Konfigurationscluster angeben

Der Konfigurationscluster ist ein GKE-Cluster, den Sie als zentralen Kontrollpunkt für Ingress in den Mitgliedsclustern festlegen. Im Gegensatz zu GKE Ingress befindet sich der Multi-Cluster-Ingress-Controller nicht in einem einzelnen Cluster. Dieser Controller ist ein von Google verwalteter Dienst, der Ressourcen im Konfigurationscluster überwacht. Dieser GKE-Cluster wird als Multi-Cluster-API-Server zum Speichern von Ressourcen wie MultiClusterIngress und MultiClusterService verwendet. Jeder Mitgliedscluster kann zu einem Konfigurationscluster werden. Es kann aber immer nur jeweils nur ein Konfigurationscluster vorhanden sein.

Weitere Informationen zu Konfigurationsclustern finden Sie unter Konfigurationsclusterdesign.

Wenn der Konfigurationscluster nicht aktiv ist oder nicht darauf zugegriffen werden kann, können die Objekte MultiClusterIngress und MultiClusterService in den Mitgliedsclustern nicht aktualisiert werden. Load-Balancer und Traffic können im Falle eines Ausfalls weiterhin unabhängig vom Konfigurationscluster funktionieren.

Die Aktivierung von Multi-Cluster-Ingress und die Auswahl des Konfigurationsclusters erfolgen im selben Schritt. Der GKE-Cluster, den Sie als Konfigurationscluster auswählen, muss bereits für eine Flotte registriert sein.

  1. Ermitteln Sie den URI des Clusters, den Sie als Konfigurationscluster angeben möchten:

    gcloud container hub memberships list
    

    Die Ausgabe sieht etwa so aus:

    NAME                                  EXTERNAL_ID
    gke-us                                0375c958-38af-11ea-abe9-42010a800191
    gke-eu                                d3278b78-38ad-11ea-a846-42010a840114
    
  2. Aktivieren Sie Multi-Cluster-Ingress und wählen Sie gke-us als Konfigurationscluster aus:

    gcloud beta container hub ingress enable \
      --config-membership=gke-us
    

    Beachten Sie, dass dieser Vorgang einige Minuten dauern kann, während das Bootstrapping für den Controller durchgeführt wird. Bei Erfolg sieht die Ausgabe etwa so aus:

    Waiting for Feature to be created...done.
    Waiting for controller to start...done.
    

    Wenn der Vorgang fehlschlägt, kommt es zu einer Zeitüberschreitung des Befehls wie hier:

    Waiting for controller to start...failed.
    ERROR: (gcloud.alpha.container.hub.ingress.enable) Controller did not start in 2 minutes. Please use the `describe` command to check Feature state for debugging information.
    

    Wenn im vorherigen Schritt ein Fehler aufgetreten ist, überprüfen Sie den Funktionsstatus. In diesem Status sollte der Fehler detaillierter beschrieben sein.

    gcloud beta container hub ingress describe
    

    Die Ausgabe sieht etwa so aus:

    createTime: '2021-02-04T14:10:25.102919191Z'
    membershipStates:
      projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
        state:
          code: ERROR
          description: '...is not a VPC-native GKE Cluster.'
          updateTime: '2021-08-10T13:58:50.298191306Z'
      projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
        state:
          code: OK
          updateTime: '2021-08-10T13:58:08.499505813Z'
    

    Weitere Informationen zu solchen Fehlermeldungen finden Sie unter Fehlerbehebung und Betrieb.

Freigegebene VPC bereitstellen

Multi-Cluster-Ingress kann für Cluster in einem freigegebenen VPC-Netzwerk bereitgestellt werden, alle enthaltenen Back-End-GKE-Cluster müssen sich jedoch im selben Projekt befinden. GKE-Cluster in verschiedenen Projekten mit derselben Cloud Load Balancing-VIP werden nicht unterstützt.

In nicht freigegebenen VPC-Netzwerken verwaltet der Multi-Cluster-Ingress-Controller Firewallregeln, um Systemdiagnosen von Cloud Load Balancing an Containerarbeitslasten zu ermöglichen.

In einem freigegebenen VPC-Netzwerk kann Ingress for Anthos diese Firewallregeln nicht verwalten. Hier wird die Firewall vom Hostprojekt verwaltet, auf das Dienstprojektadministratoren keinen Zugriff haben. Im zentralisierten Sicherheitsmodell von freigegebenen VPC-Netzwerken erfolgt die Netzwerksteuerung bewusst zentral. In freigegebenen VPC-Netzwerken muss ein Hostprojektadministrator die erforderlichen Firewallregeln für Cloud Load Balancing-Traffic im Namen von Multi-Cluster-Ingress manuell erstellen.

Der folgende Befehl zeigt die Firewallregel, die Sie erstellen müssen, wenn sich Ihre Cluster in einem freigegebenen VPC-Netzwerk befinden. Die Quellbereiche sind die Bereiche, über die Cloud Load Balancing Traffic an Back-Ends in Google Cloud sendet. Diese Regel muss für die operative Lebensdauer des Multi-Cluster-Ingress bestehen und kann nur entfernt werden, wenn das Multi-Cluster-Ingress oder Cloud Load Balancing zum GKE-Load-Balancing nicht mehr verwendet wird.

Wenn sich Ihre Cluster in einem freigegebenen VPC-Netzwerk befinden, erstellen Sie die Firewallregel:

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --project HOST_PROJECT \
    --network SHARED_VPC \
    --direction INGRESS \
    --allow tcp:0-65535 \
    --source-ranges 130.211.0.0/22,35.191.0.0/16

Dabei gilt:

  • FIREWALL_RULE_NAME: Name der neuen Firewallregel.
  • HOST_PROJECT ID des freigegebenen VPC-Hostprojekts.
  • SHARED_VPC: Name des freigegebenen VPC-Netzwerks.

Bekannte Probleme

InvalidValueError für das Feld config_membership

Ein bekanntes Problem verhindert, dass das gcloud-Befehlszeilentool mit Multi-Cluster-Ingress interagiert. Dieses Problem wurde in Version 346.0.0 eingeführt und in Version 348.0.0 behoben. Die Verwendung der gcloud-Tool-Versionen 346.0.0 und 347.0.0 mit Multi-Cluster-Ingress wird nicht empfohlen.

Ungültiger Wert für das Feld "resource"

Google Cloud Armor kann nicht mit Konfigurationsclustern mit Multi-Cluster-Ingress kommunizieren, die auf den folgenden GKE-Versionen ausgeführt werden:

  • 1.18.19-gke.1400 und höher
  • 1.19.10-gke.700 und höher
  • 1.20.6-gke.700 und höher

Wenn Sie eine Google Cloud Armor-Sicherheitsrichtlinie konfigurieren, wird die folgende Meldung angezeigt:

Invalid value for field 'resource': '{"securityPolicy": "global/securityPolicies/"}': The given policy does not exist

Um dieses Problem zu vermeiden, aktualisieren Sie Ihren Konfigurationscluster auf Version 1.21 oder höher oder aktualisieren Sie die BackendConfig CustomResourceDefinition mit dem folgenden Befehl:

kubectl patch crd backendconfigs.cloud.google.com --type='json' -p='[{"op": "replace", "path": "/spec/versions/1/schema/openAPIV3Schema/properties/spec/properties/securityPolicy", "value":{"properties": {"name": {"type": "string"}}, "required": ["name" ],"type": "object"}}]'

Nächste Schritte