공유 VPC 호스트 프로젝트에서 커넥터 구성

조직에서 공유 VPC를 사용하는 경우 서비스 프로젝트 또는 호스트 프로젝트에서 서버리스 VPC 액세스 커넥터를 설정할 수 있습니다. 이 가이드에서는 호스트 프로젝트에서 커넥터를 설정하는 방법을 보여줍니다.

서비스 프로젝트에서 커넥터를 설정해야 하는 경우 서비스 프로젝트에서 커넥터 구성을 참조하세요. 각 방법의 장점에 대한 자세한 내용은 공유 VPC 네트워크에 연결을 참조하세요.

시작하기 전에

  1. 현재 사용 중인 계정의 Identity and Access Management(IAM) 역할을 확인합니다. 활성 계정에는 호스트 프로젝트의 다음 역할이 있어야 합니다.

  2. 원하는 환경의 호스트 프로젝트를 선택합니다.

콘솔

  1. Google Cloud 콘솔 대시보드를 엽니다.

    Google Cloud 콘솔 대시보드로 이동

  2. 대시보드 상단의 메뉴 바에서 프로젝트 드롭다운 메뉴를 클릭하고 호스트 프로젝트를 선택합니다.

gcloud

터미널에서 다음을 실행하여 gcloud CLI의 기본 프로젝트를 호스트 프로젝트로 설정합니다.

gcloud config set project HOST_PROJECT_ID

다음을 바꿉니다.

  • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 프로젝트 ID 입니다.

서버리스 VPC 액세스 커넥터 만들기

VPC 네트워크에 요청을 보내고 해당 응답을 수신하려면 서버리스 VPC 액세스 커넥터를 만들어야 합니다. Google Cloud 콘솔, Google Cloud CLI 또는 Terraform을 사용하여 커넥터를 만들 수 있습니다.

콘솔

  1. 프로젝트에 대해 서버리스 VPC 액세스 API를 사용 설정합니다.

    API 사용 설정

  2. 서버리스 VPC 액세스 개요 페이지로 이동합니다.

    서버리스 VPC 액세스로 이동

  3. 커넥터 만들기를 클릭합니다.

  4. 이름 필드에 커넥터 이름을 입력합니다. 이름은 Compute Engine 이름 지정 규칙을 따라야 하며 21자(영문 기준) 미만이어야 합니다. 하이픈(-)은 2자로 계산됩니다.

  5. 리전 필드에서 커넥터의 리전을 선택합니다. 이 리전은 서버리스 서비스의 리전과 일치해야 합니다.

    서비스가 us-central 또는 europe-west 리전에 있으면 us-central1 또는 europe-west1을 사용합니다.

  6. 네트워크 필드에서 커넥터를 연결할 VPC 네트워크를 선택합니다.

  7. 서브네트워크 풀다운 메뉴를 클릭합니다.

    사용하지 않는 /28 서브넷을 선택합니다.

    • 서브넷은 커넥터에서만 사용되어야 합니다. VM, Private Service Connect 또는 부하 분산기와 같은 다른 리소스에서는 사용될 수 없습니다.
    • 서브넷이 Private Service Connect 또는 Cloud Load Balancing에 사용되지 않는지 확인하려면 gcloud CLI에서 다음 명령어를 실행하여 purpose 서브넷이 PRIVATE인지 확인합니다.
      gcloud compute networks subnets describe SUBNET_NAME
      
      SUBNET_NAME을 서브넷 이름으로 바꿉니다.
  8. (선택사항) 커넥터를 추가로 제어하기 위해 확장 옵션을 설정하려면 확장 설정 표시를 클릭하여 확장 양식을 표시합니다.

    1. 커넥터의 최소 및 최대 인스턴스 수를 설정하거나 기본값 2(최소)와 10(최대)을 사용합니다. 커넥터는 트래픽 증가에 따라 지정된 최댓값으로 수평 확장되지만 트래픽이 감소하면 커넥터가 다시 축소되지 않습니다. 210 사이의 값을 사용해야 하며 MIN 값은 MAX 값보다 작아야 합니다.
    2. 인스턴스 유형 풀다운 메뉴에서 커넥터에 사용할 머신 유형을 선택하거나 기본 e2-micro를 사용합니다. 대역폭과 비용 추정을 표시하는 인스턴스 유형을 선택하는 경우 오른쪽에 있는 비용 사이드바를 확인합니다.
  9. 만들기를 클릭합니다.

  10. 사용할 준비가 되면 커넥터 이름 옆에 녹색 체크표시가 나타납니다.

