비공개 서비스 액세스 구성

비공개 서비스 액세스는 VPC 네트워크와 Google 또는 타사 소유 네트워크 간의 비공개 연결입니다. Google 또는 타사 등 서비스 제공 법인은 서비스 프로듀서라고도 합니다. 비공개 연결을 통해 VPC 네트워크의 VM 인스턴스와 액세스하는 서비스가 내부 IP 주소를 사용하여 독점적으로 통신할 수 있습니다. VM 인스턴스는 비공개 서비스 액세스를 통해 사용 가능한 서비스에 도달하기 위해 인터넷 액세스 또는 외부 IP 주소가 필요하지 않습니다.

비공개 서비스 액세스 및 다른 비공개 액세스 옵션에 대해 자세히 알아보려면 서비스 비공개 액세스 옵션을 참조하세요.

상위 수준에서 비공개 서비스 액세스를 사용하려면 VPC 네트워크에서 IP 주소 범위(CIDR 블록)를 할당한 다음 서비스 프로듀서에 대한 비공개 연결을 만들어야 합니다.

시작하기 전에

비공개 연결을 설정하려면 먼저 다음 기본 요건을 완료해야 합니다.

  • 사용 중인 서비스가 비공개 서비스 액세스를 지원하는지 확인합니다.
  • 서비스 프로듀서의 네트워크에 연결하는 데 사용할 기존 VPC 네트워크가 있어야 합니다. VM 인스턴스는 이 VPC 네트워크를 사용하여 비공개 연결을 통해 서비스에 연결해야 합니다.
  • 프로젝트에서 Service Networking API활성화합니다. 비공개 연결을 만들려면 이 API가 필요합니다.
  • Google Cloud 프로젝트를 만들거나 기존 프로젝트를 선택합니다. Google Cloud 프로젝트를 만드는 방법은 프로젝트 만들기 및 관리를 참조하세요.
  • 이 가이드의 gcloud 명령줄 예시를 실행하려면 gcloud CLI를 설치합니다.

권한

프로젝트 소유자와 Compute 네트워크 관리자 역할이 있는 IAM 구성원(roles/compute.networkAdmin)은 할당된 IP 주소 범위를 만들고 비공개 연결을 관리할 수 있습니다.

역할에 대한 자세한 내용은 VPC IAM 역할 문서를 참조하세요.

공유 VPC 시나리오

공유 VPC를 사용하는 경우 호스트 프로젝트에서 할당된 IP 범위와 비공개 연결을 만듭니다. 이러한 작업은 일반적으로 호스트 프로젝트의 네트워크 관리자가 수행해야 합니다. 호스트 프로젝트가 설정되면 서비스 프로젝트의 VM 인스턴스가 비공개 연결을 사용할 수 있습니다.

할당량 및 한도

비공개 연결은 VPC 피어링 연결로 구현되므로 VPC 네트워크 피어링에 적용되는 할당량 및 한도가 비공개 서비스 액세스에도 적용됩니다.

서비스에 대해 할당된 IP 주소 범위

비공개 연결을 만들기 전에 서비스 프로듀서의 VPC 네트워크에서 사용할 IPv4 주소 범위를 할당해야 합니다. 이렇게 하면 VPC 네트워크와 서비스 프로듀서 네트워크 간에 IP 주소가 충돌하지 않게 됩니다. 서비스 프로듀서마다 할당된 범위를 만듭니다.

VPC 네트워크에서 주소 범위를 할당하면 서브넷(기본 및 보조 범위)과 커스텀 정적 경로의 대상에는 해당 범위를 사용할 수 없습니다.

비공개 서비스 액세스에서 IPv6 주소 범위를 사용할 수 없습니다.

IP 주소 범위 크기

비공개 서비스 액세스 범위(확대하려면 클릭)

서비스 프로듀서 측 연결에서 서브넷을 만들면 할당 가능한 범위가 서브넷의 IP 주소 범위로 선택됩니다.

각 서비스 프로듀서는 최소 IP 주소 범위 크기가 필요합니다. Google의 경우 최소 크기는 단일 /24 블록(주소 256개)이지만 권장 크기는 /16 블록(주소 65,536개)입니다.

