Endereço IP de saída estático

Por predefinição, um serviço do Cloud Run estabelece ligação a pontos finais externos na Internet através de um conjunto de endereços IP dinâmicos. Se o serviço do Cloud Run se ligar a um ponto final externo que requer um endereço IP estático, como uma base de dados ou uma API que usa uma firewall baseada em endereços IP, tem de configurar o serviço do Cloud Run para encaminhar pedidos através de um endereço IP estático.

Esta página descreve como ativar um serviço do Cloud Run para enviar pedidos através de um endereço IP estático.

Recomendamos que configure o Cloud Run para enviar tráfego para uma rede VPC através da saída direta da VPC. No entanto, tem a opção de criar um conetor.

Vista geral da tarefa

Para permitir que um serviço do Cloud Run encaminhe pedidos através de um endereço IP estático, configure a saída da VPC do serviço do Cloud Run para encaminhar todo o tráfego de saída através de uma rede VPC que tenha um gateway Cloud NAT configurado com o endereço IP estático.

Neste tutorial, vai configurar o Cloud NAT no modo manual e atribuir-lhe um único endereço IP estático. Se as suas cargas de trabalho do Cloud Run forem dimensionadas para um grande número, pode ter de atribuir vários endereços IP estáticos ao Cloud NAT. Saiba como os gateways do Cloud NAT usam endereços IP e portas.

O encaminhamento do seu tráfego através do Cloud NAT não causa um salto adicional na sua pilha de rede, uma vez que o gateway do Cloud NAT e o Cloud Router fornecem apenas um plano de controlo, e os pacotes não passam pelo gateway do NAT nem pelo Cloud Router.

Configure a tradução de endereços de rede (NAT)

Se usar a saída da VPC direta ou um conetor do Acesso a VPC sem servidor, os pedidos do seu serviço do Cloud Run chegam à sua rede VPC. Se quiser encaminhar pedidos de saída para pontos finais externos através de um IP estático, configure um gateway do Cloud NAT.

gcloud

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

    gcloud compute routers create ROUTER_NAME \
      --network=NETWORK_NAME \
      --region=REGION

    Substitua o seguinte:

    • ROUTER_NAME: um nome para o recurso do Cloud Router que quer criar.
    • NETWORK_NAME: o nome da rede VPC que encontrou anteriormente.
    • REGION: a região na qual quer criar um gateway de NAT na nuvem.
  2. Reserve 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 está associado é eliminado e recriado:

    gcloud compute addresses create ORIGIN_IP_NAME --region=REGION

    Substitua o seguinte:

    • ORIGIN_IP_NAME: o nome que quer atribuir ao recurso de endereço IP.
    • REGION: a região que vai executar o router NAT na nuvem. Use a mesma região que o seu serviço do Cloud Run para minimizar a latência e os custos de rede.
  3. Crie uma configuração de gateway NAT da nuvem neste router para encaminhar o tráfego originário da rede VPC através do endereço IP estático que 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 o seguinte:

    • NAT_NAME: um nome para o recurso de gateway do Cloud NAT que quer criar.
    • ROUTER_NAME: o nome do seu Cloud Router.
    • REGION: a região na qual quer criar um gateway de NAT na nuvem.
    • SUBNET_NAME: o nome da sua sub-rede.
    • ORIGIN_IP_NAME: o nome do recurso de endereço IP reservado que criou no passo anterior.

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

  1. Crie um novo Cloud Router para programar uma gateway do 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. Reserve 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 está associado é eliminado 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 NAT da nuvem neste router para encaminhar o tráfego originário da rede VPC através do endereço IP estático que 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 da gateway do Cloud NAT.

Encaminhe o tráfego do Cloud Run através da rede VPC

Depois de configurar o Cloud NAT, implemente ou atualize o seu serviço do Cloud Run com a saída da VPC direta ou o conetor do Acesso a VPC sem servidor e defina a saída da VPC para encaminhar todo o tráfego através da rede VPC:

gcloud

Saída direta da VPC

Para implementar ou atualizar o seu serviço do Cloud Run para usar a saída do VPC direto e encaminhar todo o tráfego de saída através dele, execute o seguinte comando:

gcloud run deploy SERVICE_NAME 
--image=IMAGE_URL
--network=NETWORK
--subnet=SUBNET
--region=REGION
--vpc-egress=all-traffic

Substitua o seguinte:

  • SERVICE_NAME: o nome do serviço do Cloud Run que quer implementar.
  • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato 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 o seu serviço.

Conetor do Acesso a VPC sem servidor

Para implementar ou atualizar o seu serviço do Cloud Run para usar um conetor do Acesso a VPC sem servidor e encaminhar todo o tráfego de saída através dele, execute o seguinte comando:

gcloud run deploy SERVICE_NAME 
--image=IMAGE_URL
--vpc-connector=CONNECTOR_NAME
--region=REGION
--vpc-egress=all-traffic

Substitua o seguinte:

  • SERVICE_NAME: o nome do serviço do Cloud Run que quer implementar.
  • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • CONNECTOR_NAME: o nome do seu conetor do Acesso a VPC sem servidor.
  • REGION: uma região para o seu serviço.

YAML

Saída direta da VPC

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize conforme necessário.

    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 o seguinte:

    • 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 contentor de serviços.
  3. Crie ou atualize o serviço com o seguinte comando:

    gcloud run services replace service.yaml

Conetor do Acesso a VPC sem servidor

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize conforme necessário.

    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 o seguinte:

    • SERVICE: o nome do serviço do Cloud Run.
    • CONNECTOR_NAME: o nome da sua rede do Acesso a VPC sem servidor.
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  3. Crie ou atualize o serviço com o seguinte comando:

    gcloud run services replace service.yaml

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Este serviço do Cloud Run usa um conetor de VPC e encaminha todo o tráfego de saída através dele:

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 contentor.

Valide o endereço IP externo estático

Depois de concluir os passos anteriores, configurou o Cloud NAT na sua rede VPC com um endereço IP estático predefinido e encaminhou todo o tráfego de saída do seu serviço do Cloud Run para a sua rede VPC. Os pedidos do seu serviço do Cloud Run viajam através da sua rede VPC e alcançam os pontos finais externos através do endereço IP estático.

Para verificar este comportamento e confirmar o endereço IP de origem que o seu serviço usa, pode fazer um pedido a uma API ou a um Website, como curlmyip.org, que mostra o endereço IP de origem.

Eliminar o endereço IP externo estático

Se já não precisar de um endereço IP externo estático, consulte o artigo Libertar um endereço IP externo estático.