Einrichtung mit der GKE Gateway API vorbereiten

Die in diesem Dokument beschriebene Konfiguration wird für Vorschaukunden unterstützt, wird jedoch für neue Cloud Service Mesh-Nutzer nicht empfohlen. Weitere Informationen finden Sie unter Cloud Service Mesh – Übersicht.

In dieser Anleitung wird beschrieben, wie Sie die Umgebung für die Verwendung der Google Kubernetes Engine Gateway API mit Cloud Service Mesh vorbereiten. Auf übergeordneter Ebene müssen Sie folgende Schritte ausführen:

  1. Erforderliche Google Cloud API-Dienste aktivieren
  2. GKE-Cluster bereitstellen
  3. IAM-Berechtigungen konfigurieren
  4. Erforderliche benutzerdefinierte Ressourcendefinitionen (CRDs) installieren
  5. Cluster bei einer Flotte registrieren
  6. [Optional] Multi-Cluster-Dienste aktivieren (Multi-Cluster-Service Discovery)
  7. Service Mesh aktivieren

Wenn Sie GKE nicht verwenden, verwenden Sie die Dienstrouting-APIs und erstellen Sie eine Mesh-Ressource.

Hinweise

Die Komponenten Ihrer Bereitstellung müssen folgende Anforderungen erfüllen:

  • GKE muss Version 1.20 oder höher sein.
  • Nur Datenebenen mit dem xDS Version 3 API und höher unterstützt.
    • Envoy-Mindestversion 1.20.0
    • gRPC-Bootstrap-Generator-Mindestversion 0.14.0
  • GKE-Cluster müssen sich im VPC-nativen Modus (Alias-IP) befinden.
  • Selbstverwaltete Kubernetes-Cluster in Compute Engine werden im Gegensatz zu GKE nicht unterstützt.
  • Alle zusätzlichen Einschränkungen für die Gateway-Funktionalität in GKE gelten für die Cloud Service Mesh-Integration in die GKE Gateway API.
  • Das Dienstkonto für Ihre GKE-Knoten und -Pods muss die Berechtigung für den Zugriff auf die Traffic Director API haben. Weitere Informationen zu den erforderlichen Berechtigungen finden Sie unter Dienstkonto für den Zugriff auf die Traffic Director API aktivieren.
  • Es gelten Limits für Ressourcennutzung pro Projekt und für das Backend-Dienstkontingent.

Erforderliche Google Cloud API-Dienste aktivieren

  1. Führen Sie den folgenden Befehl aus, um die erforderlichen APIs zu aktivieren, falls sie in Ihrem Projekt noch nicht aktiviert sind:

    gcloud services enable --project=PROJECT_ID \
      container.googleapis.com \
      gkehub.googleapis.com \
      multiclusteringress.googleapis.com \
      trafficdirector.googleapis.com \
      networkservices.googleapis.com
    
  2. Wenn Sie mehrere Cluster in Ihre Flotte aufnehmen möchten, aktivieren Sie die multiclusterservicediscovery API:

    gcloud services enable --project=PROJECT_ID \
       multiclusterservicediscovery.googleapis.com
    

GKE-Cluster bereitstellen

Folgen Sie dieser Anleitung, um einen GKE-Cluster bereitzustellen.

  1. Erstellen Sie einen GKE-Cluster mit dem Namen gke-1 in der Zone us-west1-a.

    gcloud container clusters create gke-1 \
      --zone=us-west1-a \
      --enable-ip-alias \
      --workload-pool=PROJECT_ID.svc.id.goog \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --enable-mesh-certificates \
      --release-channel=regular \
      --project=PROJECT_ID
    
    • --enable-ip-alias: Dieses Flag erstellt einen VPC-nativen Cluster und macht die IP-Adressen der Pods im VPC-Netzwerk routingfähig.
    • --workload-pool: Mit diesem Flag kann der Cluster am Workload Identity-Pool des Projekts beteiligt werden.
    • --scopes: Dieses Flag gibt die OAuth-Bereiche an, die den Clusterknoten zugewiesen sind.
    • --release-channel: Dieses Flag gibt den regular-Channel an.
    • --enable-mesh-certificates: Dieses Flag aktiviert die automatische mTLS-Funktion, falls sie möglicherweise in Zukunft verfügbar wird.
  2. Rufen Sie die Clusteranmeldedaten ab:

    gcloud container clusters get-credentials gke-1 --zone=us-west1-a
    
  3. Benennen Sie den Clusterkontext um:

    kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-1 gke-1
    