크기는 다음과 같은 몇 가지 요인에 따라 달라집니다.

  • 사용하는 서비스 및 리전의 수
  • 사용하는 서비스의 요구사항
    • 서비스의 최소 IP 주소 범위 크기
    • 사용자가 만드는 각 서비스 인스턴스의 별도의 IP 범위를 서비스 제공업체에서 필요로 하는지 또는 여러 서비스 인스턴스에 동일한 IP 범위를 사용할 수 있는지 여부

인접한 /16 블록이 없는 경우 작은 할당으로 시작하고 나중에 IP 주소가 더 필요하면 할당을 새로 추가할 수 있습니다.

서비스 프로듀서의 서브넷 정보

비공개 연결을 설정하고 비공개 IP 주소가 있는 리소스를 만들면 서비스는 리소스를 프로비저닝할 서브넷을 만들고 할당된 범위에서 사용 가능한 IP 주소 범위를 선택합니다. 서비스 프로듀서의 서브넷 IP 주소 범위를 선택하거나 수정할 수 없습니다. 서브넷은 서브넷의 모든 리소스를 삭제할 때만 서비스에서 삭제됩니다.

추가 리소스를 프로비저닝할 때 서비스는 이전에 만든 기존 리전 서브넷에 이 리소스를 프로비저닝하고 서브넷이 가득 차면 기존 리전에 새 서브넷을 만듭니다.

고려사항

IP 주소 범위를 할당하기 전에 다음 제약조건을 고려하세요.

  • 기존 할당 범위, 서브넷 또는 커스텀 정적 경로와 겹치지 않는 범위를 선택해야 합니다. 두 범위가 겹쳐서는 안 됩니다.
  • 다른 IP 주소 요구사항과 충돌하지 않는 범위를 선택하세요.
    • 일부 Google 및 서드 파티 제품은 게스트 운영체제 내에서 라우팅하는 데 172.17.0.0/16을 사용합니다. 예를 들어 기본 Docker 브리지 네트워크가 이 범위를 사용합니다. 172.17.0.0/16을 사용하는 제품을 이용하는 경우 비공개 서비스 액세스의 할당 범위에 172.17.0.0/16을 사용하지 마세요.
    • 자동 모드 VPC 네트워크를 사용하는 경우 10.128.0.0/9와 일치하거나 겹치는 할당 범위를 만들 수 없습니다. Google은 이후 리전의 서브넷을 포함하여 자동으로 생성된 서브넷10.128.0.0/9 범위를 사용합니다.
  • 현재와 미래의 수요에 맞게 충분히 큰 CIDR 블록을 선택해야 합니다. 이후에 범위 크기가 충분하지 않다고 판단되는 경우 가능하면 범위를 확장합니다. 단일 서비스 프로듀서에 할당 범위 여러 개를 할당할 수 있지만 Google에서는 각 범위의 크기(넷마스크)가 아니라 사용자가 할당할 수 있는 IP 주소 범위의 수에 할당량을 적용합니다.
  • 비공개 연결에 할당 범위를 더 추가하면 서비스 프로듀서가 제공하는 모든 서비스의 새 서비스 리소스를 만들 때 서비스 프로듀서가 사용할 수 있는 IP 주소 범위가 확장됩니다. 특정 서비스에서 사용할 수 있도록 비공개 연결 내에 특정 할당 범위를 예약할 수 없습니다.
  • 동일한 할당 범위를 여러 서비스 프로듀서에 재사용하면 안 됩니다. 재사용이 가능하긴 하지만 이 경우 IP 주소가 겹칠 수 있습니다. 각 서비스 프로듀서는 본인의 네트워크만 볼 수 있으며 다른 서비스 프로듀서가 사용하는 IP 주소를 알 수 없습니다.
  • 할당을 만들 때 할당 범위에 CIDR 블록은 하나만 할당할 수 있습니다. IP 주소 범위를 확장해야 하는 경우 할당에 블록을 더 추가할 수는 없습니다. 대신 또 다른 할당을 만들거나, 새 범위와 기존 범위를 포함하는 더 큰 블록을 사용하여 기존 할당을 다시 만들 수 있습니다.
  • 사용자가 Google 대신 Cloud SQL 등을 통해 할당을 직접 만드는 경우 동일한 이름 지정 규칙을 사용하여 다른 사용자 또는 Google 서비스에 해당 할당이 Google에 이미 존재함을 알릴 수 있습니다. Google 서비스가 사용자 대신 범위를 할당하는 경우 google-managed-services-[your network name] 형식을 사용하여 할당 이름을 지정합니다. 이 할당이 있으면 Google 서비스는 할당을 새로 만들지 않고 기존 할당을 사용합니다.
  • 비공개 연결은 VPC 네트워크 피어링 연결로 구현되므로 VPC 네트워크 피어링 한도와 같은 피어링 연결의 동작과 제약조건이 비공개 연결에도 적용됩니다.
  • VPC를 사용하는 기존 서비스 인스턴스의 내부 IP 주소를 변경할 계획이라면 중단(예: 서비스 인스턴스를 삭제하고 다시 만들어야 하는 경우)이 발생할 수 있는지 확인합니다. 자세한 내용은 연결된 관리형 서비스의 문서를 참조하세요. 예를 들어 Cloud SQL을 사용하는 경우 기존 Cloud SQL 인스턴스의 비공개 IP 주소 변경을 참조하세요.

