Cloud Service Mesh konfigurieren für Cloud Run
Auf dieser Seite erfahren Sie, wie Sie Cloud Service Mesh für die Ausführung auf einer Computing-Infrastrukturen für Cloud Run-Dienste.
Mit Cloud Service Mesh können Sie erweiterte Funktionen zur Trafficverwaltung wie die gewichtete Trafficaufteilung und das globale Load Balancing sowie Observability- und Sicherheitsrichtlinien für Traffic von einem Cloud Run-Dienst zu einem anderen aktivieren. Außerdem erhalten Sie eine vollständig verwaltete Lösung auf Datenebene, verringert den operativen Aufwand, eigene Service Mesh-Sidecars zu verwalten.
Hinweise
Sie sollten mit Cloud Service Mesh vertraut sein.
Projekt festlegen
gcloud config set core/project
PROJECT_ID
Aktivieren Sie in der Google Cloud Console die folgenden APIs für Ihr Projekt:
Serverless VPC Access API, wenn Sie für den Netzwerkausgang einen Connector für serverlosen VPC-Zugriff und nicht Direct VPC verwenden.
Aktualisieren Sie die
gcloud
-Komponenten auf die neueste Version (488.0.0 oder höher):gcloud components update
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zu gewähren, um die Berechtigungen zu erhalten, die Sie zum Konfigurieren und Bereitstellen von Cloud Run-Diensten benötigen:
- Cloud Run-Entwickler
(
roles/run.developer
) im 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 Service mit Google 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.
Aufruf 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 mit einer benutzerdefinierten URL statt der
hat eine run.app
-URL angegeben. Außerdem wird Cloud Run automatisch
authentifiziert sich beim Cloud Run-Zieldienst,
Sie müssen keine eigene Authentifizierung konfigurieren, um Anmeldedaten für Anfragen hinzuzufügen.
andere Cloud Run-Dienste.
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
Mesh
in einer Datei namensmesh.yaml
an:name:
MESH_NAME
Ersetzen Sie
MESH_NAME
durch den Namen der Mesh-Ressource.Importieren Sie die
Mesh
-Ressource aus der Spezifikation mit dem folgenden Befehl: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 zur
nächster Abschnitt
wenn Sie einen Private Service Connect-Endpunkt verwenden
mit der vollständigen run.app
-URL-Adresse als Hostnamen, da nur private IP-Adressen
werden erfasst.
Wenn ein Mesh-Client den Zieldienst aufruft, muss der in der Anfrage verwendete Hostname über DNS aufgelöst werden können. Jeder gültige RFC 1918 IP-Adressen sind akzeptabel, da die Sidecar-Datei den gesamten IP-Traffic zu diesen IP-Adressen erfasst und leitet sie entsprechend weiter.
Das folgende Beispiel zeigt, wie Sie den Platzhalter *
-Eintrag in Cloud DNS erstellen.
Zone, die zu einer einzelnen IP-Adresse aufgelöst wird. Wenn Sie keine exklusive
Cloud DNS-Zone, erstellen Sie einen Cloud DNS-Eintrag
für jeden Hostnamen
zu den Cloud Run-Diensten gehören, die Sie
über das Mesh-Netzwerk adressierbar sind.
Führen Sie den folgenden Befehl aus, um einen Cloud DNS-Eintrag in einer exklusiven Zone zu erstellen: Befehle:
Erstellen Sie eine verwaltete private DNS-Zone in Cloud DNS für ein Dienstnetzwerk.
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. Die IP-Adresse
10.0.0.1
darf nicht verwendet werden.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-Netzwerkressource.VPC_NETWORK_NAME
: Der Name Ihres VPC-Netzwerks, z. B. „default“.
Mit Cloud Service Mesh auf interne Dienste zugreifen
Mit Cloud Run können Sie den eingehenden Netzwerkverkehr auf „intern“ beschränken. Wenn für Ihren Dienst diese Einschränkung für eingehenden Traffic aktiviert ist, wird Traffic, der die von Ihrem Mesh-Netzwerk über das Virtual Private Cloud-Netzwerk übertragen werden, können 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 muss für die Standard-
*.run.app
-URL ein benutzerdefinierter DNS-Eintrag eingerichtet werden, um die Private Service Connect-Endpunktadresse zu verwenden.
Cloud Run-Zieldienst erstellen
Das Cloud Run-Ziel darf nicht den Parameter Standard-URL deaktiviert.
Neuen oder vorhandenen Cloud Run-Dienst bereitstellen:
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-Zieldienst.REGION
: der Name der Region.IMAGE_URL
ist ein Verweis auf das Container-Image. z. B.us-docker.pkg.dev/cloudrun/container/hello:latest
.
Serverlose Netzwerk-Endpunktgruppe erstellen
Erstellen Sie die Ziel-NEG, indem Sie den folgenden Befehl ausführen:
gcloud compute network-endpoint-groups create destination-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.
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 Back-End-Dienst das serverlose Back-End hinzu:
gcloud compute backend-services add-backend
DESTINATION_SERVICE_NAME
-REGION
\ --global \ --network-endpoint-group=destination-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 einemHTTPRoute
-Ressource, die einen Hostnamen mit einem Back-End-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 innerhalb desselben Service Mesh können diesen Dienst aufrufen mithilfe der
http://<HOSTNAME>
-URL, unabhängig von der Region und dem Projekt von für den Anrufer. Wenn Sie Cloud DNS so eingerichtet haben, dass eine private IP-Adresse verwendet wird, kann der Routen-Hostname 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-Zieldienst.DOMAIN_NAME
: der Name der DNS-Domain.PROJECT_ID
: die ID des Projekts.MESH_NAME
ist der Name des Mesh-Netzwerks.REGION
: der Name der Region.
Erstellen Sie die
HTTPRoute
-Ressource mithilfe 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. Führen Sie dazu den folgenden Befehl aus: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-Zieldienst.REGION
: der Name der Region.PROJECT_NUMBER
: die Nummer des Projekts.
Cloud Run-Dienst für den Client erstellen
Wenn Sie einen Cloud Run-Clientdienst erstellen, wird eine Envoy-Sidecar-Datei erstellt. deren Ressourcen sich auf Ihre Abfragen pro Sekunde und die Gesamtgröße der Konfiguration beziehen. In den meisten Fällen liegt die CPU-Auslastung unter 1 % einer vCPU und die Arbeitsspeicherauslastung unter 50 MB.
Sie benötigen Netzwerk-Ausgang für ein Virtual Private Cloud-Netzwerk.
Stellen Sie die Fortio-Anwendung in Cloud Run bereit, um den Clientdienst für Tests zu erstellen , um die Weiterleitung von Traffic an HTTP-Routen zuzulassen:
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-Dienstes des Clients.REGION
: der Name Ihrer Region.VPC_NETWORK_NAME
: Der Name Ihres VPC-Netzwerks, z. B. „default“.SUBNET_NAME
: Der Name Ihres Subnetzes, z. B. „standard“.PROJECT_ID
: die Projekt-ID.MESH_NAME
: die Mesh-Ressource Namen.
Dienst über einen Mesh-Client aufrufen
So leiten Sie eine Anfrage mit der Fortio-Test-App an die Zielroute weiter: aus dem vorherigen Abschnitt Clientdienst erstellen:
Rufen Sie die URL des von Ihnen erstellten Cloud Run-Clientdiensts mit dem folgenden Befehl ab:
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 Clients Cloud Run-Dienst.REGION
: der Name Ihrer Region.PROJECT_ID
: die Projekt-ID.
Verwenden Sie den Befehl
curl
, um eine Anfrage an die Zielroute der fortio-Endpunkt aus dem vorherigen Schritt: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-Zieldienst.DOMAIN_NAME
: der Name der DNS-Domain.
Compute Engine-Back-End von Cloud Run aus aufrufen
Dienstroute von Compute Engine und Cloud Service Mesh bereitstellen und nutzen verwaltete Instanzgruppen als Back-Ends. Konfigurieren Sie den Compute Engine-basierten HTTP-Server in Cloud Service Mesh. Dadurch können Cloud Run-Clients diese Back-End-Dienstroute zu Anfragen direkt an Compute Engine-Instanzen senden.
Nächste Schritte
- Gängige Cloud Run-Netzwerkkonfigurationen für öffentliche und private Netzwerke
- Privates Netzwerk für Cloud Run konfigurieren
- Envoy-Proxys mit HTTP-Diensten einrichten