gcloud

  1. gcloud 구성요소를 최신 버전으로 업데이트합니다.

    gcloud components update
    
  2. 프로젝트에 대해 서버리스 VPC 액세스 API를 사용 설정합니다.

    gcloud services enable vpcaccess.googleapis.com
    
  3. 서버리스 VPC 액세스 커넥터를 만듭니다.

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
    --region=REGION \
    --subnet=SUBNET \
    --subnet-project=HOST_PROJECT_ID \
    # Optional: specify minimum and maximum instance values between 2 and 10, default is 2 min, 10 max.
    --min-instances=MIN \
    --max-instances=MAX \
    # Optional: specify machine type, default is e2-micro
    --machine-type=MACHINE_TYPE

    다음을 바꿉니다.

    • CONNECTOR_NAME: 커넥터 이름. 이름은 Compute Engine 이름 지정 규칙을 따라야 하며 21자(영문 기준) 미만이어야 합니다. 하이픈(-)은 2자로 계산됩니다.
    • REGION: 커넥터의 리전. 서버리스 서비스의 리전과 일치해야 합니다. 서비스가 us-central 또는 europe-west 리전에 있으면 us-central1 또는 europe-west1을 사용합니다.
    • SUBNET: 사용되지 않은 /28 서브넷의 이름입니다.
      • 서브넷은 커넥터에서만 사용되어야 합니다. VM, Private Service Connect 또는 부하 분산기와 같은 다른 리소스에서는 사용될 수 없습니다.
      • 서브넷이 Private Service Connect 또는 Cloud Load Balancing에 사용되지 않는지 확인하려면 gcloud CLI에서 다음 명령어를 실행하여 purpose 서브넷이 PRIVATE인지 확인합니다.
        gcloud compute networks subnets describe SUBNET_NAME
        
        다음을 바꿉니다.
        • SUBNET_NAME: 서브넷 이름
    • HOST_PROJECT_ID: 호스트 프로젝트의 ID
    • MIN: 커넥터에 사용할 최소 인스턴스 수. 29 사이의 정수를 사용합니다. 기본값은 2입니다. 커넥터 확장에 대한 자세한 내용은 처리량 및 확장을 참조하세요.
    • MAX: 커넥터에 사용할 최대 인스턴스 수. 310 사이의 정수를 사용합니다. 기본값은 10입니다. 트래픽에 필요한 경우 커넥터는 [MAX] 인스턴스로 수평 확장되지만 다시 축소되지 않습니다. 커넥터 확장에 대한 자세한 내용은 처리량 및 확장을 참조하세요.
    • MACHINE_TYPE: f1-micro, e2-micro, 또는 e2-standard-4입니다. 머신 유형 및 확장을 포함한 커넥터 처리량에 대한 자세한 내용은 처리량 및 확장을 참조하세요.

    자세한 내용과 선택적 인수는 gcloud 참조를 확인하세요.

  4. 커넥터를 사용하기 전에 커넥터가 READY 상태인지 확인합니다.

    gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \
    --region=REGION

    다음을 바꿉니다.

    • CONNECTOR_NAME: 커넥터 이름. 이전 단계에서 지정한 이름
    • REGION: 커넥터의 리전. 이전 단계에서 지정한 리전

    출력에는 state: READY 줄이 포함되어야 합니다.

Terraform

Terraform 리소스를 사용하여 vpcaccess.googleapis.com API를 사용 설정할 수 있습니다.

resource "google_project_service" "vpcaccess-api" {
  project = var.project_id # Replace this with your project ID in quotes
  service = "vpcaccess.googleapis.com"
}

Terraform 모듈을 사용하여 VPC 네트워크와 서브넷을 만든 후 커넥터를 만들 수 있습니다.

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 9.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "my-serverless-network"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "serverless-subnet"
      subnet_ip     = "10.10.10.0/28"
      subnet_region = "us-central1"
    }
  ]
}

module "serverless-connector" {
  source     = "terraform-google-modules/network/google//modules/vpc-serverless-connector-beta"
  version    = "~> 9.0"
  project_id = var.project_id
  vpc_connectors = [{
    name        = "central-serverless"
    region      = "us-central1"
    subnet_name = module.test-vpc-module.subnets["us-central1/serverless-subnet"].name
    # host_project_id = var.host_project_id # Specify a host_project_id for shared VPC
    machine_type  = "e2-standard-4"
    min_instances = 2
    max_instances = 7
    }
    # Uncomment to specify an ip_cidr_range
    #   , {
    #     name          = "central-serverless2"
    #     region        = "us-central1"
    #     network       = module.test-vpc-module.network_name
    #     ip_cidr_range = "10.10.11.0/28"
    #     subnet_name   = null
    #     machine_type  = "e2-standard-4"
    #     min_instances = 2
    #   max_instances = 7 }
  ]
  depends_on = [
    google_project_service.vpcaccess-api
  ]
}

서비스 프로젝트에 Cloud Run 사용 설정