IP 할당 만들기

다음 단계에서는 할당된 IP 주소 범위를 만드는 방법을 설명합니다.

콘솔

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. 서비스 프로듀서에 연결할 VPC 네트워크를 선택합니다.

  3. 비공개 서비스 연결 탭을 선택합니다.

  4. 비공개 서비스 연결 탭에서 서비스에 할당된 IP 범위 탭을 선택합니다.

  5. 할당된 IP 범위를 클릭합니다.

  6. 할당된 범위의 이름설명을 입력합니다.

  7. 할당의 IP 범위를 지정합니다.

    • IP 주소 범위를 지정하려면 커스텀을 선택한 다음 CIDR 블록(예: 192.168.0.0/16)을 입력합니다.
    • 프리픽스 길이를 지정하고 Google에서 사용 가능한 범위를 자동으로 선택하도록 하려면 자동을 선택한 다음 프리픽스 길이(예: 16)를 입력합니다.
  8. 할당을 클릭하여 할당된 범위를 만듭니다.

gcloud

VPC 네트워크에 할당 범위를 만들려면 addresses create 명령어를 사용합니다.

  • 주소 범위와 프리픽스 길이(서브넷 마스크)를 지정하려면 addressesprefix-length 플래그를 사용합니다. 예를 들어 CIDR 블록 192.168.0.0/16을 할당하려면 주소에 192.168.0.0을 지정하고 프리픽스 길이에 16을 지정합니다.

    gcloud compute addresses create RESERVED_RANGE_NAME \
        --global \
        --purpose=VPC_PEERING \
        --addresses=192.168.0.0 \
        --prefix-length=16 \
        --description="DESCRIPTION" \
        --network=VPC_NETWORK
    
  • 프리픽스 길이(서브넷 마스크)만 지정하려면 prefix-length 플래그만 사용합니다. 주소 범위를 생략하면 VPC 네트워크에서 사용되지 않는 주소 범위를 Google Cloud가 자동으로 선택합니다. 다음 예시에서는 프리픽스 길이가 16비트인 사용되지 않는 IP 주소 범위를 선택합니다.

    gcloud compute addresses create RESERVED_RANGE_NAME \
        --global \
        --purpose=VPC_PEERING \
        --prefix-length=16 \
        --description="DESCRIPTION" \
        --network=VPC_NETWORK
    

다음을 바꿉니다.

  • RESERVED_RANGE_NAME은 할당된 범위의 이름입니다(예: my-allocated-range).

  • DESCRIPTION은 범위에 대한 설명입니다(예: allocated for my-service).

  • VPC_NETWORK는 VPC 네트워크의 이름입니다(예: my-vpc-network).

다음 예시에서는 my-network VPC 네트워크의 VM 인스턴스가 비공개 서비스 액세스를 사용하여 이를 지원하는 Google 서비스에 문의할 수 있도록 Google에 대한 비공개 연결을 만듭니다.

gcloud compute addresses create google-managed-services-my-network \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=16 \
    --description="peering range for Google" \
    --network=my-network

Terraform

VPC 네트워크에 할당 범위를 만들려면 google_compute_global_address 리소스를 사용합니다.

