De forma predeterminada, las cargas de trabajo de Cloud Run se conectan a extremos externos en Internet con un grupo regional de direcciones IP dinámicas que se comparte entre todas las cargas de trabajo sin servidores. Debido a que otras cargas de trabajo comparten este grupo, no debes depender de él cuando necesites una dirección IP de origen predecible o una reputación de IP aislada.
Configura tus cargas de trabajo de Cloud Run para enrutar las solicitudes salientes con una dirección IP estática dedicada en las siguientes situaciones:
- Te conectas a una base de datos o API externa que usa una lista de direcciones IP permitidas o un firewall.
- Te conectas a extremos externos sensibles a la reputación, como puertas de enlace de pagos, bases de datos alojadas o APIs de socios protegidas por firewalls de aplicaciones web (WAF) de terceros. El tráfico ruidoso de otro usuario en el grupo de IP compartido predeterminado puede degradar la reputación de la IP y hacer que los WAF externos bloqueen o limiten tus solicitudes.
- Ejecutas análisis de red autorizados, enumeración de puertos, creación de huellas digitales de hosts, sondeo de vulnerabilidades, extracción de datos web o cargas de trabajo de pruebas de carga.
Para enviar solicitudes salientes desde una dirección IP estática dedicada, configura tu servicio de Cloud Run para que use la salida de VPC directa. También tienes la opción de crear un conector.
Descripción general de la tarea
Para enrutar solicitudes con una dirección IP estática, configura la
salida de VPC del servicio para que envíe todo el tráfico saliente
(--vpc-egress=all-traffic) a través de una red de VPC.
Conecta una puerta de enlace de Cloud NAT a esa red con tu dirección IP estática
reservada.
En este instructivo, configurarás Cloud NAT en modo manual y le asignarás una sola dirección IP estática. Si tus cargas de trabajo escalan a muchas instancias de contenedor o abren muchas conexiones simultáneas, como durante el análisis de red autorizado, asigna varias direcciones IP estáticas a Cloud NAT. También puedes aumentar la cantidad mínima de puertos por instancia de contenedor o habilitar la asignación dinámica de puertos para evitar el agotamiento de puertos. Obtén más información sobre cómo las puertas de enlace de Cloud NAT usan direcciones IP y puertos.
Enrutar el tráfico a través de Cloud NAT no agrega un salto adicional en tu pila de red, ya que la puerta de enlace de Cloud NAT y el Cloud Router proporcionan solo un plano de control, y los paquetes no pasan por la puerta de enlace de NAT ni por el Cloud Router.
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
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 lo siguiente:
ROUTER_NAME: Es un nombre para el recurso de Cloud Router que quieres crear.NETWORK_NAME: Es el nombre de la red de VPC que encontraste antes.REGION: la región en la que deseas crear una puerta de enlace de Cloud 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 lo siguiente:
ORIGIN_IP_NAME: Es el nombre que deseas 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 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 con 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 lo siguiente:
NAT_NAME: Es un nombre para el recurso de puerta de enlace de Cloud NAT que deseas crear.ROUTER_NAME: Es el nombre de tu Cloud Router.REGION: la región en la que deseas crear una puerta de enlace de Cloud NAT.SUBNET_NAME: el nombre de tu subred.ORIGIN_IP_NAME: Es el nombre del recurso de dirección IP reservada que creaste en el paso anterior.
Terraform
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Crea un Cloud Router nuevo para programar una puerta de enlace de Cloud NAT:
Reemplaza
cr-static-ip-routerpor 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-addrpor 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 con la dirección IP estática que creaste:
Reemplaza
cr-static-natpor 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 lo siguiente:
- SERVICE_NAME: Es el nombre del servicio de Cloud Run que deseas implementar.
IMAGE_URL: una referencia a la imagen de contenedor, por ejemplo,us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL sigue el formato deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.- NETWORK: Es el nombre de tu red de VPC.
- SUBNET: el nombre de tu subred.
- REGION: Es una región para tu 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 lo siguiente:
- SERVICE_NAME: Es el nombre del servicio de Cloud Run que deseas implementar.
IMAGE_URL: Es una referencia a la imagen de contenedor, por ejemplo,us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL sigue el formato deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.- CONNECTOR_NAME: Es el nombre de tu conector de Acceso a VPC sin servidores.
- REGION: Es una región para tu servicio.
YAML
Salida de VPC directa
Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:
gcloud run services describe SERVICE --format export > service.yaml
Realiza actualizaciones según sea necesario.
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
Reemplaza lo siguiente:
- SERVICE: Es el nombre del servicio de Cloud Run.
- NETWORK: Es el nombre de tu red de VPC.
- SUBNET: el nombre de tu subred.
- IMAGE_URL: Es la URL de la imagen de contenedor del servicio.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
El comando
gcloud run services replaceusa de forma predeterminada el archivoservice.yamlsi está presente.
Conector de Acceso a VPC sin servidores
Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:
gcloud run services describe SERVICE --format export > service.yaml
Realiza actualizaciones según sea necesario.
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
Reemplaza lo siguiente:
- SERVICE: Es el nombre del servicio de Cloud Run.
- CONNECTOR_NAME: Es el nombre de tu red de Acceso a VPC sin servidores.
IMAGE_URL: una referencia a la imagen de contenedor, por ejemplo,us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL sigue el formato deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Crea o actualiza el servicio con el siguiente comando:
gcloud run services replace service.yaml
El comando
gcloud run services replaceusa de forma predeterminada el archivoservice.yamlsi está presente.
Terraform
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Salida de VPC directa
Este servicio de Cloud Run usa la salida de VPC directa y enruta todo el tráfico de salida a través de ella:
Conector de Acceso a VPC sin servidores
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 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.