Dirección IP saliente estática

De forma predeterminada, un servicio de Cloud Run se conecta a extremos externos en Internet mediante un grupo de direcciones IP dinámicas. Si el servicio de Cloud Run se conecta a un extremo externo que requiere una dirección IP estática, como una base de datos o una API con un firewall basado en direcciones IP, debes configurar tu servicio de Cloud Run para enrutar las solicitudes con una dirección IP estática.

En esta página, se describe cómo habilitar un servicio de Cloud Run para enviar solicitudes mediante una dirección IP estática.

Recomendamos configurar Cloud Run para enviar tráfico a una red de VPC con la salida de VPC directa. Sin embargo, tienes la opción de Crear un conector.

Descripción general de la tarea

Si quieres permitir que un servicio de Cloud Run enrute solicitudes con una dirección IP estática, debes configurar la salida de VPC del servicio de Cloud Run para que enrute todo el tráfico saliente a través de una red de VPC que tenga una puerta de enlace de Cloud NAT configurada con la dirección IP estática.

Enrutar el tráfico a través de Cloud NAT no produce un salto adicional en tu pila de herramientas de redes, ya que Cloud Router y la puerta de enlace de Cloud NAT proporcionan solo un plano de control, y los paquetes no pasan por ninguno de ellos.

Configura la traducción de direcciones de red (NAT)

Si usas la salida de VPC directa o un conector de Acceso a VPC sin servidores, las solicitudes de tu servicio de Cloud Run llegan a tu red de VPC. Si quieres enrutar las solicitudes salientes a extremos externos con una IP estática, configura una puerta de enlace de Cloud NAT.

gcloud

  1. Crea un Cloud Router nuevo para programar una puerta de enlace de Cloud NAT:

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

    Reemplaza los siguientes valores en este comando:

    • ROUTER_NAME por un nombre para el recurso de Cloud Router que deseas crear
    • NETWORK_NAME por el nombre de la red de VPC que encontraste antes.
    • REGION por la región en la que deseas crear una puerta de enlace de Cloud NAT
  2. Reserva una dirección IP estática. Un recurso de dirección IP reservada retiene la dirección IP subyacente cuando el recurso al que está asociado se borra y se vuelve a crear:

    gcloud compute addresses create ORIGIN_IP_NAME --region=REGION

    Reemplaza los siguientes valores en este comando:

    • ORIGIN_IP_NAME por el nombre que deseas asignar al recurso de dirección IP
    • REGION por la región en la que se ejecutará el router de Cloud NAT. Usa la misma región que tu servicio de Cloud Run para minimizar la latencia y los costos de red.
  3. Crea una configuración de puerta de enlace de Cloud NAT en este router para enrutar el tráfico que se origina desde la red de VPC mediante la dirección IP estática que creaste:

    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

    Reemplaza los siguientes valores en este comando:

    • NAT_NAME por un nombre para el recurso de puerta de enlace de Cloud NAT que deseas crear
    • ROUTER_NAME por el nombre de tu Cloud Router
    • REGION por la región en la que deseas crear una puerta de enlace de Cloud NAT
    • SUBNET_NAME por el nombre de la subred
    • ORIGIN_IP_NAME por el nombre del recurso de dirección IP reservada que creaste en el paso anterior

Terraform

  1. Crea un Cloud Router nuevo para programar una puerta de enlace de Cloud NAT:

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

    Reemplaza cr-static-ip-router por el nombre de la subred.

  2. Reserva una dirección IP estática. Un recurso de dirección IP reservada retiene la dirección IP subyacente cuando el recurso al que está asociado se borra y se vuelve a crear:

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

    Reemplaza cr-static-ip-addr por el nombre de la subred.

  3. Crea una configuración de puerta de enlace de Cloud NAT en este router para enrutar el tráfico que se origina desde la red de VPC mediante la dirección IP estática que creaste:

    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"]
      }
    }

    Reemplaza cr-static-nat por el nombre de la puerta de enlace de Cloud NAT.

Enruta el tráfico de Cloud Run a través de la red de VPC

Después de configurar Cloud NAT, implementa o actualiza tu servicio de Cloud Run con la salida de VPC directa o el conector de Acceso a VPC sin servidores y configura la salida de VPC para enrutar todo el tráfico a través de la red de VPC:

gcloud

  • Salida de VPC directa

    Para implementar o actualizar tu servicio de Cloud Run para usar la salida de VPC directa y enrutar todo el tráfico de salida a través de él, ejecuta el siguiente comando:

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

    Reemplaza los siguientes valores en este comando:

    • SERVICE_NAME por el nombre del servicio de Cloud Run que deseas implementar.
    • IMAGE_URL por una referencia a la imagen del contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • NETWORK por el nombre de la red de VPC.
    • SUBNET por el nombre de la subred
    • REGION por una región para el servicio.
  • Conector de Acceso a VPC sin servidores

    Para implementar o actualizar tu servicio de Cloud Run para usar un conector de Acceso a VPC sin servidores y enrutar todo el tráfico de salida a través de él, ejecuta el siguiente comando:

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

    Reemplaza los siguientes valores en este comando:

    • SERVICE_NAME por el nombre del servicio de Cloud Run que deseas implementar.
    • IMAGE_URL por una referencia a la imagen del contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • CONNECTOR_NAME por el nombre de tu conector de Acceso a VPC sin servidores
    • REGION por una región para el servicio.

Terraform

Este servicio de Cloud Run usa un conector de VPC y enruta todo el tráfico de salida a través de él:

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"

}

Reemplaza us-docker.pkg.dev/cloudrun/container/hello por una referencia a tu imagen de contenedor.

Verifica la dirección IP externa estática

Si completaste los pasos anteriores, configuraste Cloud NAT en tu red de VPC con una dirección IP estática predefinida y enrutaste todo el tráfico saliente de tu servicio de Cloud Run a tu red de VPC. Las solicitudes del servicio de Cloud Run viajan a través de tu red de VPC y llegan a extremos externos mediante la dirección IP estática.

Para verificar este comportamiento y confirmar la dirección IP de origen que usa tu servicio, puedes realizar una solicitud a una API o a un sitio web como curlmyip.org, que muestra la dirección IP de origen.

Borra la dirección IP externa estática

Si ya no necesitas una dirección IP externa estática, consulta Libera una dirección IP externa estática.