Projektübergreifende Netzwerk-Endpunktgruppe einrichten
Mit der projektübergreifenden Funktion für Netzwerk-Endpunktgruppen (NEG) können Kunden NEGs aus einem anderen Projekt an eine Traffic Director/Cloud Service Mesh-BackendService
anhängen. Dadurch sind die folgenden Anwendungsfälle möglich:
Bei einer Bereitstellung mit mehreren Projekten werden
BackendServices
zusammen mit den zugehörigen Routing- und Traffic-Richtlinien in einem zentralen Projekt mit Back-End-Endpunkten aus verschiedenen Projekten bereitgestellt.Bei einer Bereitstellung mit mehreren Projekten können Sie alle Ihre Computing-Ressourcen (Compute Engine-VMs, GKE-NEGs usw.) in einem einzigen zentralen Google Cloud-Projekt verwalten. Serviceteams haben eigene Google Cloud-Dienstprojekte, in denen sie Dienstrichtlinien in
BackendServices
und Dienst-Routing-Routen in ihrem jeweiligen Dienstprojekt definieren. So wird die Verwaltung der Dienste delegiert, während die Rechenressourcen, die von verschiedenen Serviceteams gemeinsam genutzt werden können, genau kontrolliert werden.
Auf dieser Seite erfahren Sie, wie Sie eine Baseline-Einrichtung mit zwei Projekten erstellen, bei der die NEG in Projekt A (das Arbeitslastprojekt) an die BackendService
in Projekt B (das Richtlinienprojekt) angehängt ist. Im folgenden Beispiel werden Arbeitslast-VMs im Standard-VPC-Netzwerk im Arbeitslastprojekt eingerichtet. Außerdem wird gezeigt, dass der Client basierend auf den Konfigurationen im Richtlinienprojekt zum Arbeitslastprojekt weiterleiten kann.
Bei einer komplexeren Einrichtung ist für eine vernetzte Datenebene über mehrere Projekte hinweg eine Lösung wie die freigegebene VPC erforderlich. Das bedeutet auch, dass NEG-Endpunkte eindeutige IP-Adressen haben. Diese Beispielkonfiguration kann auf komplexere Szenarien ausgeweitet werden, in denen sich Arbeitslasten in einem freigegebene VPC-Netzwerk befinden, das mehrere Projekte umfasst.
Beschränkungen
Die allgemeinen Einschränkungen für Traffic Director und die Einschränkungen für BackendService/NetworkEndpointGroup gelten.
Die folgenden Einschränkungen gelten ebenfalls, sind aber nicht unbedingt auf eine Mehrfachprojektkonfiguration beschränkt:
- Ein einzelner Backend-Dienst kann nur bis zu 50 Backends unterstützen(einschließlich NEGs und MIGs).
- Es werden nur zonale NEGs vom Typ GCP_VM_IP_PORT unterstützt.
- Projektübergreifende Verweise von Backend-Diensten auf Instanzgruppen (verwaltet oder nicht verwaltet) werden nicht unterstützt.
- Das Auflisten projektübergreifender NEGs, die an einen bestimmten BackendService angehängt werden können, wird nicht unterstützt.
- Die Auflistung projektübergreifender Back-End-Dienste, die eine bestimmte NEG verwenden, wird nicht unterstützt.
Hinweise
Sie müssen die folgenden Voraussetzungen erfüllen, bevor Sie projektübergreifende NEGs einrichten können.
Aktivieren der erforderlichen APIs:
Für diese Anleitung sind die folgenden APIs erforderlich:
- osconfig.googleapis.com
- trafficdirector.googleapis.com
- compute.googleapis.com
- networkservices.googleapis.com
Führen Sie den folgenden Befehl aus, um die erforderlichen APIs sowohl im Arbeitslastprojekt als auch im Richtlinienprojekt zu aktivieren:
gcloud services enable --project PROJECT_ID \
osconfig.googleapis.com \
trafficdirector.googleapis.com \
compute.googleapis.com \
networkservices.googleapis.com
Erforderliche IAM-Berechtigungen gewähren
Sie benötigen ausreichende IAM-Berechtigungen (Identity and Access Management), um diese Anleitung ausführen zu können. Wenn Sie die Rolle Projektinhaber oder Projektbearbeiter (roles/owner
oder roles/editor
) für das Projekt haben, in dem Sie Cloud Service Mesh aktivieren, haben Sie automatisch die erforderlichen Berechtigungen.
Andernfalls müssen Sie alle folgenden IAM-Rollen zuweisen. Mit diesen Rollen haben Sie auch über die zugehörigen Berechtigungen, wie in der Compute Engine IAM-Dokumentation beschrieben.
Die folgenden Rollen sind sowohl für Arbeitslast- als auch für Richtlinienprojekte erforderlich:
- roles/iam.serviceAccountAdmin
- roles/serviceusage.serviceUsageAdmin
- roles/compute.networkAdmin
Die folgenden Rollen sind nur im Arbeitslastprojekt erforderlich:
- roles/compute.securityAdmin
- roles/container.admin
- Jede Rolle, die die folgenden Berechtigungen enthält. Die detaillierteste vordefinierte Rolle, die alle erforderlichen Berechtigungen zum Anhängen einer NEG an einen Backend-Dienst enthält, ist roles/compute.loadBalancerServiceUser.
- compute.networkEndpointGroups.get
- compute.networkEndpointGroups.use
Darüber hinaus müssen von Traffic Director verwaltete xDS-Clients (z. B. Envoy-Proxy) die Berechtigungen unter roles/trafficdirector.client
haben. Zu Demonstrationszwecken können Sie mit dem folgenden Befehl diese Berechtigung im Richtlinienprojekt dem Standard-Compute-Dienstkonto des Arbeitslastprojekts gewähren:
gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \
--member "serviceAccount:WORKLOAD_PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role "roles/trafficdirector.client"
Dabei gilt:
- POLICY_PROJECT_ID ist die ID des Richtlinienprojekts.
- WORKLOAD_PROJECT_NUMBER ist die Projektnummer des Arbeitslastprojekts.
Dienst-Backend im Arbeitslastprojekt konfigurieren
Führen Sie den folgenden Befehl aus, um die Google Cloud CLI auf das Richtlinienprojekt zu verweisen und die bevorzugte Google Cloud-Rechenzone festzulegen:
gcloud config set project WORKLOAD_PROJECT_ID gcloud config set compute/zone ZONE
Dabei gilt:
- WORKLOAD_PROJECT_ID ist die ID des Arbeitslastprojekts.
- ZONE ist die Zone des GKE-Cluster, z. B.
us-central1
.
Einen GKE-Cluster installieren Der folgende Befehl erstellt zu Demonstrationszwecken einen zonalen GKE-Cluster. Diese Funktion funktioniert jedoch auch bei regionalen GKE-Clustern.
gcloud container clusters create test-cluster \ --scopes=https://www.googleapis.com/auth/cloud-platform --zone=ZONE
Firewallregel erstellen
gcloud compute firewall-rules create http-allow-health-checks \ --network=default \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=35.191.0.0/16,130.211.0.0/22 \ --rules=tcp:80
Mit einer Firewallregel kann die Google Cloud-Steuerungsebene Systemdiagnosetests an Back-Ends im Standard-VPC-Netzwerk senden.
Ändern Sie den aktuellen Kontext für kubectl in den neu erstellten Cluster:
gcloud container clusters get-credentials test-cluster \ --zone=ZONE
Beispiel-App „whereami“ erstellen und bereitstellen:
kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: whereami spec: replicas: 2 selector: matchLabels: app: whereami template: metadata: labels: app: whereami spec: containers: - name: whereami image: gcr.io/google-samples/whereami:v1.2.20 ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: whereami annotations: cloud.google.com/neg: '{"exposed_ports":{"8080":{"name": "example-neg"}}}' spec: selector: app: whereami ports: - port: 8080 targetPort: 8080 EOF
Führen Sie den folgenden Befehl aus, um die Referenz auf die NEG in einer Variablen zu speichern:
NEG_LINK=$(gcloud compute network-endpoint-groups describe example-neg --format="value(selfLink)")
Der NEG-Controller erstellt automatisch eine zonale NetworkEndpointGroup für die Dienst-Backends in jeder Zone. In diesem Beispiel ist der NEG-Name „beispiel-neg“ hartcodiert. Das Speichern als Variable ist in der nächsten Sitzung nützlich, wenn Sie diese NEG einem BackendService im Richtlinienprojekt anhängen.
Wenn Sie beispielsweise $NEG_LINK verwenden, sollte das ungefähr so aussehen:
$ echo ${NEG_LINK} https://www.googleapis.com/compute/v1/projects/WORKLOAD_PROJECT/zones/ZONE/networkEndpointGroups/example-neg
Alternativ können Sie die NEG-URL abrufen, indem Sie die neg-status-Anmerkung zum Dienst lesen:
kubectl get service whereami -o jsonpath="{.metadata.annotations['cloud\.google\.com/neg-status']}" NEG_LINK="https://www.googleapis.com/compute/v1/projects/WORKLOAD_PROJECT_ID/zones/ZONE/networkEndpointGroups/example-neg"
Google Cloud-Netzwerkressourcen im Richtlinienprojekt konfigurieren
Weisen Sie die Google Cloud CLI auf das Richtlinienprojekt hin:
gcloud config set project POLICY_PROJECT_ID
Konfiguriert eine Mesh-Ressource:
gcloud network-services meshes import example-mesh --source=- --location=global << EOF name: example-mesh EOF
Der Name der Mesh-Ressource ist der Schlüssel, mit dem Sidecar-Proxys die Konfiguration des Service Mesh anfordern.
Konfigurieren Sie eine Baseline-
BackendService
mit einer Systemdiagnose:gcloud compute health-checks create http http-example-health-check gcloud compute backend-services create example-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=HTTP \ --health-checks http-example-health-check
Hängen Sie die im vorherigen Abschnitt erstellte
NetworkEndpointGroup
an dieBackendService
an:gcloud compute backend-services add-backend example-service --global \ --network-endpoint-group=${NEG_LINK} \ --balancing-mode=RATE \ --max-rate-per-endpoint=5
Erstellen Sie eine HTTPRoute, um alle HTTP-Anfragen mit dem Host-Header
example-service
an den Server im Arbeitslastprojekt weiterzuleiten:gcloud network-services http-routes import example-route --source=- --location=global << EOF name: example-route hostnames: - example-service meshes: - projects/POLICY_PROJECT_NUMBER/locations/global/meshes/example-mesh rules: - action: destinations: - serviceName: "projects/POLICY_PROJECT_NUMBER/locations/global/backendServices/example-service" EOF
Dabei ist POLICY_PROJECT_NUMBER die Projektnummer des Richtlinienprojekts.
Einrichtung prüfen
Sie können die Einrichtung prüfen, indem Sie eine HTTP-Anfrage mit dem HOST-Header example-service
an eine VIP hinter einem von Traffic Director verwalteten Sidecar-Proxy senden:
curl -H "Host: example-service" http://10.0.0.1/
Die Ausgabe sieht etwa so aus:
{"cluster_name":"test-cluster","gce_instance_id":"4879146330986909656","gce_service_account":"...","host_header":"example-service","pod_name":"whereami-7fbffd489-nhkfg","pod_name_emoji":"...","project_id":"...","timestamp":"2024-10-15T00:42:22","zone":"us-west1-a"}
Da der gesamte ausgehende Traffic von Pods von einem Envoy-Sidecar in einem Service Mesh abgefangen wird, ist die vorherige HTTPRoute so konfiguriert, dass der gesamte Traffic ausschließlich basierend auf dem L7-Attribut (Host-Header) an den Kubernetes-Dienst „whereami“ gesendet wird. In diesem Beispiel lautet die VIP 10.0.0.1, aber es kann jede IP-Adresse sein.
Der Sidecar-Proxy sollte Konfigurationen anfordern, die mit der Mesh-Ressource im Richtlinienprojekt verknüpft sind. Achten Sie dabei darauf, dass die Knoten-ID im folgenden Format festgelegt ist:
projects/POLICY_PROJECT_NUMBER/networks/mesh:example-mesh/nodes/UUID"