고정 아웃바운드 IP 주소

기본적으로 Cloud Run 서비스는 동적 IP 주소 풀을 사용해서 인터넷의 외부 엔드포인트에 연결됩니다. Cloud Run 서비스가 IP 주소 기반 방화벽을 사용하는 데이터베이스 또는 API와 같이 고정 IP 주소가 필요한 외부 엔드포인트에 연결하는 경우 고정 IP 주소를 사용하여 요청을 라우팅하도록 Cloud Run 서비스를 구성해야 합니다.

이 페이지에서는 고정 IP 주소를 사용하여 요청을 전송하도록 Cloud Run 서비스를 사용 설정하는 방법을 설명합니다.

직접 VPC 이그레스를 사용하여 VPC 네트워크로 트래픽을 전송하도록 Cloud Run을 구성하는 것이 좋습니다. 하지만 커넥터를 만들 수 있습니다.

태스크 개요

고정 IP 주소를 사용하여 요청을 라우팅하도록 Cloud Run 서비스를 사용 설정하려면 Cloud NAT 게이트웨이가 고정 IP 주소로 구성된 VPC 네트워크를 통해 모든 아웃바운드 트래픽을 라우팅하도록 Cloud Run 서비스의 VPC 이그레스를 구성합니다.

Cloud NAT 게이트웨이 및 Cloud Router가 컨트롤 플레인만 제공하고, 패킷이 NAT 게이트웨이 또는 Cloud Router를 통과하지 않기 때문에 Cloud NAT를 통해 트래픽을 라우팅해도 네트워킹 스택에 추가 홉이 발생하지 않습니다.

네트워크 주소 변환(NAT) 구성

직접 VPC 이그레스 또는 서버리스 VPC 액세스 커넥터를 사용하는 경우 Cloud Run 서비스의 요청이 VPC 네트워크에 도달합니다. 고정 IP를 사용하여 아웃바운드 요청을 외부 엔드포인트로 라우팅하려면 Cloud NAT 게이트웨이를 구성합니다.

gcloud

  1. Cloud NAT 게이트웨이를 프로그래밍하기 위해 새 Cloud Router를 만듭니다.

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

    이 명령어에서 다음과 같이 값을 바꿉니다.

    • ROUTER_NAME: 만들려는 Cloud Router 리소스 이름
    • NETWORK_NAME: 이전에 찾은 VPC 네트워크 이름
    • REGION: Cloud NAT 게이트웨이를 만들려는 리전
  2. 고정 IP 주소를 예약합니다. 예약된 IP 주소 리소스에는 연관된 리소스가 삭제되고 다시 생성될 때 기본 IP 주소가 유지됩니다.

    gcloud compute addresses create ORIGIN_IP_NAME --region=REGION

    이 명령어에서 다음과 같이 값을 바꿉니다.

    • ORIGIN_IP_NAME: IP 주소 리소스에 할당하려는 이름
    • REGION: Cloud NAT 라우터를 실행할 리전. 지연 시간 및 네트워크 비용을 최소화하기 위해 Cloud Run 서비스와 동일한 리전을 사용합니다.
  3. 생성한 고정 IP 주소를 사용하여 VPC 네트워크에서 시작되는 트래픽을 라우팅하기 위해 이 라우터에서 Cloud NAT 게이트웨이 구성을 만듭니다.

    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

    이 명령어에서 다음과 같이 값을 바꿉니다.

    • NAT_NAME: 만들려는 Cloud NAT 게이트웨이 리소스의 이름
    • ROUTER_NAME: Cloud Router 이름
    • REGION: Cloud NAT 게이트웨이를 만들려는 리전
    • SUBNET_NAME: 서브넷 이름
    • ORIGIN_IP_NAME: 이전 단계에서 만든 예약된 IP 주소 리소스의 이름

Terraform

  1. Cloud NAT 게이트웨이를 프로그래밍하기 위해 새 Cloud Router를 만듭니다.

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

    cr-static-ip-router를 서브넷 이름으로 바꿉니다.

  2. 고정 IP 주소를 예약합니다. 예약된 IP 주소 리소스에는 연관된 리소스가 삭제되고 다시 생성될 때 기본 IP 주소가 유지됩니다.

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

    cr-static-ip-addr를 서브넷 이름으로 바꿉니다.

  3. 생성한 고정 IP 주소를 사용하여 VPC 네트워크에서 시작되는 트래픽을 라우팅하기 위해 이 라우터에서 Cloud NAT 게이트웨이 구성을 만듭니다.

    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"]
      }
    }

    cr-static-nat를 Cloud NAT 게이트웨이 이름으로 바꿉니다.

VPC 네트워크를 통해 Cloud Run 트래픽 라우팅

Cloud NAT가 구성된 후 직접 VPC 이그레스 또는 서버리스 VPC 액세스 커넥터를 사용하여 Cloud Run 서비스를 배포하거나 업데이트하고 모든 트래픽이 VPC 네트워크를 통해 라우팅되도록 VPC 이그레스를 설정합니다.

gcloud

  • 직접 VPC 이그레스

    직접 VPC 이그레스를 사용하고 이를 통해 모든 이그레스 트래픽이 라우팅되도록 Cloud Run 서비스를 배포하거나 업데이트하려면 다음 명령어를 실행합니다.

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

    이 명령어에서 다음과 같이 값을 바꿉니다.

    • SERVICE_NAME을 배포하려는 Cloud Run 서비스의 이름으로 바꿉니다.
    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)로 바꿉니다. Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • NETWORK를 VPC 네트워크의 이름으로 바꿉니다.
    • SUBNET을 서브넷 이름으로 바꿉니다.
    • REGION을 서비스 리전으로 바꿉니다.
  • 서버리스 VPC 액세스 커넥터

    서버리스 VPC 액세스 커넥터를 사용하고 이를 통해 모든 이그레스 트래픽이 라우팅되도록 Cloud Run 서비스를 배포하거나 업데이트하려면 다음 명령어를 실행합니다.

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

    이 명령어에서 다음과 같이 값을 바꿉니다.

    • SERVICE_NAME을 배포하려는 Cloud Run 서비스의 이름으로 바꿉니다.
    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)로 바꿉니다. Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • CONNECTOR_NAME을 서버리스 VPC 액세스 커넥터 이름으로 바꿉니다.
    • REGION을 서비스 리전으로 바꿉니다.

Terraform

이 Cloud Run 서비스는 VPC 커넥터를 사용하고 이를 통해 모든 이그레스 트래픽을 라우팅합니다.

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"

}

us-docker.pkg.dev/cloudrun/container/hello를 컨테이너 이미지에 대한 참조로 바꿉니다.

고정 외부 IP 주소 확인

앞의 단계를 완료하면 VPC 네트워크에 미리 정의된 고정 IP 주소를 사용하여 Cloud NAT가 설정됩니다. 또한 모든 Cloud Run 서비스의 아웃바운드 트래픽이 VPC 네트워크로 라우팅됩니다. Cloud Run 서비스의 요청이 VPC 네트워크를 통과하고 고정 IP 주소를 사용해서 외부 엔드포인트에 연결됩니다.

이 동작을 확인하고 서비스에 사용되는 원래 IP 주소를 확인하기 위해서는 원래 IP 주소를 보여주는 curlmyip.org와 같은 API 또는 웹사이트에 요청을 수행할 수 있습니다.

고정 외부 IP 주소 삭제

고정 외부 IP 주소가 더 이상 필요하지 않으면 고정 외부 IP 주소 해제를 참조하세요.