De forma predeterminada, un servicio de Cloud Run se conecta a puntos finales externos en Internet mediante un grupo de direcciones IP dinámicas. Si el servicio de Cloud Run se conecta a un endpoint externo que requiere una dirección IP estática, como una base de datos o una API que usa un cortafuegos basado en direcciones IP, debes configurar el servicio de Cloud Run para que enrute las solicitudes mediante una dirección IP estática.
En esta página se describe cómo habilitar un servicio de Cloud Run para que envíe solicitudes mediante una dirección IP estática.
Te recomendamos que configures Cloud Run para enviar tráfico a una red de VPC mediante la salida directa de VPC. Sin embargo, puedes crear un conector.
Resumen de la tarea
Para habilitar un servicio de Cloud Run para que enrute las solicitudes mediante una dirección IP estática, configura 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 pasarela Cloud NAT configurada con la dirección IP estática.
En este tutorial, configurarás Cloud NAT en modo manual y le asignarás una sola dirección IP estática. Si tus cargas de trabajo de Cloud Run se escalan a un número elevado, es posible que tengas que asignar varias direcciones IP estáticas a Cloud NAT. Consulta más información sobre cómo usan las direcciones IP y los puertos las pasarelas de Cloud NAT.
Si enrutas el tráfico a través de Cloud NAT, no se produce ningún salto adicional en tu pila de redes, ya que la pasarela de Cloud NAT y Cloud Router solo proporcionan un plano de control y los paquetes no pasan por la pasarela de NAT ni por Cloud Router.
Configurar la traducción de direcciones de red (NAT)
Si usas la salida de VPC directa o un conector de acceso a VPC sin servidor, las solicitudes de tu servicio de Cloud Run llegarán a tu red de VPC. Si quieres enrutar solicitudes salientes a endpoints externos mediante una IP estática, configura una pasarela Cloud NAT.
gcloud
Crea un router de Cloud para programar una pasarela de Cloud NAT:
gcloud compute routers create ROUTER_NAME \ --network=NETWORK_NAME \ --region=REGION
Haz los cambios siguientes:
ROUTER_NAME
: nombre del recurso de Cloud Router que quieras crear.NETWORK_NAME
: el nombre de la red VPC que has encontrado antes.REGION
: la región en la que quieres crear una pasarela de Cloud NAT.
Reserva una dirección IP estática. Un recurso de dirección IP reservada conserva la dirección IP subyacente cuando se elimina y se vuelve a crear el recurso al que está asociado:
gcloud compute addresses create ORIGIN_IP_NAME --region=REGION
Haz los cambios siguientes:
ORIGIN_IP_NAME
: el nombre que quieras asignar al recurso de dirección IP.REGION
: 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 costes de red.
Crea una configuración de pasarela Cloud NAT en este router para enrutar el tráfico procedente de la red de VPC mediante la dirección IP estática que has creado:
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
Haz los cambios siguientes:
NAT_NAME
: nombre del recurso de pasarela Cloud NAT que quieras crear.ROUTER_NAME
: el nombre de tu Cloud Router.REGION
: la región en la que quieres crear una pasarela de Cloud NAT.SUBNET_NAME
: el nombre de tu subred.ORIGIN_IP_NAME
: el nombre del recurso de dirección IP reservada que has creado en el paso anterior.
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Crea un router de Cloud para programar una pasarela de Cloud NAT:
Sustituye
cr-static-ip-router
por el nombre de tu subred.Reserva una dirección IP estática. Un recurso de dirección IP reservada conserva la dirección IP subyacente cuando se elimina y se vuelve a crear el recurso al que está asociado:
Sustituye
cr-static-ip-addr
por el nombre de tu subred.Crea una configuración de pasarela Cloud NAT en este router para enrutar el tráfico procedente de la red de VPC mediante la dirección IP estática que has creado:
Sustituye
cr-static-nat
por el nombre de tu pasarela de Cloud NAT.
Dirigir el tráfico de Cloud Run a través de la red de VPC
Una vez que Cloud NAT esté configurado, implementa o actualiza tu servicio de Cloud Run con salida directa de VPC o el conector Acceso a VPC sin servidor y define la salida de VPC como enrutar todo el tráfico a través de la red de VPC:
gcloud
Salida de VPC directa
Para desplegar o actualizar tu servicio de Cloud Run para que use la salida de VPC directa y enrute todo el tráfico de salida a través de ella, ejecuta el siguiente comando:
gcloud run deploy SERVICE_NAME
--image=IMAGE_URL
--network=NETWORK
--subnet=SUBNET
--region=REGION
--vpc-egress=all-traffic
Haz los cambios siguientes:
- SERVICE_NAME: el nombre del servicio de Cloud Run que quieres desplegar.
- IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - NETWORK: el nombre de tu red de VPC.
- SUBNET: el nombre de tu subred.
- REGION: una región para tu servicio.
Conector de Acceso a VPC sin servidor
Para implementar o actualizar tu servicio de Cloud Run para que use un conector de acceso a VPC sin servidor 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
Haz los cambios siguientes:
- SERVICE_NAME: el nombre del servicio de Cloud Run que quieres desplegar.
- IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - CONNECTOR_NAME: el nombre de tu conector de acceso a VPC sin servidor.
- REGION: una región para tu servicio.
YAML
Salida de VPC directa
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Haga los cambios necesarios.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]' run.googleapis.com/vpc-access-egress: all-traffic spec: containers: - image: IMAGE_URL
Haz los cambios siguientes:
- SERVICE: nombre del servicio de Cloud Run.
- NETWORK: el nombre de tu red de VPC.
- SUBNET: el nombre de tu subred.
- IMAGE_URL: la URL de la imagen del contenedor de tu servicio.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
Conector de Acceso a VPC sin servidor
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Haga los cambios necesarios.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/vpc-access-connector: CONNECTOR_NAME spec: containers: - image: IMAGE_URL
Haz los cambios siguientes:
- SERVICE: nombre del servicio de Cloud Run.
- CONNECTOR_NAME: el nombre de tu red de acceso a VPC sin servidor.
- IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Este servicio de Cloud Run usa un conector de VPC y dirige todo el tráfico de salida a través de él:
Sustituye us-docker.pkg.dev/cloudrun/container/hello
por una referencia a la imagen de tu contenedor.
Verificar la dirección IP externa estática
Después de completar los pasos anteriores, habrás configurado Cloud NAT en tu red VPC con una dirección IP estática predefinida y habrás enrutado todo el tráfico saliente de tu servicio de Cloud Run a tu red VPC. Las solicitudes de tu servicio de Cloud Run viajan a través de tu red VPC y llegan a los endpoints 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 enviar una solicitud a una API o a un sitio web como curlmyip.org, que muestra la dirección IP de origen.
Eliminar la dirección IP externa estática
Si ya no necesitas una dirección IP externa estática, consulta Liberar una dirección IP externa estática.