Vous pouvez activer votre service App Engine pour envoyer du trafic vers un réseau VPC partagé en utilisant la sortie VPC directe sans connecteur d'accès au VPC sans serveur requis.
Cette page explique comment configurer les autorisations IAM d'App Engine pour utiliser le sous-réseau du réseau VPC partagé, et comment placer votre service sur le sous-réseau partagé.
Avant de commencer
Consultez la section Attribution d'adresses IP pour obtenir des conseils sur l'attribution d'adresses IP à partir de votre sous-réseau.
Limites
Consommation d’adresses IP : l’utilisation d’adresses IP par votre service est directement proportionnelle au nombre d’instances en cours d’exécution, et votre capacité de scaling est limitée par le nombre d’adresses IP disponibles dans le sous-réseau que vous avez choisi.
Événements de maintenance : votre service peut rencontrer de brèves interruptions de connexion lors d'événements de maintenance de l'infrastructure de mise en réseau. Nous vous recommandons d'utiliser des bibliothèques clientes pour gérer les réinitialisations occasionnelles des connexions.
Démarrages à froid : les délais de démarrage à froid initiaux dépendent de la région et du cas d’utilisation spécifique. Dans de rares cas, les démarrages à froid peuvent durer jusqu'à une minute.
Entrée VPC directe : App Engine n'est pas compatible avec l'entrée VPC directe.
Nombre d'instances : vous ne pouvez configurer que 100 instances par version App Engine pour utiliser la sortie VPC directe.
Configurer les autorisations IAM
Pour qu'App Engine dans un projet de service VPC partagé puisse accéder à un réseau VPC partagé, assurez-vous que l'agent de service App Engine dispose des autorisations suffisantes pour utiliser le sous-réseau.
Rôle d'agent de service App Engine : pour accéder au réseau VPC partagé, accordez des autorisations suffisantes à l'agent de service App Engine en ajoutant l'un des rôles suivants :
Utilisateur de réseau Compute (
roles/compute.networkUser) sur le projet hôte de VPC partagé. Les sous-réseaux avec IPv6 externe nécessitent également le rôle Administrateur d'adresse IP publique Compute (roles/compute.publicIpAdmin).Par exemple, pour accorder le rôle d'utilisateur de réseau Compute, exécutez la commande suivante :
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-gae-service.iam.gserviceaccount.com" \ --role "roles/compute.networkUser"
Remplacez les éléments suivants :
- HOST_PROJECT_ID : ID de votre projet hôte de VPC partagé.
- SERVICE_PROJECT_NUMBER : numéro de projet du service VPC partagé dans lequel vous déployez votre service App Engine.
Lecteur de réseau Compute (
compute.networkViewer) sur le projet hôte de VPC partagé et le Utilisateur de réseau Compute (compute.networkUser) rôle sur le sous-réseau VPC partagé. Les sous-réseaux avec IPv6 externe nécessitent également le rôle Administrateur d'adresse IP publique Compute (roles/compute.publicIpAdmin).Par exemple, pour accorder le rôle d'utilisateur de réseau Compute sur le sous-réseau, exécutez la commande suivante :
gcloud compute networks subnets add-iam-policy-binding SUBNET_NAME \ --region REGION \ --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-gae-service.iam.gserviceaccount.com" \ --role "roles/compute.networkUser" \ --project HOST_PROJECT_ID
Remplacez les éléments suivants :
- SUBNET_NAME : nom complet de la ressource du sous-réseau sur lequel vous souhaitez exécuter vos services App Engine.
- REGION : région de votre service App Engine, qui doit correspondre à la région de votre sous-réseau.
- SERVICE_PROJECT_NUMBER : numéro de projet du service VPC partagé dans lequel vous déployez votre service App Engine.
- HOST_PROJECT_ID : ID de votre projet hôte de VPC partagé.
Autorisations personnalisées : pour un contrôle plus précis, accordez à l'agent de service App Engine les autorisations supplémentaires suivantes sur le projet :
compute.networks.getsur le projet hôte de VPC partagécompute.subnetworks.getsur le projet hôte ou le sous-réseau spécifiquecompute.subnetworks.usesur le projet hôte ou le sous-réseau spécifiquecompute.addresses.getsur le projet de service VPC partagécompute.addresses.listsur le projet de service VPC partagécompute.addresses.createsur le projet de service VPC partagécompute.addresses.deletesur le projet de service VPC partagécompute.addresses.createInternalsur le projet de service VPC partagécompute.addresses.deleteInternalsur le projet de service VPC partagécompute.regionOperations.getsur le projet de service VPC partagé
Attribution d'adresses IP
Pour placer votre service App Engine sur un réseau VPC, spécifiez un réseau VPC ou un sous-réseau, ou les deux. Si vous ne spécifiez qu'un réseau, le sous-réseau utilise le même nom que le réseau. App Engine alloue les adresses IP de votre sous-réseau.
Les adresses IP étant éphémères, ne créez pas de règles basées sur des adresses IP individuelles. Si vous devez créer une règle basée sur les adresses IP, par exemple dans les règles de pare-feu, vous devez utiliser la plage d'adresses IP de l'ensemble du sous-réseau.
Pour modifier le réseau ou le sous-réseau utilisé par votre service, déployez une nouvelle version qui utilise les nouvelles valeurs de réseau et de sous-réseau.
Scaling à la hausse et à la baisse
Pour un scaling plus rapide à la hausse en cas de surcharge du trafic, App Engine réserve les adresses IP par blocs de 16 (masque de sous-réseau 28).
Pour vous assurer de disposer de suffisamment d'adresses IPv4 pour une utilisation dans App Engine, la plage d'adresses IPv4 de votre sous-réseau doit être /26 ou plus grande.
Pour optimiser l'attribution d'adresses IP et simplifier la gestion, placez plusieurs ressources sur le même sous-réseau. Si votre espace d'adresses IPv4 est limité, consultez la section Plages IPv4 compatibles pour plus d'options.
Pour supprimer le sous-réseau, vous devez d'abord supprimer ou redéployer votre service App Engine afin de cesser d'utiliser le sous-réseau, puis attendre une à deux heures.
Consommation d'adresses IP pour les services
À l'état stable, App Engine utilise deux fois plus d'adresses IP que le nombre d'instances. Lorsqu'une version effectue un scaling à la baisse, App Engine conserve ses adresses IP pendant 20 minutes au maximum. Au total, réservez au moins deux fois plus d'adresses IP, plus une mémoire tampon pour tenir compte des mises à jour de version.
Par exemple, si vous mettez à niveau des versions de sorte que version 1 passe de 100 instances à zéro tandis que version 2 passe de zéro à 100, App Engine conserve les adresses IP de version 1 jusqu'à 20 minutes après le scaling à la baisse. Au cours de la période de conservation de 20 minutes, vous devez réserver au moins 400 adresses IP ((100 + 100) * 2).
Plages IPv4 compatibles
App Engine accepte les plages IPv4 suivantes pour votre sous-réseau :
Déployer un service App Engine
La sortie VPC directe permet à votre service App Engine d'envoyer du trafic vers un réseau VPC partagé sans connecteur d'accès au VPC sans serveur. Vous pouvez attribuer des tags réseau à une version spécifique de votre service App Engine pour une sécurité réseau plus précise, par exemple en appliquant des règles de pare-feu VPC.
Pour placer votre service sur le sous-réseau partagé, spécifiez les noms de ressources complets du sous-réseau et du réseau VPC partagé dans votre fichier app.yaml.
Mettez à jour votre fichier
app.yamlpour inclure la sectionvpc_access:vpc_access: network_interface: network: projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK subnet: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME tags: - NETWORK_TAGS vpc_egress: EGRESS_SETTING
Remplacez les éléments suivants :
- HOST_PROJECT_ID : ID de votre projet VPC partagé.
- VPC_NETWORK : nom de votre réseau VPC partagé.
- REGION : région de votre service App Engine, qui doit correspondre à la région de votre sous-réseau.
- SUBNET_NAME : nom complet de la ressource de votre sous-réseau.
- Facultatif : NETWORK_TAGS : liste des tags réseau à associer aux instances de votre service App Engine pour une utilisation dans les règles de pare-feu et les stratégies de routage.
Facultatif : EGRESS_SETTING : contrôle la manière dont le trafic sortant est routé. Ce champ accepte les paramètres de configuration suivants :
all-traffic: achemine tout le trafic sortant via le réseau VPC partagé.private-ranges-only(par défaut) : achemine uniquement le trafic destiné à des adresses internes via le réseau VPC partagé.
Déployez votre service en exécutant la commande suivante :
gcloud beta app deploy
Déconnecter un service
Pour supprimer votre service du réseau VPC partagé, procédez comme suit :
- Supprimez la section
vpc_accessde votre fichierapp.yaml. Redéployez votre service :
gcloud beta app deploy
Résoudre les problèmes
Cette section décrit les erreurs courantes que vous pouvez rencontrer lorsque vous utilisez la sortie VPC directe avec un réseau VPC partagé et fournit des conseils sur la manière de les résoudre.
Impossible de supprimer le sous-réseau
Pour supprimer un sous-réseau, vous devez d'abord supprimer toutes les ressources qui l'utilisent. Si App Engine utilise un sous-réseau, vous devez le déconnecter ou le déplacer vers un autre sous-réseau avant de supprimer le sous-réseau.
Après avoir supprimé ou déplacé vos ressources App Engine, attendez une à deux heures qu'App Engine libère les adresses IP avant de supprimer le sous-réseau.
Échecs de déploiement
Si votre déploiement échoue, Google Cloud CLI affiche des messages d'erreur indiquant la cause première. Voici quelques problèmes courants :
Métadonnées de réseau VPC incorrectes, telles qu'un nom de réseau ou de sous-réseau mal orthographié dans votre fichier
app.yaml. Pour corriger les erreurs potentielles, vérifiez la configuration du réseau VPC dans votre fichierapp.yaml.Autorisations IAM insuffisantes. Assurez-vous d' accorder les autorisations requises sur votre compte de service de déploiement. Si vous rencontrez des erreurs d'autorisation lors du déploiement, assurez-vous d'accorder les rôles supplémentaires suivants au compte de service :
- Compte de service Cloud Build (
roles/cloudbuild.builds.builder) - Créateur de jetons du compte de service (
roles/iam.serviceAccountTokenCreator)
- Compte de service Cloud Build (
Impossible de dissocier le réseau VPC partagé
Pour dissocier le réseau VPC partagé dans le projet hôte, suivez les étapes pour déprovisionner les VPC partagés et veillez à déconnecter tous les services App Engine du réseau VPC partagé.
Pour savoir quelles ressources App Engine utilisent le réseau VPC partagé, exécutez la commande suivante :
gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID
Remplacez HOST_PROJECT_ID par l'ID de votre projet hôte de VPC partagé.
Le sous-réseau de sortie VPC directe manque d'adresses IPv4
Si le sous-réseau du réseau VPC manque d'adresses IPv4, App Engine ne peut pas démarrer d'autres instances de service.
Pour résoudre ce problème, envisagez de passer à un sous-réseau avec plus d'adresses IP disponibles ou d'étendre la plage de sous-réseaux.
Afficher les adresses IP allouées
Pour afficher les adresses IP allouées par App Engine, accédez à la page Adresses IP dans la Google Cloud console ou exécutez la commande suivante à partir de Google Cloud CLI :
gcloud compute addresses list