Endereço IP de saída estático

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. Se o serviço do Cloud Run se conectar a um endpoint externo que requer um endereço IP estático, como um banco de dados ou uma API usando um firewall baseado em endereço IP, configure o serviço do Cloud Run para encaminhar solicitações usando um endereço IP estático.

Esta página descreve como permitir que um serviço do Cloud Run envie solicitações usando um endereço IP estático.

Recomendamos configurar o Cloud Run para enviar tráfego a uma rede VPC usando a saída VPC direta. No entanto, você tem a opção de criar um conector.

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.

Neste tutorial, você configura o Cloud NAT no modo manual e atribui um único endereço IP estático a ele. Se as cargas de trabalho do Cloud Run escalonar verticalmente para um grande número, talvez seja necessário atribuir vários endereços IP estáticos ao Cloud NAT. 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 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.

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

  1. 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.
  2. 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 Cloud NAT Router. Use a mesma região do serviço do Cloud Run para minimizar os custos de latência e rede.
  3. 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 seu Cloud Router.
    • REGION: a região em que você quer criar um gateway do Cloud NAT.
    • SUBNET_NAME: o nome da sua 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.

  1. Crie um novo Cloud Router para programar um gateway da Cloud NAT:

    resource "google_compute_router" "default" {
      name    = "cr-static-ip-router"
      network = google_compute_network.default.name
      region  = google_compute_subnetwork.default.region
    }

    Substitua cr-static-ip-router pelo nome da sua sub-rede.

  2. 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:

    resource "google_compute_address" "default" {
      name   = "cr-static-ip-addr"
      region = google_compute_subnetwork.default.region
    }

    Substitua cr-static-ip-addr pelo nome da sua sub-rede.

  3. 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:

    resource "google_compute_router_nat" "default" {
      name   = "cr-static-nat"
      router = google_compute_router.default.name
      region = google_compute_subnetwork.default.region
    
      nat_ip_allocate_option = "MANUAL_ONLY"
      nat_ips                = [google_compute_address.default.self_link]
    
      source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
      subnetwork {
        name                    = google_compute_subnetwork.default.id
        source_ip_ranges_to_nat = ["ALL_IP_RANGES"]
      }
    }

    Substitua cr-static-nat pelo nome do gateway 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 saída direta da VPC ou o conector 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:

  • 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 de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • NETWORK: o nome da sua rede VPC.
  • SUBNET: o nome da sua sub-rede.
  • REGION: uma região para 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:

  • 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 de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • CONNECTOR_NAME: o nome do seu conector de acesso VPC sem servidor.
  • REGION: uma região para seu serviço.

YAML

Saída de VPC direta

  1. 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
  2. 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 sua sub-rede.
    • IMAGE_URL: o URL da imagem do contêiner de serviço.
  3. Crie ou atualize o serviço usando o seguinte comando:

    gcloud run services replace service.yaml

    O comando gcloud run services replace usa o arquivo service.yaml por padrão, se presente.

Conector de acesso VPC sem servidor

  1. 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
  2. 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 de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  3. Crie ou atualize o serviço usando o seguinte comando:

    gcloud run services replace service.yaml

    O comando gcloud run services replace usa o arquivo service.yaml por padrão, se 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:

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    vpc_access {
      network_interfaces {
        network    = "default"
        subnetwork = "default"
        tags       = ["tag1", "tag2", "tag3"]
      }
    }
  }
}

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:

resource "google_cloud_run_v2_service" "default" {
  name     = "cr-static-ip-service"
  location = google_compute_subnetwork.default.region

  deletion_protection = false # set to "true" in production

  template {
    containers {
      # Replace with the URL of your container
      #   gcr.io/<YOUR_GCP_PROJECT_ID>/<YOUR_CONTAINER_NAME>
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    scaling {
      max_instance_count = 5
    }
    vpc_access {
      connector = google_vpc_access_connector.default.id
      egress    = "ALL_TRAFFIC"
    }
  }
  ingress = "INGRESS_TRAFFIC_ALL"

}

Substitua us-docker.pkg.dev/cloudrun/container/hello por uma referência à imagem do 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.