IAM-Berechtigungen für die Datenebene konfigurieren

Für diese Demobereitstellung weisen Sie allen authentifizierten Nutzern, einschließlich aller Dienstkonten, im GKE-Cluster die Rolle „Cloud Service Mesh-Client“ (roles/trafficdirector.client) zu. Diese IAM-Rolle ist erforderlich, um Cloud Service Mesh-Clients in der Datenebene wie Envoys zu autorisieren, die Konfiguration von Cloud Service Mesh zu erhalten.

Wenn Sie die Clientrolle nicht allen authentifizierten Nutzern zuweisen möchten, sondern die Rolle auf Dienstkonten beschränken möchten, lesen Sie den GKE-Workload Identity-Leitfaden, um ein spezielles Kubernetes-Dienstkonto mit der Rolle roles/trafficdirector.client für Ihre Dienste einzurichten.

  1. Weisen Sie den Dienstkonten die Rolle client zu:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \
      --role "roles/trafficdirector.client"
    

Erforderliche benutzerdefinierte Ressourcendefinitionen installieren

  1. Installieren Sie die benutzerdefinierten Ressourcendefinitionen (CRDs), die für die Verwendung der Gateway API mit Cloud Service Mesh:

    kubectl apply -k "github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v0.6.0"
    
    kubectl kustomize "https://github.com/GoogleCloudPlatform/gke-networking-recipes.git/gateway-api/config/mesh/crd" \
    | kubectl apply -f -
    
  2. Prüfen Sie mit dem folgenden Befehl, ob die erforderlichen CRDs automatisch im Cluster installiert werden:

    kubectl get crds
    

    In der Ausgabe werden die folgenden CRDs und andere, die nicht mit der Gateway API zusammenhängen, mit unterschiedlichem Erstellungsdatum aufgeführt:

    NAME                                             CREATED AT
    gatewayclasses.gateway.networking.k8s.io                           2023-08-08T05:29:03Z
    gateways.gateway.networking.k8s.io                                 2023-08-08T05:29:03Z
    grpcroutes.gateway.networking.k8s.io                               2023-08-08T05:29:03Z
    httproutes.gateway.networking.k8s.io                               2023-08-08T05:29:03Z
    referencegrants.gateway.networking.k8s.io                          2023-08-08T05:29:04Z
    tcproutes.gateway.networking.k8s.io                                2023-08-08T05:29:04Z
    tdgrpcroutes.net.gke.io                                            2023-08-08T05:29:23Z
    tdmeshes.net.gke.io                                                2023-08-08T05:29:23Z
    tlsroutes.gateway.networking.k8s.io                                2023-08-08T05:29:05Z
    udproutes.gateway.networking.k8s.io                                2023-08-08T05:29:05Z
    

Die benutzerdefinierten Ressourcen tdmeshes.net.gke.io und tdgrpcroutes.net.gke.io sind installiert aus dem vorherigen Schritt.

Die CRDs, die Teil der net.gke.io API-Gruppe sind, gelten nur für GKE. Diese Ressourcen sind nicht Teil der OSS Gateway API-Implementierung, die sich in der networking.k8s.io API-Gruppe befindet.

Cluster bei einer Flotte registrieren

