Einrichtung mit der GKE Gateway API vorbereiten

In dieser Anleitung wird beschrieben, wie Sie die Umgebung für die Verwendung der Google Kubernetes Engine Gateway API mit Traffic Director 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 Service Routing 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.
  • Es werden nur Datenebenen mit der 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 Traffic Director-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 das automatische mTLS-Feature von Traffic Director, falls es 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 Demo-Bereitstellung weisen Sie allen authentifizierten Nutzern, einschließlich allen Dienstkonten, im GKE-Cluster die Traffic Director-Clientrolle roles/trafficdirector.client zu. Diese IAM-Rolle ist erforderlich, um Traffic Director-Clients in der Datenebene zu autorisieren, z. B. Envoy, um Konfiguration von Traffic Director zu erhalten.

Wenn Sie die Clientrolle nicht allen authentifizierten Nutzern zuweisen und die Rolle lieber auf Dienstkonten beschränken möchten, lesen Sie den GKE-Leitfaden zur Workload Identity, um ein spezialisiertes 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 Traffic Director erforderlich sind:

    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 werden im vorherigen Schritt installiert.

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) Erkennung von Multi-Cluster-Diensten aktivieren

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

  1. Aktivieren Sie die Multi-Cluster Service Discovery:

    gcloud container hub multi-cluster-services enable \
      --project PROJECT_ID
    
  2. Weisen Sie die IAM-Rolle (Identity and Access Management) zu, die für Multi-Cluster Service Discovery erforderlich ist:

    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 die 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'
    

Traffic Director-GKE-Service-Mesh aktivieren

In diesem Abschnitt aktivieren Sie das Service Mesh.

  1. Aktivieren Sie das Traffic Director-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: