Por padrão, as cargas de trabalho do Cloud Run se conectam a endpoints externos na Internet usando um pool regional de endereços IP dinâmicos compartilhados entre todas as cargas de trabalho sem servidor. Como outras cargas de trabalho compartilham esse pool, não dependa dele quando precisar de um endereço IP de origem previsível ou de uma reputação de IP isolada.
Configure as cargas de trabalho do Cloud Run para rotear solicitações de saída usando um endereço IP estático dedicado nas seguintes situações:
- Você se conecta a um banco de dados ou API externa que usa uma lista de permissões de endereço IP ou um firewall.
- Você se conecta a endpoints externos sensíveis à reputação, como gateways de pagamento, bancos de dados hospedados ou APIs de parceiros protegidas por firewalls de aplicativos da Web (WAFs) de terceiros. O tráfego ruidoso de outro locatário no pool de IPs compartilhados padrão pode degradar a reputação do IP e fazer com que WAFs externos bloqueiem ou limitem suas solicitações.
- Você executa verificações de rede autorizadas, enumeração de portas, impressão digital de host, sondagem de vulnerabilidades, extração de dados da Web ou cargas de trabalho de teste de carga.
Para enviar solicitações de saída de um endereço IP estático dedicado, configure o serviço do Cloud Run para usar a saída de VPC direta. Você também pode criar um conector.
Visão geral
Para rotear solicitações usando um endereço IP estático, configure a saída VPC do serviço para enviar todo o tráfego de saída (--vpc-egress=all-traffic) por uma rede VPC.
Anexe um gateway do Cloud NAT a essa rede com seu endereço IP estático reservado.
Neste tutorial, você vai configurar o Cloud NAT no modo manual e atribuir um único endereço IP estático a ele. Se as cargas de trabalho forem escalonadas para muitas instâncias de contêiner ou abrirem muitas conexões simultâneas, como durante a verificação de rede autorizada, atribua vários endereços IP estáticos ao Cloud NAT. Também é possível aumentar o número mínimo de portas por instância de contêiner ou ativar a alocação dinâmica de portas para evitar o esgotamento de portas. Saiba mais sobre como os gateways do Cloud NAT usam endereços IP e portas.
Direcionar seu tráfego por meio do Cloud NAT não adiciona um salto extra 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 pelo gateway NAT ou pelo Cloud Router.
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 da Cloud NAT:
gcloud compute routers create ROUTER_NAME \ --network=NETWORK_NAME \ --region=REGION
Substitua:
ROUTER_NAME: um nome para o recurso do Cloud Router que você quer criar.NETWORK_NAME: o nome da rede VPC que você encontrou anteriormente.REGION: a região em que você quer criar um gateway do Cloud 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:
ORIGIN_IP_NAME: o nome que você quer atribuir ao recurso de endereço IP.REGION: a região que vai executar o roteador do Cloud NAT. Use 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:
NAT_NAME: um nome para o recurso de gateway do Cloud NAT que você quer criar.ROUTER_NAME: o nome do Cloud Router.REGION: a região em que você quer criar um gateway do Cloud NAT.SUBNET_NAME: o nome da sub-rede.ORIGIN_IP_NAME: o nome do recurso de endereço IP reservado criado na etapa anterior.
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Crie um novo Cloud Router para programar um gateway da Cloud NAT:
Substitua
cr-static-ip-routerpelo 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-addrpelo 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-natpelo nome do gateway do Cloud NAT.
Como rotear o tráfego do Cloud Run por meio da rede VPC
Depois que o Cloud NAT for configurado, implante ou atualize seu serviço do Cloud Run com o conector de saída VPC diretaou de acesso VPC sem servidore 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:
- SERVICE_NAME: o nome do serviço do Cloud Run que você quer implantar.
IMAGE_URL: uma referência à imagem do 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 segue o formato deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.- NETWORK: o nome da sua rede VPC.
- SUBNET: o nome da sub-rede.
- REGION: uma região para o 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:
- SERVICE_NAME: o nome do serviço do Cloud Run que você quer implantar.
IMAGE_URL: uma referência à imagem do 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 segue o formato deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.- CONNECTOR_NAME: o nome do conector de acesso VPC sem servidor.
- REGION: uma região para o serviço.
YAML
Saída de VPC direta
Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço, faça o download da configuração YAML correspondente:
gcloud run services describe SERVICE --format export > service.yaml
Faça as atualizações necessárias.
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
Substitua:
- SERVICE: o nome do serviço do Cloud Run.
- NETWORK: o nome da sua rede VPC.
- SUBNET: o nome da sub-rede.
- IMAGE_URL: o URL da imagem do contêiner de serviço.
Crie ou atualize o serviço usando o seguinte comando:
gcloud run services replace service.yaml
O comando
gcloud run services replaceusa o arquivoservice.yamlpor padrão, se ele estiver presente.
Conector de acesso VPC sem servidor
Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço, faça o download da configuração YAML correspondente:
gcloud run services describe SERVICE --format export > service.yaml
Faça as atualizações necessárias.
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
Substitua:
- SERVICE: o nome do serviço do Cloud Run.
- CONNECTOR_NAME: o nome da sua rede de acesso VPC sem servidor.
IMAGE_URL: uma referência à imagem do 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 segue o formato deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
Crie ou atualize o serviço usando o seguinte comando:
gcloud run services replace service.yaml
O comando
gcloud run services replaceusa o arquivoservice.yamlpor padrão, se ele estiver presente.
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Saída de VPC direta
Esse serviço do Cloud Run usa a saída VPC direta e encaminha todo o tráfego de saída por ela:
Conector de acesso VPC sem servidor
Esse serviço do Cloud Run usa um conector de 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 endereç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 endereç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.