Einrichtung mit der GKE Gateway API vorbereiten
Die in diesem Dokument beschriebene Konfiguration wird für Vorschaukunden unterstützt, wir empfehlen sie jedoch nicht für neue Cloud Service Mesh-Nutzer. 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:
- Erforderliche Google Cloud API-Dienste aktivieren
- GKE-Cluster bereitstellen
- IAM-Berechtigungen konfigurieren
- Erforderliche benutzerdefinierte Ressourcendefinitionen (CRDs) installieren
- Cluster bei einer Flotte registrieren
- [Optional] Multi-Cluster-Dienste aktivieren (Multi-Cluster-Service Discovery)
- 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.
- 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 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
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
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.
Erstellen Sie einen GKE-Cluster mit dem Namen
gke-1
in der Zoneus-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 denregular
-Channel an.--enable-mesh-certificates
: Dieses Flag aktiviert die automatische mTLS-Funktion von Cloud Service Mesh, falls sie in Zukunft verfügbar wird.
Rufen Sie die Clusteranmeldedaten ab:
gcloud container clusters get-credentials gke-1 --zone=us-west1-a
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.
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
Installieren Sie die benutzerdefinierten Ressourcendefinitionen (CRDs), die für die Verwendung der Gateway API mit Cloud Service Mesh 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 -
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
wurden 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.
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
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-Service Discovery aktivieren
Mit der Funktion „Multi-Cluster Service Discovery“ können Sie lokale Clusterdienste in alle Cluster exportieren, die bei der Flotte registriert sind. Dieser Schritt ist optional, wenn Sie nicht mehr als einen Cluster in Ihrer Flotte verwenden möchten.
Aktivieren Sie Multi-Cluster Service Discovery:
gcloud container hub multi-cluster-services enable \ --project PROJECT_ID
Erteilen Sie die IAM-Rolle (Identity and Access Management), 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"
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'
Cloud Service Mesh-GKE-Service-Mesh aktivieren
In diesem Abschnitt aktivieren Sie das Service Mesh.
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
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'
Erteilen Sie die folgenden IAM-Rollen (Identity and Access Management), die der Gateway API-Controller benötigt:
- roles/container.developer: Mit dieser Rolle kann der Controller Kubernetes-Ressourcen im Cluster verwalten.
- roles/compute.networkAdmin: Mit dieser Rolle kann der Controller Cloud Service Mesh-Service-Mesh-Konfigurationen verwalten.
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:
- Envoy-Sidecar-Service-Mesh einrichten
- Proxyloses gRPC-Service-Mesh einrichten
- Multi-Cluster-Service-Mesh einrichten