De forma predeterminada, un servicio de Cloud Run se conecta a extremos externos en Internet mediante un grupo de direcciones IP dinámicas. Esta configuración predeterminada no es apropiada si el servicio de Cloud Run se conecta a un extremo externo que requiere conexiones que se originen desde una dirección IP estática, como una base de datos o una API con un firewall basado en direcciones IP. En el caso de esas conexiones, debes configurar tu servicio de Cloud Run para enrutar las solicitudes a través de una dirección IP estática.
En esta guía, se describe cómo habilitar un servicio de Cloud Run para enviar solicitudes mediante una dirección IP estática.
Descripción general de la tarea
Si quieres permitir que un servicio de Cloud Run enrute solicitudes a través de una dirección IP estática, debes configurar la salida de VPC del servicio de Cloud Run con el fin de que enrute todo el tráfico saliente mediante 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.
Ten en cuenta que todos los servicios de Cloud Run conectados a la misma red de VPC compartirán la misma dirección IP de salida. Si deseas usar diferentes direcciones IP de salida para servicios de Cloud Run independientes, sigue esta guía a fin de crear subredes independientes y, de manera opcional, conectores de Acceso a VPC sin servidores.
Crea una subred
Debes crear una subred /28
dedicada para alojar un conector. Si usas la salida de VPC directa, usa una subred existente o crea otra.
Si usas un conector, la subred dedicada evita que otros recursos de procesamiento en tu VPC, como las VMs de Compute Engine o los clústeres de Google Kubernetes Engine, usen de forma accidental la IP estática, si configuraste el Acceso a VPC sin servidores para acceder a Internet.
gcloud
Busca el nombre de tu red de VPC:
gcloud compute networks list
Deberías ver un resultado como el siguiente:
NAME SUBNET_MODE BGP_ROUTING_MODE default AUTO REGIONAL
Identifica la red que conectarás al conector de Acceso a VPC sin servidores.
Crea una subred en la VPC para el conector de acceso a VPC sin servidores.
gcloud compute networks subnets create SUBNET_NAME \ --range=RANGE --network=NETWORK_NAME --region=REGION
Reemplaza los siguientes valores en este comando:
SUBNET_NAME
por el nombre que deseas darle a la subredRANGE
por el rango de IP en formato CIDR que deseas asignar a esta subred (p. ej.,10.124.0.0/28
)NETWORK_NAME
por el nombre de la red de VPC.REGION
por la región en la que deseas crear un conector de acceso a VPC sin servidores.
Terraform
Crea la red de VPC que se usará.
Reemplaza
cr-static-ip-network
por el nombre de la subred.Crea una subred en la VPC para el conector de acceso a VPC sin servidores.
Reemplazar
cr-static-ip
por el nombre de la subred10.124.0.0/28
por tu rango de CIDRus-central1
por tu región de Google Cloud
Creación de un conector de acceso a VPC sin servidores
No es necesario crear un conector si usas la integración de salida de VPC directa. Si no usas la salida de VPC directa, necesitas un conector de Acceso a VPC sin servidores para enrutar el tráfico saliente del servicio de Cloud Run a una red de VPC.
Sigue estos pasos para crear un conector de Acceso a VPC sin servidores.
gcloud
Crea un conector de acceso a VPC sin servidores con una subred creada con anterioridad.
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \ --region=REGION \ --subnet-project=PROJECT_ID \ --subnet=SUBNET_NAME
Reemplaza los siguientes valores en este comando:
CONNECTOR
por el nombre que deseas asignarle a este recurso.PROJECT_ID
por un nombre que aloje la subred.SUBNET_NAME
por el nombre de la subred que creaste.REGION
por la región en la que deseas crear una puerta de enlace NAT
Terraform
Crea un conector de Acceso a VPC sin servidores.
Reemplaza
cr-conn
por el nombre de tu conector de Acceso a VPC sin servidores.
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 por medio de una IP estática, configura una puerta de enlace de Cloud NAT.
gcloud
Crea un Cloud Router nuevo para programar una puerta de enlace 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 crearNETWORK_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 NAT
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 IPREGION
por la región en la que se ejecutará el router de Cloud NAT. Lo ideal sería que el router esté en la misma región en la que está tu servicio de Cloud Run para minimizar la latencia y los costos de red
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 crearROUTER_NAME
por el nombre de tu Cloud RouterREGION
por la región en la que deseas crear una puerta de enlace NATORIGIN_IP_NAME
por el nombre del recurso de dirección IP reservada que creaste en el paso anterior
Terraform
Crea un Cloud Router nuevo para programar una puerta de enlace NAT:
Reemplaza
cr-static-ip-router
por el nombre de la subred.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:
Reemplaza
cr-static-ip-addr
por el nombre de la subred.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:
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 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, haz lo siguiente:
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 formatoLOCATION-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 formatoLOCATION-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:
Reemplaza us-docker.pkg.dev/cloudrun/container/hello
por una referencia a tu imagen de contenedor.
Verifica la 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 IP externa estática
Si ya no necesitas una dirección IP externa estática, consulta Libera una dirección IP externa estática.