resource "google_compute_global_address" "private_ip_address" {
  name          = "private-ip-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.peering_network.id
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

프로젝트에서 compute.globalAddresses.list 권한 관련 오류가 표시되면 서비스 계정 권한을 참조하세요.

할당된 IP 주소 범위 나열

할당된 IP 주소 범위를 나열하려면 addresses list 명령어를 사용합니다.

gcloud compute addresses list --global --filter="purpose=VPC_PEERING"

비공개 연결 만들기

할당 범위를 만든 후에는 서비스 프로듀서에 대한 비공개 연결을 만들 수 있습니다. 비공개 연결은 VPC 네트워크와 서비스 프로듀서의 네트워크 사이에 VPC 네트워크 피어링 연결을 설정합니다.

비공개 연결은 VPC 네트워크와 서비스 프로듀서 간의 일대일 관계입니다. 단일 서비스 프로듀서가 여러 서비스를 제공하는 경우 해당 제작자의 모든 서비스에 대해 하나의 비공개 연결만 있으면 됩니다.

단일 서비스 프로듀서가 여러 서비스를 제공하는 경우 서로 다른 서비스 리소스에 사용되는 할당 범위를 제어하려면 자체 비공개 연결이 있는 여러 VPC 네트워크를 사용할 수 있습니다. 이 구성을 사용하면 새 관리형 서비스 리소스를 만들 때 특정 네트워크를 선택하여 연결된 할당 범위를 새 리소스에 사용하도록 합니다.

여러 서비스 프로듀서에 연결하는 경우 서비스 프로듀서마다 고유한 할당을 사용합니다. 이렇게 하면 각 서비스 프로듀서의 경로 및 방화벽 규칙 같은 네트워크 설정을 관리하는 데 유용합니다.

콘솔

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. 서비스 프로듀서에 연결할 VPC 네트워크를 선택합니다.

  3. 비공개 서비스 연결 탭을 선택합니다.

  4. 비공개 서비스 연결 탭에서 서비스에 대한 비공개 연결 탭을 선택합니다.

  5. 연결 만들기를 클릭하여 네트워크와 서비스 프로듀서 간에 비공개 연결을 만듭니다.

  6. 지정된 할당으로는 다른 서비스 프로듀서가 사용하지 않는 하나 이상의 할당된 기존 범위를 선택합니다.

  7. 연결을 클릭하여 연결을 만듭니다.

gcloud

  1. vpc-peerings connect 명령어를 사용합니다.

    gcloud services vpc-peerings connect \
        --service=servicenetworking.googleapis.com \
        --ranges=RESERVED_RANGE_NAME \
        --network=VPC_NETWORK
    

    다음을 바꿉니다.

    • RESERVED_RANGE_NAME: 하나 이상의 할당된 범위 이름입니다.

    • VPC_NETWORK: VPC 네트워크의 이름입니다.

    이 명령은 장기 실행 작업을 시작하고 작업 이름을 반환합니다.

  2. 작업이 성공했는지 확인하려면 vpc-peerings operations describe 명령어를 사용합니다.

    gcloud services vpc-peerings operations describe \
        --name=OPERATION_NAME
    

    OPERATION_NAME을 이전 단계에서 반환된 작업 이름으로 바꿉니다.

비공개 연결을 만들 때 할당 범위를 2개 이상 지정할 수 있습니다. 예를 들어 할당 범위 하나가 소진된 경우 할당 범위를 추가로 지정할 수 있습니다. 서비스는 제공된 모든 범위의 IP 주소를 지정된 순서대로 사용합니다.

Terraform

비공개 연결을 만들려면 google_service_networking_connection 리소스를 사용합니다.

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.peering_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}

비공개 연결 나열

비공개 연결을 만든 후에는 비공개 연결 목록을 표시하여 해당 연결이 존재하는지 확인할 수 있습니다. 이 목록에는 각 연결과 관련된 할당 범위의 목록도 표시됩니다. 예를 들어 연결에 지정한 할당 범위를 잊은 경우 이 목록에서 할당 범위를 확인합니다.

콘솔

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. 연결이 포함된 VPC 네트워크를 선택합니다.

  3. 비공개 서비스 연결 탭을 선택합니다.

  4. 비공개 서비스 연결 탭에서 서비스에 대한 비공개 연결 탭을 선택하여 네트워크의 모든 비공개 연결을 표시합니다.

gcloud

vpc-peerings list 명령어를 사용합니다.

gcloud services vpc-peerings list \
    --network=VPC_NETWORK

VPC_NETWORK를 VPC 네트워크 이름으로 바꿉니다.

비공개 연결 수정

기존 비공개 연결의 경우 트래픽을 중단하지 않고 할당된 IP 주소 범위를 추가하거나 삭제할 수 있습니다. 예를 들어 확장할 때 기존 범위가 거의 소진된 경우 할당 범위를 추가할 수 있습니다.

Google Cloud Console을 사용하여 할당된 IP 범위를 삭제할 수 없습니다. 할당된 범위를 삭제하려면 gcloud 안내에 따라 연결을 수정합니다. 비공개 연결에서 범위를 삭제할 때는 다음이 적용됩니다.

  • 할당 범위는 더 이상 비공개 연결과 연결되지 않지만 삭제되지는 않습니다.

    • 삭제된 범위가 더 이상 사용되지 않는 경우 할당을 삭제할 수 있습니다.
  • 기존 서비스 프로듀서 리소스는 삭제된 범위를 계속 사용할 수 있습니다.

  • 비공개 서비스 액세스는 삭제된 범위를 사용하여 새 서브넷을 할당하지 않습니다.

콘솔

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. 연결이 포함된 VPC 네트워크를 선택합니다.

  3. 비공개 서비스 연결 탭을 선택합니다.

  4. 비공개 서비스 연결 탭에서 서비스에 대한 비공개 연결 탭을 선택하여 네트워크의 모든 비공개 연결을 표시합니다.

  5. 목록에서 연결 이름을 클릭합니다.

  6. 지정된 할당 풀다운 메뉴에서 할당하려는 범위를 선택합니다.

  7. 확인을 클릭합니다.

gcloud

기존 비공개 연결에서 할당된 IP 주소 범위를 추가하거나 삭제하려면 vpc-peerings update 명령어를 사용합니다.

gcloud services vpc-peerings update \
    --service=servicenetworking.googleapis.com \
    --ranges=RESERVED_RANGE_NAME \
    --network=VPC_NETWORK \
    [--force]

다음을 바꿉니다.

  • RESERVED_RANGE_NAME: 비공개 연결에 할당할 하나 이상의 할당 범위 이름 목록입니다.

    RESERVED_RANGE_NAME는 할당된 범위의 이전 목록을 대체합니다. 이 비공개 연결과 이전에 연결된 범위를 생략하면 해당 범위가 연결에서 삭제됩니다. --force 옵션을 사용하여 범위를 삭제해야 합니다.

  • VPC_NETWORK: VPC 네트워크의 이름입니다.

할당된 IP 주소 범위 삭제

할당된 IP 주소 범위를 삭제하기 전에 범위가 비공개 연결에 사용되는지 확인합니다.

할당된 IP 주소 범위가 사용 중이면 먼저 비공개 연결을 수정하여 범위를 삭제합니다. 그런 후 할당된 IP 주소 범위를 삭제합니다.

사용 중인 할당된 IP 주소를 삭제하고 비공개 연결을 수정하지 않으면 다음이 적용됩니다.

  • 기존 연결은 활성 상태를 유지하지만 VPC 네트워크가 서비스 프로듀서의 네트워크와 겹치는 IP 주소를 사용하는 것을 방지할 수 없습니다.

  • 비공개 연결과 연관된 할당된 IP 주소 범위만 삭제할 경우 할당된 IP 주소 범위를 선택할 수 없으므로 서비스가 새 서브넷을 만들 수 없습니다.

  • 나중에 삭제된 범위와 일치하거나 겹치는 할당된 IP 주소 범위를 만들 때 이 범위를 비공개 연결에 추가하면 작업이 실패합니다.

이러한 문제를 방지하기 위해서는 사용 중인 할당된 IP 주소 범위를 삭제할 때 항상 비공개 연결을 수정해야 합니다.

콘솔

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. 삭제할 할당이 포함된 VPC 네트워크를 선택합니다.

  3. 비공개 서비스 연결 탭을 선택합니다.

  4. 비공개 서비스 연결 탭에서 서비스에 할당된 IP 범위 탭을 선택합니다.

  5. 삭제할 할당을 선택합니다.

  6. 해제를 클릭하여 할당된 IP 주소 범위를 네트워크의 사용할 수 있는 내부 IP 주소 풀로 반환합니다.

    할당된 IP 주소 범위가 기존 연결에 계속 지정되어 있는 경우 할당을 해제하기 전에 추가 확인을 입력해야 합니다.

  7. 한 번 더 해제를 클릭하여 삭제를 확인합니다.

gcloud

할당 이름을 지정하여 할당을 삭제합니다.

gcloud compute addresses delete NAME \
    --global

NAME을 삭제하려는 할당된 범위 이름으로 바꿉니다.

비공개 연결 삭제

비공개 연결을 삭제하려면 먼저 해당 연결을 통해 액세스하는 모든 서비스 인스턴스를 삭제해야 합니다. 예를 들어 Cloud SQL에 액세스하기 위해 사용되는 비공개 연결을 삭제하려면 연결을 사용하는 Cloud SQL 인스턴스를 삭제해야 합니다. 서비스 인스턴스를 삭제한 후에는 서비스 프로듀서의 리소스가 삭제되지만 이러한 삭제가 즉시 수행하지 않을 수 있습니다. 일부 서비스 프로듀서는 대기 기간이 지날 때까지 삭제를 지연합니다. 대기 기간 중에는 비공개 연결을 삭제할 수 없습니다. 연결을 삭제할 수 있으려면 먼저 서비스 프로듀서의 리소스가 삭제될 때까지 기다려야 합니다.

예를 들어 Cloud SQL 인스턴스를 삭제하면 성공 응답이 수신되지만 서비스는 서비스 프로듀서가 리소스를 삭제할 때까지 4일 동안 대기합니다. 이러한 대기 기간 동안 서비스 삭제를 취소하고 싶으면 리소스를 다시 복구하도록 요청할 수 있습니다. 대기 기간 중에 연결을 삭제하려고 시도하면 서비스 프로듀서가 리소스를 아직 사용 중이라는 메시지와 함께 삭제가 실패합니다.

콘솔

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.

    VPC 네트워크로 이동

  2. 삭제할 연결이 포함된 VPC 네트워크를 선택합니다.

  3. 비공개 서비스 연결 탭을 선택합니다.

  4. 비공개 서비스 연결 탭에서 서비스에 대한 비공개 연결 탭을 선택합니다.

  5. 삭제할 비공개 연결을 선택합니다.

  6. 삭제를 클릭하여 삭제합니다.

  7. 한 번 더 삭제를 클릭하여 삭제를 확인합니다.

gcloud

비공개 연결의 VPC 네트워크 피어링 연결을 삭제하려면 vpc-peerings delete 명령어를 사용합니다.

gcloud services vpc-peerings delete \
    --service=servicenetworking.googleapis.com \
    --network=VPC_NETWORK

VPC_NETWORK를 VPC 네트워크 이름으로 바꿉니다.

비공개 DNS 영역을 서비스 프로듀서와 공유

Cloud DNS 비공개 영역은 VPC 네트워크에만 공개됩니다. 서비스 프로듀서 네트워크가 비공개 영역에서 이름을 확인하도록 하려면 두 네트워크 간에 DNS 피어링을 구성하면 됩니다.

DNS 피어링을 구성할 때 VPC 네트워크와 DNS 서픽스를 제공합니다. 서비스 프로듀서가 해당 DNS 서픽스로 주소를 확인해야 하는 경우 서비스 생산자는 확인을 위해 해당 쿼리를 VPC 네트워크로 전달합니다.

이러한 지원 서비스는 Cloud SQL을 제외한 DNS 피어링을 지원합니다.

DNS 피어링을 사용 설정하려면 프로젝트에서 Cloud DNS API사용 설정해야 합니다.

서비스 프로듀서와 DNS 피어링

gcloud

VPC 네트워크와 서비스 제공업체 네트워크 간에 DNS 피어링을 설정하려면 peered-dns-domains create 명령어를 사용합니다.

gcloud services peered-dns-domains create PEERING_NAME \
    --network=VPC_NETWORK \
    --dns-suffix=DNS_SUFFIX