서비스 프로젝트에 Cloud Run API를 사용 설정합니다. 이 작업은 후속 단계에서 IAM 역할을 추가하고 서비스 프로젝트에서 Cloud Run을 사용하는 데 필요합니다.

콘솔

  1. Cloud Run API의 페이지를 엽니다.

    Cloud Run API

  2. 대시보드 상단의 메뉴 바에서 프로젝트 드롭다운 메뉴를 클릭하고 서비스 프로젝트를 선택합니다.

  3. 사용 설정을 클릭합니다.

gcloud

터미널에서 다음을 실행합니다.

gcloud services enable run.googleapis.com --project=SERVICE_PROJECT_ID

다음을 바꿉니다.

  • SERVICE_PROJECT_ID: 서비스 프로젝트의 ID입니다.

커넥터에 대한 액세스 제공

호스트 프로젝트에서 서비스 프로젝트 Cloud Run 서비스 에이전트서버리스 VPC 액세스 사용자 IAM 역할을 부여하여 커넥터에 대한 액세스 권한을 제공하세요.

콘솔

  1. IAM 페이지를 엽니다.

    IAM으로 이동

  2. 프로젝트 드롭다운 메뉴를 클릭하고 호스트 프로젝트를 선택합니다.

  3. 추가를 클릭합니다.

  4. 새 주 구성원 필드에 Cloud Run 서비스에 대한 Cloud Run 서비스 에이전트의 이메일 주소를 입력합니다.

    service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com

    다음을 바꿉니다.

    • SERVICE_PROJECT_NUMBER: 서비스 프로젝트와 연결된 프로젝트 번호. 프로젝트 ID와는 다릅니다. Google Cloud Console에 있는 서비스 프로젝트의 프로젝트 설정 페이지에서 프로젝트 번호를 찾을 수 있습니다.
  5. 역할 필드에서 서버리스 VPC 액세스 사용자를 선택합니다.

  6. 저장을 클릭합니다.

gcloud

터미널에서 다음을 실행합니다.

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=serviceAccount:service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \
--role=roles/vpcaccess.user

다음을 바꿉니다.

  • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 프로젝트 ID입니다.
  • SERVICE_PROJECT_NUMBER: 서비스 계정과 연결된 프로젝트 번호입니다. 프로젝트 ID와는 다릅니다. 다음을 실행하여 프로젝트 번호를 찾을 수 있습니다.

    gcloud projects describe SERVICE_PROJECT_ID
    

커넥터를 검색할 수 있도록 설정

호스트 프로젝트의 IAM 정책에서 Cloud Run 서비스를 배포하는 주 구성원에게 다음 두 가지 사전 정의된 역할을 부여해야 합니다.

또는 맞춤 역할을 사용하거나 서버리스 VPC 액세스 뷰어(vpcaccess.viewer) 역할의 모든 권한이 포함된 사전 정의된 다른 역할을 사용할 수 있습니다.

콘솔

  1. IAM 페이지를 엽니다.

    IAM으로 이동

  2. 프로젝트 드롭다운 메뉴를 클릭하고 호스트 프로젝트를 선택합니다.

  3. 추가를 클릭합니다.

  4. 새 주 구성원 필드에 서비스 프로젝트의 커넥터를 볼 수 있는 주 구성원의 이메일 주소를 입력합니다. 이 필드에 이메일을 여러 개 입력할 수 있습니다.

  5. 역할 필드에서 다음 두 역할을 모두 선택합니다.

    • 서버리스 VPC 액세스 뷰어
    • Compute 네트워크 뷰어
  6. 저장을 클릭합니다.

gcloud

터미널에서 다음 명령어를 실행합니다.

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=PRINCIPAL \
--role=roles/vpcaccess.viewer

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
--member=PRINCIPAL \
--role=roles/compute.networkViewer

다음을 바꿉니다.

  • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 프로젝트 ID
  • PRINCIPAL: Cloud Run 서비스를 배포하는 주 구성원. --member 플래그에 대해 자세히 알아보세요.

커넥터를 사용하도록 서비스 구성

공유 VPC에 액세스해야 하는 각 Cloud Run 서비스에 서비스의 커넥터를 지정해야 합니다. 새 서비스를 배포하거나 기존 서비스를 업데이트할 때 Google Cloud 콘솔, Google Cloud CLI, YAML 파일 또는 Terraform을 사용하여 커넥터를 지정할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Run으로 이동합니다.

    Cloud Run으로 이동

  2. 컨테이너 배포를 클릭하고 서비스를 선택하여 새 서비스를 구성합니다. 기존 서비스를 구성하는 경우 서비스를 클릭한 후 새 버전 수정 및 배포를 클릭합니다.

  3. 새 서비스를 구성하는 경우 초기 서비스 설정 페이지를 작성한 후 컨테이너, 볼륨, 네트워킹, 보안을 클릭하여 서비스 구성 페이지를 펼칩니다.

  4. 연결 탭을 클릭합니다.

    이미지

    • VPC 커넥터 필드에서 사용할 커넥터를 선택하거나 없음을 선택하여 VPC 네트워크에서 서비스의 연결을 해제합니다.
  5. 만들기 또는 배포를 클릭합니다.

