Por padrão, um serviço do Cloud Run se conecta a endpoints externos na Internet usando um pool de endereços IP dinâmicos. Esse padrão não é adequado se o serviço do Cloud Run se conectar a um endpoint externo que requer conexões originadas de um endereço IP estático, como um banco de dados ou uma API usando um firewall baseado em endereço IP. Para essas conexões, configure o serviço do Cloud Run para encaminhar solicitações por meio de um endereço IP estático.
Neste guia, descrevemos como permitir que um serviço do Cloud Run envie solicitações usando um endereço IP estático.
Visão geral
Para permitir que um serviço do Cloud Run encaminhe solicitações por meio de um endereço IP estático, é necessário configurar a saída VPC do serviço do Cloud Run para rotear todo o tráfego de saída por meio de uma instância rede VPC que tenha um gateway do Cloud NAT configurado com o endereço IP estático.
Direcionar seu tráfego por meio do Cloud NAT não causa um salto adicional na pilha de rede, porque o gateway do Cloud NAT e o Cloud Router fornecem apenas um plano de controle e os pacotes não passam o gateway NAT ou o Cloud Router.
Todos os serviços do Cloud Run conectados à mesma rede VPC compartilharão o mesmo endereço IP de saída. Para usar endereços IP de saída diferentes para serviços separados do Cloud Run, siga este guia para criar sub-redes separadas e conectores de acesso VPC sem servidor.
crie uma sub-rede
Crie uma sub-rede /28
dedicada para hospedar um conector. Se você estiver usando
a saída direta da VPC, use uma sub-rede atual ou crie outra.
Se você usar um conector, a sub-rede dedicada impedirá que outros recursos de computação na VPC, como VMs do Compute Engine ou clusters do Google Kubernetes Engine, usem acidentalmente o IP estático, se você tiver configurado a VPC sem servidor. Acesso à Internet.
gcloud
Encontre o nome da sua rede VPC:
gcloud compute networks list
O resultado será assim:
NAME SUBNET_MODE BGP_ROUTING_MODE default AUTO REGIONAL
Identifique a rede que será anexada ao conector de acesso VPC sem servidor.
Crie uma sub-rede na VPC para o conector de acesso VPC sem servidor.
gcloud compute networks subnets create SUBNET_NAME \ --range=RANGE --network=NETWORK_NAME --region=REGION
Substitua os seguintes valores neste comando:
SUBNET_NAME
por um nome que você quer dar à sub-rede;RANGE
pelo intervalo de IP no formato CIDR que você quer atribuir a essa sub-rede (por exemplo,10.124.0.0/28
);NETWORK_NAME
pelo nome da rede VPC.REGION
pela região em que você quer criar um conector de acesso VPC sem servidor.
Terraform
Crie a rede VPC a ser usada.
Substitua
cr-static-ip-network
pelo nome da sub-rede.Crie uma sub-rede na VPC para o conector de acesso VPC sem servidor.
Substituir
cr-static-ip
pelo nome da sub-rede10.124.0.0/28
com o intervalo CIDRus-central1
pela região do Google Cloud
Criar um conector de acesso VPC sem servidor
Não é necessário criar um conector se você usar a integração de saída VPC direta. Se você não usa a saída VPC direta, vai precisar de um conector de acesso VPC sem servidor para rotear o tráfego de saída do serviço do Cloud Run para uma rede VPC.
Para criar um conector de acesso VPC sem servidor.
gcloud
Criar um conector de acesso VPC sem servidor com uma sub-rede pré-criada.
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \ --region=REGION \ --subnet-project=PROJECT_ID \ --subnet=SUBNET_NAME
Substitua os seguintes valores neste comando:
CONNECTOR
por um nome que você quer dar a esse recurso.PROJECT_ID
por um nome que hospeda a sub-rede.SUBNET_NAME
pelo nome da sub-rede que você criou.REGION
pela região em que você quer criar um gateway NAT;
Terraform
Crie um conector de acesso VPC sem servidor.
Substitua
cr-conn
pelo nome do conector de acesso VPC sem servidor.
Configurar a conversão de endereços de rede (NAT)
Se você usa a saída VPC direta ou um conector de acesso VPC sem servidor, as solicitações do serviço do Cloud Run chegam à rede VPC. Se você quiser rotear solicitações de saída para endpoints externos por meio de um IP estático, configure um gateway do Cloud NAT.
gcloud
Crie um novo Cloud Router para programar um gateway NAT:
gcloud compute routers create ROUTER_NAME \ --network=NETWORK_NAME \ --region=REGION
Substitua os seguintes valores neste comando:
ROUTER_NAME
com um nome para o recurso do Cloud Router que você quer criar.NETWORK_NAME
pelo nome da rede VPC que você encontrou anteriormente.REGION
pela região em que você quer criar um gateway NAT;
Reservar um endereço IP estático Um recurso de endereço IP reservado retém o endereço IP subjacente quando o recurso ao qual ele está associado é excluído e recriado:
gcloud compute addresses create ORIGIN_IP_NAME --region=REGION
Substitua os seguintes valores neste comando:
ORIGIN_IP_NAME
pelo nome que você quer atribuir ao recurso de endereço IP.REGION
pela região que executará o roteador do Cloud NAT. O ideal é usar a mesma região do serviço do Cloud Run para minimizar os custos de latência e rede.
Crie uma configuração de gateway do Cloud NAT neste roteador para rotear o tráfego proveniente da rede VPC usando o endereço IP estático que você criou:
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
Substitua os seguintes valores neste comando:
NAT_NAME
com um nome para o recurso de gateway do Cloud NAT que você quer criar.ROUTER_NAME
com o nome do seu Cloud RouterREGION
pela região em que você quer criar um gateway NAT;ORIGIN_IP_NAME
pelo nome do recurso de endereço IP reservado criado na etapa anterior;
Terraform
Crie um novo Cloud Router para programar um gateway NAT:
Substitua
cr-static-ip-router
pelo nome da sua sub-rede.Reservar um endereço IP estático Um recurso de endereço IP reservado retém o endereço IP subjacente quando o recurso ao qual ele está associado é excluído e recriado:
Substitua
cr-static-ip-addr
pelo nome da sua sub-rede.Crie uma configuração de gateway do Cloud NAT neste roteador para rotear o tráfego proveniente da rede VPC usando o endereço IP estático que você criou:
Substitua
cr-static-nat
pelo nome do gateway NAT do Cloud.
Como rotear o tráfego do Cloud Run por meio da rede VPC
Depois que o NAT for configurado, implante ou atualize seu serviço do Cloud Run com o conector de saída direta da VPC ou de acesso VPC sem servidor e defina a saída da VPC para encaminhar todo o tráfego pela rede VPC:
gcloud
Saída de VPC direta
Para implantar ou atualizar o serviço do Cloud Run para usar a saída VPC direta e rotear todo o tráfego de saída por ela, execute o seguinte comando:
gcloud run deploy SERVICE_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --region=REGION \ --vpc-egress=all-traffic
Substitua os seguintes valores neste comando:
- SERVICE_NAME pelo nome do serviço do Cloud Run que você quer implantar.
- IMAGE_URL por uma referência à imagem de contêiner. Por
exemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
- NETWORK pelo nome da sua rede VPC;
- SUBNET pelo nome da sub-rede.
- REGION por uma região do seu serviço.
Conector de acesso VPC sem servidor
Para implantar ou atualizar seu serviço do Cloud Run para usar um conector de acesso VPC sem servidor e rotear todo o tráfego de saída por ele, execute o seguinte comando:
gcloud run deploy SERVICE_NAME \ --image=IMAGE_URL \ --vpc-connector=CONNECTOR_NAME \ --region=REGION \ --vpc-egress=all-traffic
Substitua os seguintes valores neste comando:
- SERVICE_NAME pelo nome do serviço do Cloud Run que você quer implantar.
- IMAGE_URL por uma referência à imagem de contêiner. Por
exemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
- CONNECTOR_NAME pelo nome do conector do Acesso VPC sem servidor.
- REGION por uma região do seu serviço.
Terraform
Esse serviço do Cloud Run usa um conector VPC e encaminha todo o tráfego de saída por ele:
Substitua us-docker.pkg.dev/cloudrun/container/hello
por uma referência à imagem do seu contêiner.
Verificar o IP externo estático
Depois de concluir as etapas anteriores, você configurou o Cloud NAT na sua rede VPC com um endereço IP estático predefinido e roteou todo o tráfego de saída do serviço do Cloud Run para sua rede VPC. As solicitações do serviço do Cloud Run passam pela rede VPC e alcançam endpoints externos usando o endereço IP estático.
Para verificar esse comportamento e confirmar o endereço IP de origem que seu serviço usa, faça uma solicitação para uma API ou um site, como curlmyip.org, que mostre o endereço IP de origem do Google Analytics.
Como excluir o IP externo estático
Se você não precisar mais de um endereço IP externo estático, consulte Liberar um endereço IP externo estático.