Nachdem der Cluster erfolgreich erstellt wurde, müssen Sie den Cluster bei einer Flotte registrieren. Wenn Sie Ihren Cluster bei einer Flotte registrieren, können Sie Features für den registrierten Cluster selektiv aktivieren.

  1. Registrieren Sie den Cluster in der Flotte:

    gcloud container hub memberships register gke-1 \
      --gke-cluster us-west1-a/gke-1 \
      --location global \
      --project=PROJECT_ID
    
  2. Prüfen Sie, ob der Cluster bei der Flotte registriert ist:

    gcloud container hub memberships list --project=PROJECT_ID
    

    Die Ausgabe sieht in etwa so aus:

    NAME   EXTERNAL_ID
    gke-1  657e835d-3b6b-4bc5-9283-99d2da8c2e1b
    

(Optional) Multi-Cluster-Diensterkennung aktivieren

Mit der Funktion „Multi-Cluster Service Discovery“ können Sie Cluster exportieren lokale Dienste für alle bei der Flotte registrierten Cluster. Dieser Schritt ist optional, wenn Sie nicht mehr als einen Cluster in Ihrer Flotte verwenden möchten.

  1. Aktivieren Sie Multi-Cluster Service Discovery:

    gcloud container hub multi-cluster-services enable \
      --project PROJECT_ID
    
  2. Gewähren Sie die erforderliche IAM-Rolle (Identity and Access Management) für Erkennung von Multi-Cluster-Diensten:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-mcs/gke-mcs-importer]" \
      --role "roles/compute.networkViewer"
    
  3. Prüfen Sie, ob Multi-Cluster Service Discovery für den registrierten Cluster aktiviert ist. Es kann einige Minuten dauern, bis alle Cluster angezeigt werden:

    gcloud container hub multi-cluster-services describe --project=PROJECT_ID
    

    Sie sollten die Mitgliedschaften für gke-1 sehen, die in etwa so aussehen:

    createTime: '2021-04-02T19:34:57.832055223Z'
    membershipStates
      projects/PROJECT_NUM/locations/global/memberships/gke-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2021-05-27T11:03:07.770208064Z'
    name: projects/PROJECT_NUM/locations/global/features/multiclusterservicediscovery
    resourceState:
      state: ACTIVE
    spec: {}
    updateTime: '2021-04-02T19:34:58.983512446Z'
    

GKE-Service-Mesh von Cloud Service Mesh aktivieren

In diesem Abschnitt aktivieren Sie das Service Mesh.

  1. Aktivieren Sie das Cloud Service Mesh-GKE-Service-Mesh in dem Cluster, den Sie bei Ihrer Flotte registriert haben:

    gcloud container hub ingress enable \
    --config-membership=projects/PROJECT_ID/locations/global/memberships/gke-1 \
      --project=PROJECT_ID
    
  2. Prüfen Sie, ob das Feature aktiviert ist:

    gcloud container hub ingress describe --project=PROJECT_ID
    

    Die Ausgabe sollte in etwa so aussehen:

    createTime: '2021-05-26T13:27:37.460383111Z'
    membershipStates:
      projects/PROJECT_NUM/locations/global/memberships/gke-1:
        state:
          code: OK
          updateTime: '2021-05-27T15:08:19.397896080Z'
    resourceState:
     state: ACTIVE
    spec:
      multiclusteringress:
        configMembership: projects/PROJECT_ID/locations/global/memberships/gke-1
    state:
      state:
        code: OK
        description: Ready to use
        updateTime: '2021-05-26T13:27:37.899549111Z'
    updateTime: '2021-05-27T15:08:19.397895711Z'
    
  3. Erteilen Sie die folgenden IAM-Rollen (Identity and Access Management), die der Gateway API-Controller benötigt:

    export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value (projectNumber)")
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \
      --role "roles/container.developer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \
      --role "roles/compute.networkAdmin"
    

Nächste Schritte

Lesen Sie die folgenden Anleitungen, um eine Beispielbereitstellung einzurichten: