Adresse IP sortante statique

Par défaut, un service Cloud Run se connecte à des points de terminaison externes sur Internet à l'aide d'un pool d'adresses IP dynamique. Cette valeur par défaut n'est pas adaptée si le service Cloud Run se connecte à un point de terminaison externe nécessitant des connexions provenant d'une adresse IP statique, telle qu'une base de données ou une API utilisant un pare-feu basé sur l'adresse IP. Pour ces connexions, vous devez configurer votre service Cloud Run afin d'acheminer les requêtes via une adresse IP statique.

Ce guide explique comment activer un service Cloud Run pour envoyer des requêtes à l'aide d'une adresse IP statique.

Présentation de la tâche

Pour permettre à un service Cloud Run d'acheminer les requêtes via une adresse IP statique, configurez la sortie VPC du service Cloud Run afin d'acheminer tout le trafic sortant via un Réseau VPC comportant une passerelle Cloud NAT configurée avec l'adresse IP statique.

Le routage de votre trafic via Cloud NAT ne provoque pas de saut supplémentaire dans votre pile réseau, car la passerelle Cloud NAT et le routeur Cloud Router ne fournissent qu'un plan de contrôle, et les paquets ne passent pas par la passerelle NAT ou le routeur cloud.

Notez que tous les services Cloud Run connectés au même réseau VPC partagent la même adresse IP de sortie. Pour utiliser des adresses IP de sortie différentes pour des services Cloud Run distincts, suivez ce guide afin de créer des sous-réseaux distincts et, éventuellement, des connecteurs d'accès au VPC sans serveur distincts.

Créer un sous-réseau

Vous devez créer un sous-réseau /28 dédié pour héberger un connecteur. Si vous utilisez la sortie VPC directe, utilisez un sous-réseau existant ou créez-en un autre. Si vous utilisez un connecteur, le sous-réseau dédié empêche d'autres ressources de calcul de votre VPC, telles que les VM Compute Engine ou les clusters Google Kubernetes Engine, d'utiliser accidentellement l'adresse IP statique si vous avez configuré un VPC sans serveur pour accéder à Internet.

Ligne de commande

  1. Recherchez le nom de votre réseau VPC :

    gcloud compute networks list

    Vous devriez voir une sortie semblable à ce qui suit.

    NAME     SUBNET_MODE  BGP_ROUTING_MODE
    default  AUTO         REGIONAL

    Identifiez le réseau que vous allez associer à votre connecteur d'Accès au VPC sans serveur.

  2. Créez un sous-réseau dans le VPC pour le connecteur d'accès au VPC sans serveur.

    gcloud compute networks subnets create SUBNET_NAME \
    --range=RANGE --network=NETWORK_NAME --region=REGION

    Remplacez les valeurs suivantes dans cette commande :

    • SUBNET_NAME par le nom que vous souhaitez attribuer au sous-réseau ;
    • RANGE par la plage d'adresses IP, au format CIDR, que vous souhaitez attribuer à ce sous-réseau (par exemple, 10.124.0.0/28) ;
    • NETWORK_NAME par le nom du réseau VPC.
    • REGION par la région dans laquelle vous souhaitez créer un connecteur d'accès au VPC sans serveur.

Terraform

  1. Créez le réseau VPC à utiliser.

    resource "google_compute_network" "default" {
      provider = google-beta
      name     = "cr-static-ip-network"
    }

    Remplacez cr-static-ip-network par le nom du sous-réseau.

  2. Créez un sous-réseau dans le VPC pour le connecteur d'accès au VPC sans serveur.

    resource "google_compute_subnetwork" "default" {
      provider      = google-beta
      name          = "cr-static-ip"
      ip_cidr_range = "10.124.0.0/28"
      network       = google_compute_network.default.id
      region        = "us-central1"
    }

    Remplacer

    • cr-static-ip par le nom de votre sous-réseau
    • 10.124.0.0/28 par votre plage CIDR
    • us-central1 avec votre région Google Cloud

Créez un connecteur d'accès au VPC sans serveur.

Vous n'avez pas besoin de créer de connecteur si vous utilisez l'intégration de sortie VPC directe. Si vous n'utilisez pas la sortie VPC directe, vous avez besoin d'un connecteur d'accès au VPC sans serveur pour acheminer le trafic sortant de votre service Cloud Run vers un réseau VPC.

Créez un connecteur d'accès au VPC sans serveur.

Ligne de commande

  1. Créez un connecteur d'accès au VPC sans serveur avec un sous-réseau pré-créé.

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
      --region=REGION \
      --subnet-project=PROJECT_ID \
      --subnet=SUBNET_NAME
    

    Remplacez les valeurs suivantes dans cette commande :

    • CONNECTOR par le nom que vous souhaitez attribuer à cette ressource.
    • PROJECT_ID par un nom qui héberge le sous-réseau.
    • SUBNET_NAME par le nom du sous-réseau que vous avez créé.
    • REGION par la région dans laquelle vous souhaitez créer une passerelle NAT.

Terraform

  1. Créez un connecteur d'accès au VPC sans serveur.

    resource "google_project_service" "vpc" {
      provider           = google-beta
      service            = "vpcaccess.googleapis.com"
      disable_on_destroy = false
    }
    
    resource "google_vpc_access_connector" "default" {
      provider = google-beta
      name     = "cr-conn"
      region   = "us-central1"
    
      subnet {
        name = google_compute_subnetwork.default.name
      }
    
      # Wait for VPC API enablement
      # before creating this resource
      depends_on = [
        google_project_service.vpc
      ]
    }

    Remplacez cr-conn par le nom de votre connecteur d'accès au VPC sans serveur.

Configurer la traduction d'adresse réseau (NAT)

Si vous utilisez la sortie VPC directe ou un connecteur d'accès au VPC sans serveur, les requêtes du service Cloud Run arrivent sur votre réseau VPC. Si vous souhaitez acheminer les requêtes sortantes vers des points de terminaison externes via une adresse IP statique, configurez une passerelle Cloud NAT.

Ligne de commande

  1. Créez un Cloud Router pour programmer une passerelle NAT :

    gcloud compute routers create ROUTER_NAME \
      --network=NETWORK_NAME \
      --region=REGION

    Remplacez les valeurs suivantes dans cette commande :

    • ROUTER_NAME par le nom de la ressource Cloud Router que vous souhaitez créer.
    • NETWORK_NAME par le nom du réseau VPC que vous avez trouvé précédemment.
    • REGION par la région dans laquelle vous souhaitez créer une passerelle NAT.
  2. Réserver une adresse IP statique Une ressource d'adresse IP réservée conserve l'adresse IP sous-jacente lorsque la ressource à laquelle elle est associée est supprimée et recréée :

    gcloud compute addresses create ORIGIN_IP_NAME --region=REGION

    Remplacez les valeurs suivantes dans cette commande :

    • ORIGIN_IP_NAME par le nom que vous souhaitez attribuer à la ressource d'adresse IP.
    • REGION par la région qui exécute le routeur Cloud NAT. Idéalement, la même région que votre service Cloud Run, afin de minimiser la latence et les coûts du réseau.
  3. Créez une configuration de passerelle Cloud NAT sur ce routeur pour acheminer le trafic provenant du réseau VPC à l'aide de l'adresse IP statique que vous avez créée :

    gcloud compute routers nats create NAT_NAME \
      --router=ROUTER_NAME \
      --region=REGION \
      --nat-custom-subnet-ip-ranges=SUBNET_NAME \
      --nat-external-ip-pool=ORIGIN_IP_NAME
    

    Remplacez les valeurs suivantes dans cette commande :

    • NAT_NAME par le nom de la ressource de passerelle Cloud NAT que vous souhaitez créer.
    • ROUTER_NAME par le nom de votre Cloud Router.
    • REGION par la région dans laquelle vous souhaitez créer une passerelle NAT.
    • ORIGIN_IP_NAME par le nom de la ressource d'adresse IP réservée que vous avez créée à l'étape précédente.

Terraform

  1. Créez un Cloud Router pour programmer une passerelle NAT :

    resource "google_compute_router" "default" {
      provider = google-beta
      name     = "cr-static-ip-router"
      network  = google_compute_network.default.name
      region   = google_compute_subnetwork.default.region
    }

    Remplacez cr-static-ip-router par le nom de votre sous-réseau.

  2. Réserver une adresse IP statique Une ressource d'adresse IP réservée conserve l'adresse IP sous-jacente lorsque la ressource à laquelle elle est associée est supprimée et recréée :

    resource "google_compute_address" "default" {
      provider = google-beta
      name     = "cr-static-ip-addr"
      region   = google_compute_subnetwork.default.region
    }

    Remplacez cr-static-ip-addr par le nom de votre sous-réseau.

  3. Créez une configuration de passerelle Cloud NAT sur ce routeur pour acheminer le trafic provenant du réseau VPC à l'aide de l'adresse IP statique que vous avez créée :

    resource "google_compute_router_nat" "default" {
      provider = google-beta
      name     = "cr-static-nat"
      router   = google_compute_router.default.name
      region   = google_compute_subnetwork.default.region
    
      nat_ip_allocate_option = "MANUAL_ONLY"
      nat_ips                = [google_compute_address.default.self_link]
    
      source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
      subnetwork {
        name                    = google_compute_subnetwork.default.id
        source_ip_ranges_to_nat = ["ALL_IP_RANGES"]
      }
    }

    Remplacez cr-static-nat par le nom de votre passerelle Cloud NAT.

Acheminer le trafic Cloud Run via le réseau VPC

Une fois NAT configuré, il vous suffit de déployer votre service Cloud Run avec une sortie VPC directe ou le connecteur d'accès au VPC sans serveur, puis de définir la sortie VPC pour acheminer tout le trafic via le réseau VPC.

Ligne de commande

Déployez ou mettez à jour votre service Cloud Run pour utiliser la sortie VPC directe ou le connecteur VPC, et acheminer tout le trafic sortant via celui-ci :

gcloud run deploy SERVICE_NAME \
   --image=IMAGE_URL \
   --vpc-connector=CONNECTOR_NAME \
   --network=NETWORK \
   --subnet=SUBNET \
   --region=REGION \
   --vpc-egress=all-traffic

Remplacez les valeurs suivantes dans cette commande :

  • SERVICE_NAME par le nom du service Cloud Run que vous souhaitez déployer.
  • IMAGE_URL par une référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante : REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • Facultatif. CONNECTOR_NAME par le nom de votre connecteur d'accès au VPC sans serveur si vous n'utilisez pas la sortie VPC directe.
  • NETWORK par le nom de votre réseau VPC ;
  • SUBNET par le nom de votre sous-réseau.
  • REGION par une région pour votre service.

Terraform

Ce service Cloud Run utilise un connecteur VPC et achemine tout le trafic de sortie via celui-ci :

resource "google_cloud_run_v2_service" "default" {
  provider = google-beta
  name     = "cr-static-ip-service"
  location = google_compute_subnetwork.default.region

  template {
    containers {
      # Replace with the URL of your container
      #   gcr.io/<YOUR_GCP_PROJECT_ID>/<YOUR_CONTAINER_NAME>
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    scaling {
      max_instance_count = 5
    }
    vpc_access {
      connector = google_vpc_access_connector.default.id
      egress    = "ALL_TRAFFIC"
    }
  }
  ingress = "INGRESS_TRAFFIC_ALL"

}

Remplacez us-docker.pkg.dev/cloudrun/container/hello par une référence à votre image de conteneur.

Vérifier l'adresse IP externe statique

Une fois la procédure ci-dessus terminée, vous avez configuré Cloud NAT sur votre réseau VPC avec une adresse IP statique prédéfinie, et vous avez acheminé tout le trafic sortant de votre service Cloud Run vers votre réseau VPC. Les requêtes en provenance de votre service Cloud Run sont acheminées via votre réseau VPC et atteignent les points de terminaison externes à l'aide de l'adresse IP statique.

Pour vérifier ce comportement et confirmer l'adresse IP d'origine utilisée par votre service, vous pouvez envoyer une requête à une API ou à un site Web tel que curlmyip.org qui affiche l'adresse IP d'origine.

Supprimer l'adresse IP externe statique

Si vous n'avez plus besoin d'adresse IP externe statique, consultez la page Libérer une adresse IP externe statique.