Configurer Cloud Service Mesh pour Cloud Run
Cette page explique comment configurer Cloud Service Mesh pour qu'il s'exécute sur différentes infrastructures de calcul pour les services Cloud Run.
Cloud Service Mesh vous permet d'activer des fonctionnalités avancées de gestion du trafic pour le maillage, telles que la répartition pondérée du trafic et l'équilibrage de charge global, ainsi que des règles d'observabilité et de sécurité pour le trafic d'un service Cloud Run à un autre. Il vous offre également une solution de plan de données entièrement gérée qui élimine la charge opérationnelle liée à la maintenance de vos propres sidecars de maillage de services.
Avant de commencer
Familiarisez-vous avec Cloud Service Mesh.
Définissez votre projet :
gcloud config set core/project
PROJECT_ID
Dans la console Google Cloud , activez les API suivantes pour votre projet :
Si vous utilisez un connecteur d'accès au VPC sans serveur et non la sortie VPC directe pour la sortie réseau.
Mettez à jour les composants
gcloud
vers la dernière version (488.0.0 ou version ultérieure) :gcloud components update
Limites
Les services Cloud Run utilisant Cloud Service Mesh peuvent connaître une latence de démarrage à froid plus élevée. Consultez la section Conseils de développement généraux de la documentation Cloud Run pour obtenir des conseils sur l'amélioration des temps de démarrage.
Rôles requis
Pour obtenir les autorisations nécessaires pour configurer et déployer des services Cloud Run, demandez à votre administrateur de vous accorder les rôles IAM suivants :
- Développeur Cloud Run
(
roles/run.developer
) sur le service Cloud Run - Utilisateur du compte de service
(
roles/iam.serviceAccountUser
) sur l'identité du service
Le compte de service du client Cloud Run doit également disposer des rôles suivants :
- Client Traffic Director (
roles/trafficdirector.client
) pour accéder aux API de routage de service - Agent Cloud Trace (
roles/cloudtrace.agent
) pour activer le traçage
Pour obtenir la liste des rôles et des autorisations IAM associés à Cloud Run, consultez les sections Rôles IAM Cloud Run et Autorisations IAM Cloud Run. Si votre service Cloud Run communique avec les APIGoogle Cloud , telles que les bibliothèques clientes Cloud, consultez le guide de configuration de l'identité du service. Pour en savoir plus sur l'attribution de rôles, consultez les pages Autorisations de déploiement et Gérer les accès.
Appel entre des services Cloud Run à l'aide de Cloud Service Mesh
Cloud Run utilise les API de routage de services Cloud Service Mesh.
Ces API permettent à un service Cloud Run d'appeler d'autres services Cloud Run à l'aide d'une URL personnalisée au lieu de l'URL run.app
fournie. De plus, Cloud Run s'authentifie automatiquement auprès du service Cloud Run de destination. Vous n'avez donc pas besoin de configurer votre propre authentification pour joindre les identifiants de la requête à d'autres services Cloud Run.
Pour appeler un service Cloud Run à partir d'un autre à l'aide de Cloud Service Mesh, procédez comme suit :
- Configurer un Cloud Service Mesh
- Configurer Cloud DNS
- Créer le service Cloud Run de destination
- Créer le NEG sans serveur
- Créer le service client Cloud Run
- Appeler le service depuis le client Mesh
Configurer un maillage de services Cloud
Pour créer une route de service à l'aide de l'URL par défaut, enregistrez la spécification
Mesh
dans un fichier nommémesh.yaml
:name:
MESH_NAME
Remplacez
MESH_NAME
par le nom de la ressource de maillage.Importez la ressource
Mesh
à partir de la spécification en exécutant la commande suivante :gcloud network-services meshes import
MESH_NAME
\ --source=mesh.yaml \ --location=globalRemplacez
MESH_NAME
par le nom de la ressource de maillage.
Configurer Cloud DNS
Vous pouvez ignorer la configuration de Cloud DNS et passer à la section suivante si vous utilisez un point de terminaison Private Service Connect avec l'adresse URL complète run.app
comme nom d'hôte, car seules les adresses IP privées sont capturées.
Lorsqu'un client du maillage appelle le service de destination, le nom d'hôte utilisé dans la requête doit pouvoir être résolu par DNS. Toute adresse IP RFC 1918 valide est acceptable, car le side-car capture tout le trafic IP vers ces plages d'adresses IP et le redirige de manière appropriée.
L'exemple suivant montre comment créer une entrée générique *
dans la zone Cloud DNS qui est résolue en une seule adresse IP. Si vous ne souhaitez pas utiliser de zone Cloud DNS exclusive, créez une entrée Cloud DNS pour chaque nom d'hôte correspondant aux services Cloud Run que vous souhaitez rendre adressables depuis le maillage.
Pour créer un enregistrement Cloud DNS dans une zone exclusive, exécutez les commandes suivantes :
Créez une zone DNS privée gérée dans Cloud DNS pour un maillage de services.
gcloud dns managed-zones create
MESH_NAME
\ --description="Domain forDOMAIN_NAME
service mesh routes" \ --dns-name=DOMAIN_NAME
. \ --networks=VPC_NETWORK_NAME
\ --visibility=privateCréez un enregistrement DNS dans la zone privée gérée que vous venez de créer. Assurez-vous que l'adresse IP
10.0.0.1
n'est pas utilisée.gcloud dns record-sets create "*.
DOMAIN_NAME
." \ --type=A \ --zone="MESH_NAME
" \ --rrdatas=10.0.0.1 \ --ttl=3600Remplacez les éléments suivants :
DOMAIN_NAME
: nom du domaine DNS.MESH_NAME
: nom de la ressource de maillage.VPC_NETWORK_NAME
: nom de votre réseau VPC (par exemple, "default").
Accéder aux services internes avec Cloud Service Mesh
Cloud Run vous permet de limiter le trafic réseau entrant à "interne". Si cette restriction d'entrée est activée pour votre service, le trafic qui transite de votre maillage via le réseau de cloud privé virtuel peut être défini comme "interne" lorsque vous activez un chemin d'accès à Cloud Run.
Pour accéder aux services internes avec Cloud Service Mesh, utilisez l'une des méthodes suivantes :
- Configurez l'accès privé à Google pour votre réseau VPC. Vous n'avez pas besoin de configurer d'enregistrement DNS personnalisé.
- Associez un point de terminaison Private Service Connect à Cloud Service Mesh.
Cela nécessite la configuration d'un enregistrement DNS personnalisé pour que l'URL
*.run.app
par défaut utilise l'adresse du point de terminaison Private Service Connect.
Créer le service Cloud Run de destination
Notez que l'URL par défaut de la destination Cloud Run ne peut pas être désactivée.
Déployez un service Cloud Run nouveau ou existant :
gcloud run deploy
DESTINATION_SERVICE_NAME
\ --no-allow-unauthenticated \ --region=REGION
\ --image=IMAGE_URL
Remplacez les éléments suivants :
DESTINATION_SERVICE_NAME
: nom du service Cloud Run de destination.REGION
: nom de la région.IMAGE_URL
: référence à l'image de conteneur, par exempleus-docker.pkg.dev/cloudrun/container/hello:latest
.
Créer le groupe de points de terminaison du réseau sans serveur
Créez le NEG de destination en exécutant la commande suivante :
gcloud compute network-endpoint-groups create
DESTINATION_SERVICE_NAME
-neg \ --region=REGION
\ --network-endpoint-type=serverless \ --cloud-run-service=DESTINATION_SERVICE_NAME
Remplacez les éléments suivants :
REGION
: nom de la région.DESTINATION_SERVICE_NAME
: nom du service Cloud Run de destination.
Créez un service de backend interne autogéré qui référence le NEG sans serveur.
Créez le service de backend :
gcloud compute backend-services create
DESTINATION_SERVICE_NAME
-REGION
\ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGEDRemplacez
DESTINATION_SERVICE_NAME
par le nom du service de destination etREGION
par le nom de la région.Ajoutez le backend sans serveur au service de backend :
gcloud compute backend-services add-backend
DESTINATION_SERVICE_NAME
-REGION
\ --global \ --network-endpoint-group=DESTINATION_SERVICE_NAME
-neg \ --network-endpoint-group-region=REGION
Remplacez
DESTINATION_SERVICE_NAME
par le nom du service de destination etREGION
par le nom de la région.
Créez une route HTTP qui fait référence au service de backend.
La ressource et les services
Mesh
sont configurés. Connectez-les à une ressourceHTTPRoute
qui associe un nom d'hôte à un service de backend.Créez la spécification
HTTPRoute
et enregistrez-la dans un fichier nomméhttp_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
"Définissez les noms d'hôte sur les noms que vous souhaitez utiliser pour adresser le service. Tous les clients d'un même maillage de services peuvent appeler ce service à l'aide de l'URL
http://<HOSTNAME>
, quels que soient la région et le projet de l'appelant. Si vous avez configuré Cloud DNS pour utiliser une adresse IP privée, le nom d'hôte de la route peut également être l'adresse URLrun.app
complète. Dans ce cas, vous pouvez ignorer l'étape de configuration de Cloud DNS.Remplacez les éléments suivants :
DESTINATION_SERVICE_NAME
: nom du service Cloud Run de destination.DOMAIN_NAME
: nom du domaine DNS.PROJECT_ID
: ID du projet.MESH_NAME
: nom du maillage.REGION
: nom de la région.
Créez la ressource
HTTPRoute
à l'aide de la spécification du fichierhttp_route.yaml
:gcloud network-services http-routes import
DESTINATION_SERVICE_NAME
-route \ --source=http_route.yaml \ --location=globalAttribuez le rôle Demandeur Cloud Run (
roles/iam.invoker
) au service de destination Cloud Run en exécutant la commande suivante :gcloud run services add-iam-policy-binding
DESTINATION_SERVICE_NAME
\ --regionREGION
\ --member=serviceAccount:PROJECT_NUMBER
-compute@developer.gserviceaccount.com \ --role=roles/run.invokerRemplacez les éléments suivants :
DESTINATION_SERVICE_NAME
: nom du service Cloud Run de destination.REGION
: nom de la région.PROJECT_NUMBER
: numéro du projet.
Créer le service client Cloud Run
La création d'un service client Cloud Run crée un side-car Envoy dont les ressources sont liées à votre nombre de requêtes par seconde et à la taille totale de la configuration. La plupart du temps, l'utilisation du processeur est inférieure à 1 % d'un processeur virtuel et l'utilisation de la mémoire est inférieure à 50 Mo.
Vous devez disposer d'un accès sortant réseau à un réseau de cloud privé virtuel.
Pour créer le service client à des fins de test, déployez l'application fortio dans Cloud Run afin d'autoriser le transfert du trafic vers les routes HTTP :
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
"Remplacez les éléments suivants :
CLIENT_SERVICE_NAME
: nom du service client Cloud Run.REGION
: nom de votre région.VPC_NETWORK_NAME
: nom de votre réseau VPC (par exemple, "default").SUBNET_NAME
: nom de votre sous-réseau (par exemple, "default").PROJECT_ID
: par l'ID du projet.MESH_NAME
: nom de la ressource de maillage.
Appeler un service depuis un client mesh
Pour transférer une requête vers la route de destination à l'aide de l'application de test fortio de la section précédente Créer un service client :
Récupérez l'URL du service client Cloud Run que vous avez créé en exécutant la commande suivante :
TEST_SERVICE_URL=$(gcloud run services describe
CLIENT_SERVICE_NAME
\ --region=REGION
--format="value(status.url)" \ --project=PROJECT_ID
)Remplacez les éléments suivants :
CLIENT_SERVICE_NAME
: nom du service Cloud Run client.REGION
: nom de votre région.PROJECT_ID
: par l'ID du projet.
Utilisez la commande
curl
pour envoyer une requête à la route de destination du point de terminaison fortio de l'étape précédente :curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" "$TEST_SERVICE_URL/fortio/fetch/
DESTINATION_SERVICE_NAME
.DOMAIN_NAME
"Remplacez les éléments suivants :
DESTINATION_SERVICE_NAME
: nom du service Cloud Run de destination.DOMAIN_NAME
: nom du domaine DNS.
Appeler un backend Compute Engine depuis Cloud Run
Pour déployer une route de service Compute Engine et Cloud Service Mesh à l'aide de groupes d'instances gérés comme backends, configurez le serveur HTTP basé sur Compute Engine dans Cloud Service Mesh. Cela permet aux clients Cloud Run d'utiliser cette route de service de backend pour envoyer des requêtes directement aux instances Compute Engine.
Étapes suivantes
- Découvrez les configurations de mise en réseau Cloud Run courantes pour la mise en réseau publique et privée.
- Configurer le réseau privé pour Cloud Run
- Configurer des proxys Envoy avec des services HTTP
- Router le trafic des services Cloud Run vers les charges de travail Cloud Service Mesh sur GKE
- Acheminer le trafic des charges de travail Cloud Service Mesh vers les services Cloud Run