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. Si le service Cloud Run se connecte à un point de terminaison externe nécessitant une adresse IP statique, telle qu'une base de données ou une API utilisant un pare-feu basé sur l'adresse IP, vous devez configurer votre service Cloud Run pour acheminer les requêtes à l'aide d'une adresse IP statique.

Cette page 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 à l'aide d'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.

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 cette page 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 réseau 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.

gcloud

  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" {
      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" {
      name          = "cr-static-ip"
      ip_cidr_range = "10.124.0.0/28"
      network       = google_compute_network.default.id
      region        = "us-central1"
    }

    Remplacez les éléments suivants :

    • 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.

gcloud

  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 Cloud NAT.

Terraform

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

    resource "google_project_service" "vpc" {
      service            = "vpcaccess.googleapis.com"
      disable_on_destroy = false
    }
    
    resource "google_vpc_access_connector" "default" {
      name          = "cr-conn"
      region        = "us-central1"
      min_instances = 2
      max_instances = 3
    
      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 à l'aide d'une adresse IP statique, configurez une passerelle Cloud NAT.

gcloud

  1. Créez un Cloud Router pour programmer une passerelle Cloud 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 Cloud 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 Cloud NAT.
    • SUBNET_NAME par le nom de votre sous-réseau.
    • 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 Cloud NAT :

    resource "google_compute_router" "default" {
      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" {
      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" {
      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 la Cloud NAT configurée, déployez ou mettez à jour votre service Cloud Run avec la sortie VPC directe ou le connecteur d'accès au VPC sans serveur, puis définissez la sortie VPC pour acheminer tout le trafic via le réseau VPC :

gcloud

  • Sortie VPC directe

    Pour déployer ou mettre à jour votre service Cloud Run afin d'utiliser la sortie VPC directe et d'acheminer tout le trafic de sortie via celui-ci, exécutez la commande suivante :

    gcloud run deploy SERVICE_NAME \
    --image=IMAGE_URL \
    --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 : LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • 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.
  • Connecteur d'accès au VPC sans serveur

    Pour déployer ou mettre à jour votre service Cloud Run afin d'utiliser un connecteur d'accès au VPC sans serveur et d'acheminer tout le trafic sortant via celui-ci, exécutez la commande suivante :

    gcloud run deploy SERVICE_NAME \
    --image=IMAGE_URL \
    --vpc-connector=CONNECTOR_NAME \
    --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 : LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • CONNECTOR_NAME par le nom de votre connecteur d'accès au VPC sans serveur.
    • 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" {
  name     = "cr-static-ip-service"
  location = google_compute_subnetwork.default.region

  deletion_protection = false # set to "true" in production

  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.