다음을 바꿉니다.

  • PEERING_NAME: 이 DNS 피어링 구성의 이름입니다.

  • VPC_NETWORK: 비공개 서비스 액세스를 사용하여 서비스 프로듀서에 연결된 VPC 네트워크의 이름입니다.

  • DNS_SUFFIX: 서비스 프로듀서와 피어링할 DNS 서픽스입니다. 점을 포함하는 전체 DNS 도메인 이름을 제공해야 합니다. 예를 들어 example.com.은 유효한 DNS 서픽스입니다.

Terraform

VPC 네트워크와 서비스 제공업체 네트워크 간에 DNS 피어링을 설정하려면 google_service_networking_peered_dns_domain 리소스를 사용합니다.


## Uncomment this block after adding a valid DNS suffix

# resource "google_service_networking_peered_dns_domain" "default" {
#   name       = "example-com"
#   network    = google_compute_network.peering_network.name
#   dns_suffix = "example.com."
#   service    = "servicenetworking.googleapis.com"
# }

DNS 피어링 구성 나열

gcloud

peered-dns-domains list 명령어를 사용합니다.

gcloud services peered-dns-domains list \
    --network=VPC_NETWORK

VPC_NETWORK를 VPC 네트워크 이름으로 바꿉니다.

DNS 피어링 구성 삭제

gcloud

peered-dns-domains delete 명령어를 사용합니다.

gcloud services peered-dns-domains delete PEERING_NAME \
    --network=VPC_NETWORK

다음을 바꿉니다.

  • PEERING_NAME: DNS 피어링 구성의 이름입니다.

  • VPC_NETWORK: VPC 네트워크의 이름입니다.

문제 해결

할당 범위 중 현재 사용량은 얼마나 되나요?

서비스 프로듀서와의 비공개 연결을 만들 때는 해당 서비스 프로듀서가 사용할 IP 주소 범위를 할당합니다. 한 서비스 프로듀서의 서비스를 여러 개 사용하는 경우에는 각 서비스가 할당된 범위 중 상당 부분의 IP 주소를 예약합니다. 어떤 서비스가 어떤 IP 주소를 사용하고 있는지 확인할 수 있습니다. 예를 들어 큰 IP 주소 블록을 사용하고 있는 서비스를 확인하여 IP 주소 소진을 방지할 수 있습니다.

특정 IP 주소 범위를 사용하고 있는 서비스를 확인하는 방법은 다음과 같습니다.

  1. 비공개 연결 목록을 표시합니다.
  2. 해당 서비스 프로듀서에 연결하는 피어링 연결 이름을 찾습니다.
  3. VPC 네트워크의 경로 목록을 표시합니다.
  4. 다음 홉이 피어링 연결 이름과 일치하는 경로를 찾습니다. 경로의 대상 범위는 각 서비스가 사용하는 IP 주소를 나타냅니다.

IP 주소 범위 소진

특정 비공개 연결에 할당된 IP 주소 공간이 소진된 경우 Google Cloud는 다음 오류를 반환합니다. Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges.

기존 할당을 확장하거나 새 할당을 추가할 수 있습니다. 확장된 할당은 기존 범위를 포함하는 연속된 IP 주소 범위여야 합니다. 할당 크기에는 제한이 없지만 만들 수 있는 할당 수에는 제한이 있으므로 할당을 확장하는 것이 좋습니다.

기존 할당을 확장하는 방법은 다음과 같습니다.

  1. 비공개 연결 목록을 표시하고 확장해야 하는 할당 범위의 이름을 기록해 둡니다.
  2. 기존 할당 범위를 삭제합니다.
  3. 삭제한 범위와 동일한 이름을 사용하여 새 할당 범위를 만듭니다. 삭제한 IP 주소 범위를 포함하는 IP 주소 범위를 지정합니다. 이렇게 하면 이전 할당 범위를 사용하는 기존 피어링 리소스가 VPC 네트워크의 리소스와 충돌하지 않고 동일한 IP 주소를 계속 사용할 수 있습니다. 예를 들어 이전에 할당된 범위가 192.168.0.0/20이면 새 할당 범위를 192.168.0.0/16으로 만듭니다.

기존 비공개 연결에 할당 범위를 추가하는 방법은 다음과 같습니다.

  1. 새 할당 범위를 만듭니다. 이 범위는 기존 할당 범위와 인접하지 않아도 됩니다.
  2. 기존 비공개 연결에 할당 범위를 추가합니다.

온프레미스 호스트는 서비스 프로듀서의 네트워크와 통신할 수 없습니다.

서비스 프로듀서의 네트워크에 온프레미스 네트워크로 직접 트래픽을 연결하는 올바른 경로가 없을 수도 있습니다. 기본적으로 서비스 프로듀서의 네트워크는 VPC 네트워크의 서브넷 경로만을 학습합니다. 따라서 서브넷 IP 범위가 아닌 요청은 서비스 프로듀서에 의해 삭제됩니다.

VPC 네트워크에서 피어링 연결을 업데이트하여 커스텀 경로를 서비스 프로듀서의 네트워크로 내보냅니다. 경로를 내보내면 온프레미스 네트워크로의 경로와 같은 VPC 네트워크에 있는 모든 운영 가능 고정 및 동적 경로가 서비스 프로듀서의 네트워크로 전송됩니다. 서비스 프로듀서의 네트워크는 VPC 네트워크를 통해 커스텀 경로를 자동으로 가져온 후 온프레미스 네트워크로 트래픽을 다시 전송할 수 있습니다.

서비스 계정 권한

IP 할당을 만들 때 프로젝트에 대해 compute.globalAddresses.list 권한 관련 오류가 표시되거나 비공개 연결을 생성, 나열, 수정하는 동안 Error 400: Precondition check failed와 같은 오류가 발생하면 Service Networking API 서비스 계정에 대한 Identity and Access Management(IAM) 관련 문제일 수 있습니다. 이 서비스 계정은 Service Networking API를 사용 설정한 후에 자동으로 생성됩니다. 계정을 프로비저닝하고 IAM 페이지에 표시하기 까지 시간이 걸릴 수 있습니다.

콘솔

서비스 계정에 올바른 IAM 역할이 있는지 확인하려면 다음을 수행합니다.

  1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

    IAM으로 이동

  2. Google 제공 역할 부여 포함 체크박스를 선택합니다.

  3. 이름 열에서 서비스 네트워킹 서비스 에이전트 주 구성원을 찾은 후 해당 행에서 주 구성원 수정을 클릭합니다.

  4. 역할 필드에서 서비스 네트워킹 서비스 에이전트 역할(roles/servicenetworking.serviceAgent)이 있는지 확인합니다.

  5. 서비스 네트워킹 서비스 에이전트 역할이 없으면 역할 추가 또는 다른 역할 추가를 클릭합니다.

  6. 역할 선택을 클릭합니다.

  7. 필터 텍스트 상자에 Service Networking Service Agent를 입력합니다.

  8. 목록에서 서비스 네트워킹 서비스 에이전트를 선택한 후 저장을 클릭합니다.

gcloud

Service Networking API 서비스 계정을 만들려면 add-iam-policy-binding 명령어를 사용합니다.

gcloud projects add-iam-policy-binding HOST_PROJECT_NAME \
    --member=serviceAccount:service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com \
    --role=roles/servicenetworking.serviceAgent

다음을 바꿉니다.

  • HOST_PROJECT_NAME: 호스트 프로젝트의 이름입니다.
  • HOST_PROJECT_NUMBER: 호스트 프로젝트의 수입니다.

IP 할당 업데이트 후 피어링 서브넷 경로가 계속 표시됨

비공개 서비스 연결에 할당된 IP 주소 범위를 업데이트한 후에도 이전의 피어링 서브넷 경로가 VPC 네트워크의 라우팅 테이블에 계속 표시될 수 있습니다. IP 주소 범위가 아직 사용 중이기 때문에 경로가 계속 표시됩니다.

이 문제를 해결하려면 다음 단계를 따르세요.

IP 주소 범위가 더 이상 사용되지 않으면 피어링 서브넷 경로가 자동으로 삭제됩니다. 리소스 삭제 시점과 서비스 프로듀서가 리소스를 완전히 삭제하는 시점 사이에 지연이 발생할 수 있습니다. 예를 들어 이전 IP 주소 범위가 Cloud SQL 인스턴스에 사용되는 경우 서비스 프로듀서가 인스턴스를 완전히 삭제할 때까지 최대 4일이 걸릴 수 있습니다. 삭제가 완료되면 피어링 서브넷 경로가 삭제됩니다.