Cloud Service Mesh für Cloud Run konfigurieren
Auf dieser Seite wird beschrieben, wie Sie Cloud Service Mesh für die Ausführung auf einer Reihe von Recheninfrastrukturen für Cloud Run-Dienste konfigurieren.
Mit Cloud Service Mesh können Sie erweiterte Funktionen zur Traffic-Verwaltung für das Mesh aktivieren, z. B. gewichtete Traffic-Aufteilung und globales Load Balancing, sowie Richtlinien für Beobachtbarkeit und Sicherheit für Traffic von einem Cloud Run-Dienst zu einem anderen. Außerdem erhalten Sie eine vollständig verwaltete Datenebene, die den Betriebsaufwand für die Wartung Ihrer eigenen Service-Mesh-Sidecars reduziert.
Hinweise
Sie sind mit Cloud Service Mesh vertraut.
Projekt festlegen
gcloud config set core/project
PROJECT_ID
Aktivieren Sie in der Google Cloud Konsole die folgenden APIs für Ihr Projekt:
Wenn Sie einen Connector für Serverloser VPC-Zugriff und nicht Direct VPC für den Netzwerkausgang verwenden.
Aktualisieren Sie die Komponenten von
gcloud
auf die neueste Version (488.0.0 oder höher):gcloud components update
Beschränkungen
Bei Cloud Run-Diensten, die Cloud Service Mesh verwenden, kann es zu einer erhöhten Kaltstartlatenz kommen. Im Abschnitt Allgemeine Entwicklungstipps in der Cloud Run-Dokumentation finden Sie Tipps zur Verbesserung der Startzeiten.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren und Bereitstellen von Cloud Run-Diensten benötigen:
- Cloud Run-Entwickler
(
roles/run.developer
) für den Cloud Run-Dienst - Dienstkontonutzer
(
roles/iam.serviceAccountUser
) für die Dienstidentität
Das Dienstkonto des Cloud Run-Clients muss außerdem die folgenden Rollen haben:
- Traffic Director-Client (
roles/trafficdirector.client
) für den Zugriff auf die Service Routing APIs - Cloud Trace-Agent (
roles/cloudtrace.agent
) zum Aktivieren des Tracings
Eine Liste der IAM-Rollen und -Berechtigungen im Zusammenhang mit Cloud Run finden Sie unter IAM-Rollen für Cloud Run und IAM-Berechtigungen für Cloud Run. Wenn Ihr Cloud Run-Dienst mitGoogle Cloud APIs wie Cloud-Clientbibliotheken verknüpft ist, lesen Sie die Konfigurationsanleitung für Dienstidentitäten. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Bereitstellungsberechtigungen und Zugriff verwalten.
Aufrufe zwischen Cloud Run-Diensten mit Cloud Service Mesh
Cloud Run verwendet die Dienst-Routing-APIs von Cloud Service Mesh.
Mit diesen APIs kann ein Cloud Run-Dienst andere Cloud Run-Dienste über eine benutzerdefinierte URL anstelle der bereitgestellten run.app
-URL aufrufen. Außerdem authentifiziert sich Cloud Run automatisch beim Ziel-Cloud Run-Dienst, sodass Sie keine eigene Authentifizierung konfigurieren müssen, um Anmeldedaten für Anfragen an andere Cloud Run-Dienste anzuhängen.
So rufen Sie mit Cloud Service Mesh einen Cloud Run-Dienst von einem anderen auf:
- Cloud Service Mesh einrichten
- Cloud DNS einrichten
- Cloud Run-Zieldienst erstellen
- Serverlose NEG erstellen
- Cloud Run-Clientdienst erstellen
- Dienst über den Mesh-Client aufrufen
Cloud Service Mesh einrichten
Wenn Sie eine Dienstroute mit der Standard-URL erstellen möchten, speichern Sie die Spezifikation
Mesh
in einer Datei mit dem Namenmesh.yaml
:name:
MESH_NAME
Ersetzen Sie
MESH_NAME
durch den Namen der Mesh-Ressource.Importieren Sie die
Mesh
-Ressource aus der Spezifikation, indem Sie den folgenden Befehl ausführen:gcloud network-services meshes import
MESH_NAME
\ --source=mesh.yaml \ --location=globalErsetzen Sie
MESH_NAME
durch den Namen der Mesh-Ressource.
Cloud DNS einrichten
Sie können die Cloud DNS-Einrichtung überspringen und zum nächsten Abschnitt gehen, wenn Sie einen Private Service Connect-Endpunkt mit der vollständigen run.app
-URL-Adresse als Hostname verwenden, da nur private IP-Adressen erfasst werden.
Wenn ein Mesh-Client den Zieldienst aufruft, muss der im Request verwendete Hostname über DNS aufgelöst werden können. Jede gültige RFC 1918-IP-Adresse ist zulässig, da der Sidecar-Container den gesamten IP-Traffic zu diesen IP-Adressbereichen erfasst und entsprechend umleitet.
Im folgenden Beispiel wird gezeigt, wie Sie einen Platzhalter-Eintrag *
in der Cloud DNS-Zone erstellen, der in eine einzelne IP-Adresse aufgelöst wird. Wenn Sie keine exklusive Cloud DNS-Zone verwenden möchten, erstellen Sie einen Cloud DNS-Eintrag für jeden Hostnamen, der den Cloud Run-Diensten entspricht, auf die vom Mesh aus zugegriffen werden soll.
Führen Sie die folgenden Befehle aus, um einen Cloud DNS-Eintrag in einer exklusiven Zone zu erstellen:
Erstellen Sie eine private verwaltete DNS-Zone in Cloud DNS für ein Service-Mesh.
gcloud dns managed-zones create
MESH_NAME
\ --description="Domain forDOMAIN_NAME
service mesh routes" \ --dns-name=DOMAIN_NAME
. \ --networks=VPC_NETWORK_NAME
\ --visibility=privateErstellen Sie einen DNS-Eintrag in der neu erstellten privaten verwalteten Zone. Prüfen Sie, ob die IP-Adresse
10.0.0.1
nicht verwendet wird.gcloud dns record-sets create "*.
DOMAIN_NAME
." \ --type=A \ --zone="MESH_NAME
" \ --rrdatas=10.0.0.1 \ --ttl=3600Ersetzen Sie Folgendes:
DOMAIN_NAME
: der Name der DNS-Domain.MESH_NAME
: Der Name der Mesh-Ressource.VPC_NETWORK_NAME
: Der Name Ihres VPC-Netzwerk, z. B. „default“.
Mit Cloud Service Mesh auf interne Dienste zugreifen
Mit Cloud Run können Sie eingehenden Netzwerk-Traffic auf „intern“ beschränken. Wenn für Ihren Dienst diese Ingress-Einschränkung aktiviert ist, kann Traffic, der von Ihrem Mesh über das VPC-Netzwerk (Virtual Private Cloud) übertragen wird, als „intern“ festgelegt werden, wenn Sie einen Zugriffspfad zu Cloud Run aktivieren.
Verwenden Sie eine der folgenden Methoden, um mit Cloud Service Mesh auf interne Dienste zuzugreifen:
- Konfigurieren Sie den privaten Google-Zugriff für Ihr VPC-Netzwerk. Sie müssen keinen benutzerdefinierten DNS-Eintrag einrichten.
- Private Service Connect-Endpunkt an Cloud Service Mesh anhängen
Dazu ist eine benutzerdefinierte DNS-Eintragseinrichtung für die Standard-URL
*.run.app
erforderlich, um die Adresse des Private Service Connect-Endpunkts zu verwenden.
Cloud Run-Zieldienst erstellen
Beachten Sie, dass für das Cloud Run-Ziel die Standard-URL nicht deaktiviert sein darf.
Stellen Sie einen neuen oder vorhandenen Cloud Run-Dienst bereit:
gcloud run deploy
DESTINATION_SERVICE_NAME
\ --no-allow-unauthenticated \ --region=REGION
\ --image=IMAGE_URL
Ersetzen Sie Folgendes:
DESTINATION_SERVICE_NAME
: Der Name des Cloud Run-Zieldienstes.REGION
: der Name der Region.IMAGE_URL
: ein Verweis auf das Container-Image, z. B.us-docker.pkg.dev/cloudrun/container/hello:latest
Endpunktgruppe für ein serverloses Netzwerk erstellen
Erstellen Sie das Ziel-NEG mit dem folgenden Befehl:
gcloud compute network-endpoint-groups create
DESTINATION_SERVICE_NAME
-neg \ --region=REGION
\ --network-endpoint-type=serverless \ --cloud-run-service=DESTINATION_SERVICE_NAME
Ersetzen Sie Folgendes:
REGION
: der Name der Region.DESTINATION_SERVICE_NAME
: Der Name des Cloud Run-Zieldienstes.
Erstellen Sie einen internen selbstverwalteten Back-End-Dienst, der auf die serverlose NEG verweist.
Erstellen Sie den Back-End-Dienst:
gcloud compute backend-services create
DESTINATION_SERVICE_NAME
-REGION
\ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGEDErsetzen Sie
DESTINATION_SERVICE_NAME
durch den Namen des Zieldienstes undREGION
durch den Namen der Region.Fügen Sie dem Backend-Dienst das serverlose Backend hinzu:
gcloud compute backend-services add-backend
DESTINATION_SERVICE_NAME
-REGION
\ --global \ --network-endpoint-group=DESTINATION_SERVICE_NAME
-neg \ --network-endpoint-group-region=REGION
Ersetzen Sie
DESTINATION_SERVICE_NAME
durch den Namen des Zieldienstes undREGION
durch den Namen der Region.
Erstellen Sie eine HTTP-Route, die auf den Back-End-Dienst verweist.
Die Ressource
Mesh
und die Dienste sind konfiguriert. Verbinden Sie sie mit einerHTTPRoute
-Ressource, die einen Hostnamen mit einem Backend-Dienst verknüpft.Erstellen Sie die Spezifikation
HTTPRoute
und speichern Sie sie in einer Datei mit dem Namenhttp_route.yaml
:name: "
DESTINATION_SERVICE_NAME
-route" hostnames: - "DESTINATION_SERVICE_NAME
.DOMAIN_NAME
" meshes: - "projects/PROJECT_ID
/locations/global/meshes/MESH_NAME
" rules: - action: destinations: - serviceName: "projects/PROJECT_ID
/locations/global/backendServices/DESTINATION_SERVICE_NAME
-REGION
"Legen Sie die Hostnamen auf die Namen fest, die Sie für die Adressierung des Dienstes verwenden möchten. Alle Clients im selben Service Mesh können diesen Dienst über die
http://<HOSTNAME>
-URL aufrufen, unabhängig von der Region und dem Projekt des Aufrufers. Wenn Sie Cloud DNS für die Verwendung einer privaten IP-Adresse eingerichtet haben, kann der Routenhostname auch die vollständigerun.app
-URL-Adresse sein. In diesem Fall können Sie den Cloud DNS-Einrichtungsschritt überspringen.Ersetzen Sie Folgendes:
DESTINATION_SERVICE_NAME
: Der Name des Cloud Run-Zieldienstes.DOMAIN_NAME
: der Name der DNS-Domain.PROJECT_ID
: die ID des Projekts.MESH_NAME
: der Name des Mesh.REGION
: der Name der Region.
Erstellen Sie die
HTTPRoute
-Ressource mit der Spezifikation in der Dateihttp_route.yaml
:gcloud network-services http-routes import
DESTINATION_SERVICE_NAME
-route \ --source=http_route.yaml \ --location=globalWeisen Sie dem Cloud Run-Zieldienst die Rolle „Cloud Run Invoker“ (
roles/iam.invoker
) zu, indem Sie den folgenden Befehl ausführen:gcloud run services add-iam-policy-binding
DESTINATION_SERVICE_NAME
\ --regionREGION
\ --member=serviceAccount:PROJECT_NUMBER
-compute@developer.gserviceaccount.com \ --role=roles/run.invokerErsetzen Sie Folgendes:
DESTINATION_SERVICE_NAME
: Der Name des Cloud Run-Zieldienstes.REGION
: der Name der Region.PROJECT_NUMBER
: die Nummer des Projekts.
Cloud Run-Clientdienst erstellen
Wenn Sie einen Cloud Run-Clientdienst erstellen, wird ein Envoy-Sidecar erstellt, dessen Ressourcen sich auf Ihre QPS und die Gesamtkonfigurationsgröße beziehen. In den meisten Fällen liegt die CPU-Auslastung bei weniger als 1 % einer vCPU und die Speichernutzung bei weniger als 50 MB.
Sie benötigen Netzwerk-Egress-Zugriff auf ein Virtual Private Cloud-Netzwerk.
Um den Clientdienst für Tests zu erstellen, stellen Sie die Fortio-App in Cloud Run bereit, damit Traffic an HTTP-Routen weitergeleitet werden kann:
gcloud beta run deploy
CLIENT_SERVICE_NAME
\ --region=REGION
\ --image=fortio/fortio \ --network=VPC_NETWORK_NAME
\ --subnet=SUBNET_NAME
\ --mesh="projects/PROJECT_ID
/locations/global/meshes/MESH_NAME
"Ersetzen Sie Folgendes:
CLIENT_SERVICE_NAME
: der Name des Cloud Run-Clientdienstes.REGION
: der Name Ihrer Region.VPC_NETWORK_NAME
: Der Name Ihres VPC-Netzwerk, z. B. „default“.SUBNET_NAME
: Der Name Ihres Subnetzes, z. B. „default“.PROJECT_ID
: die Projekt-ID.MESH_NAME
: Der Name der Mesh-Ressource.
Dienst über einen Mesh-Client aufrufen
So leiten Sie eine Anfrage mit der Fortio-Test-App aus dem vorherigen Abschnitt Clientdienst erstellen an die Zielroute weiter:
Rufen Sie die URL des Cloud Run-Clientdienstes ab, den Sie erstellt haben, indem Sie den folgenden Befehl ausführen:
TEST_SERVICE_URL=$(gcloud run services describe
CLIENT_SERVICE_NAME
\ --region=REGION
--format="value(status.url)" \ --project=PROJECT_ID
)Ersetzen Sie Folgendes:
CLIENT_SERVICE_NAME
: der Name des Client-Cloud Run-Dienstes.REGION
: der Name Ihrer Region.PROJECT_ID
: die Projekt-ID.
Verwenden Sie den Befehl
curl
, um eine Anfrage an den Zielroutenendpunkt von Fortio aus dem vorherigen Schritt zu senden:curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" "$TEST_SERVICE_URL/fortio/fetch/
DESTINATION_SERVICE_NAME
.DOMAIN_NAME
"Ersetzen Sie Folgendes:
DESTINATION_SERVICE_NAME
: Der Name des Cloud Run-Zieldienstes.DOMAIN_NAME
: der Name der DNS-Domain.
Compute Engine-Back-End über Cloud Run aufrufen
Wenn Sie eine Compute Engine- und Cloud Service Mesh-Dienstroute mit verwalteten Instanzgruppen als Backends bereitstellen möchten, konfigurieren Sie den Compute Engine-basierten HTTP-Server in Cloud Service Mesh. So können Cloud Run-Clients diesen Back-End-Dienstpfad verwenden, um Anfragen direkt an Compute Engine-Instanzen zu senden.
Nächste Schritte
- Häufige Cloud Run-Netzwerkkonfigurationen für öffentliche und private Netzwerke
- Privates Netzwerk für Cloud Run konfigurieren
- Envoy-Proxys mit HTTP-Diensten einrichten
- Traffic von Cloud Run-Diensten an Cloud Service Mesh-Arbeitslasten in GKE weiterleiten
- Traffic von Cloud Service Mesh-Arbeitslasten an Cloud Run-Dienste weiterleiten