gcloud

  1. Cloud Run 리소스가 포함된 프로젝트를 사용하도록 gcloud CLI를 설정합니다.

    gcloud config set project PROJECT_ID
    다음을 바꿉니다.

    • PROJECT_ID: 공유 VPC에 액세스가 필요한 Cloud Run 리소스가 포함된 프로젝트의 ID입니다. Cloud Run 리소스가 호스트 프로젝트에 있으면 호스트 프로젝트 ID입니다. Cloud Run 리소스가 서비스 프로젝트에 있으면 서비스 프로젝트 ID입니다.
  2. --vpc-connector 플래그를 사용합니다.

  • 기존 서비스인 경우:
    gcloud run services update SERVICE --vpc-connector=CONNECTOR_NAME
  • 신규 서비스인 경우:
    gcloud run deploy SERVICE --image=IMAGE_URL --vpc-connector=CONNECTOR_NAME
    다음을 바꿉니다.
    • SERVICE: 서비스 이름입니다.
    • IMAGE_URL: 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)입니다.
    • CONNECTOR_NAME: 커넥터의 이름입니다. 공유 VPC 서비스 프로젝트(호스트 프로젝트와 반대)에서 배포할 때는 정규화된 이름을 사용합니다. 예를 들면 다음과 같습니다.
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      여기서 HOST_PROJECT_ID는 호스트 프로젝트의 ID이고, CONNECTOR_REGION은 커넥터 리전이며, CONNECTOR_NAME은 커넥터에 지정한 이름입니다.

YAML

Cloud Run 리소스가 포함된 프로젝트를 사용하도록 gcloud CLI를 설정합니다.

gcloud config set project PROJECT_ID

다음을 바꿉니다.

  • PROJECT_ID: 공유 VPC에 액세스가 필요한 Cloud Run 리소스가 포함된 프로젝트의 ID입니다. Cloud Run 리소스가 호스트 프로젝트에 있으면 호스트 프로젝트 ID입니다. Cloud Run 리소스가 서비스 프로젝트에 있으면 서비스 프로젝트 ID입니다.
  1. 새 서비스를 만드는 경우에는 이 단계를 건너뜁니다. 기존 서비스를 업데이트하는 경우 YAML 구성을 다운로드합니다.

    gcloud run services describe SERVICE --format export > service.yaml
  2. 최상위 spec 속성 아래의 annotations 속성에서 run.googleapis.com/vpc-access-connector 속성을 추가하거나 업데이트합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
          name: REVISION

    다음을 바꿉니다.

    • SERVICE: Cloud Run 서비스의 이름입니다.
    • CONNECTOR_NAME: 커넥터의 이름입니다. 공유 VPC 서비스 프로젝트(호스트 프로젝트와 반대)에서 배포할 때는 정규화된 이름을 사용합니다. 예를 들면 다음과 같습니다.
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      여기서 HOST_PROJECT_ID는 호스트 프로젝트의 ID이고, CONNECTOR_REGION은 커넥터 리전이며, CONNECTOR_NAME은 커넥터에 지정한 이름입니다.
    • REVISION을 새 버전 이름으로 변경하거나 이미 있는 경우 삭제합니다. 새 버전 이름을 제공할 경우 다음 기준을 반드시 충족해야 합니다.
      • SERVICE-로 시작해야 합니다.
      • 소문자, 숫자, -만 포함합니다.
      • -로 끝나면 안 됩니다.
      • 63자(영문 기준) 이하여야 합니다.
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud run services replace service.yaml

Terraform

Terraform 리소스를 사용하여 서비스를 만들고 커넥터를 사용하도록 구성할 수 있습니다.

# Cloud Run service
resource "google_cloud_run_v2_service" "gcr_service" {
  name     = "mygcrservice"
  location = "us-west1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      resources {
        limits = {
          cpu    = "1000m"
          memory = "512Mi"
        }
      }
      # the service uses this SA to call other Google Cloud APIs
      # service_account_name = myservice_runtime_sa
    }

    scaling {
      # Limit scale up to prevent any cost blow outs!
      max_instance_count = 5
    }

    vpc_access {
      # Use the VPC Connector
      connector = google_vpc_access_connector.connector.id
      # all egress from the service should go through the VPC Connector
      egress = "ALL_TRAFFIC"
    }
  }
}

다음 단계