Private Service Connect: VPC 피어링에서 Private Service Connect 마이그레이션으로 마이그레이션

이 Codelab 정보
schedule74분
subject최종 업데이트: 2025년 4월 28일
account_circle작성자: Lorin Price

VPC 피어링은 제작자가 사용자에게 서비스 소비를 제공하는 일반적인 방법입니다. 하지만 VPC 피어링을 사용하면 비전환 VPC 피어링, 대규모 IP 주소 사용, 피어링된 VPC의 리소스 과다 노출 등 여러 라우팅 복잡성이 발생합니다.

Private Service Connect (PSC)는 소비자가 워크로드 VPC에서 프로비저닝하는 단일 엔드포인트를 통해 서비스를 생산자가 노출할 수 있게 해주는 연결 방법입니다. 이를 통해 사용자가 VPC 피어링과 관련하여 직면하는 많은 문제를 해결할 수 있습니다. PSC를 통해 많은 새로운 서비스가 생성되고 있지만 여전히 VPC 피어링 서비스로 존재하는 서비스가 많이 있습니다.

PSC 기반 아키텍처로 이전하기 위해 VPC 피어링을 통해 만든 서비스의 마이그레이션 경로를 Google Cloud에 소개하겠습니다. 이 마이그레이션 방법을 사용하면 VPC 피어링을 통해 노출되는 프로듀서 서비스의 IP 주소가 PSC 기반 아키텍처를 통해 보존되므로 소비자가 최소화할 수 있습니다. 이 Codelab을 따라 이전을 수행하기 위한 기술적 단계를 알아보세요.

참고: 이 마이그레이션 경로는 제작자와 소비자가 동일한 Google Cloud 조직 내에 있는 서비스에만 해당됩니다. VPC 피어링을 사용하는 모든 Google Cloud 서비스 또는 서드 파티 서비스의 경우 유사한 마이그레이션 방법을 활용하지만 서비스 자체에 맞게 맞춤설정됩니다. 이러한 유형의 서비스에 대한 이전 경로는 관련 당사자에게 문의하시기 바랍니다.

  • VPC 피어링 기반 서비스 설정 방법
  • PSC 기반 서비스 설정 방법
  • Internal-Ranges API를 사용하여 VPC 피어링을 통해 서브넷 마이그레이션을 수행하여 VPC 피어링에서 PSC 서비스로 이전 수행
  • 서비스 마이그레이션을 위해 다운타임이 발생해야 하는 시점 이해
  • 마이그레이션 정리 단계

필요한 항목

  • 소유자 권한이 있는 Google Cloud 프로젝트

2. Codelab 토폴로지

이 Codelab에서는 편의상 모든 리소스를 단일 프로젝트에 중앙 집중화합니다. 이 Codelab에는 생산자와 소비자가 서로 다른 프로젝트에 있는 경우 생산자 측에서 실행해야 하는 작업과 소비자 측에서 수행해야 하는 작업이 설명되어 있습니다.

이 Codelab에는 4가지 상태가 있습니다.

7dbf27cf215f9703.png

상태 1은 VPC 피어링 상태입니다. 두 개의 VPC, consumer-vpc 및 Producer-vpc가 함께 피어링됩니다. Producer-vpc에는 내부 네트워크 패스 스루 부하 분산기를 통해 노출되는 간단한 Apache 서비스가 있습니다. Consumer-vpc에는 테스트 목적으로 단일 consumer-vm이 있습니다.

7f64427c0e59d417.png

상태 2는 PSC 테스트 상태입니다. 새 전달 규칙을 만들고 이 규칙을 사용하여 서비스 연결과 연결합니다. 그런 다음 PSC 서비스가 예상대로 작동하는지 테스트하기 위해 consumer-vpc에 테스트 PSC 엔드포인트를 생성합니다.

98c324c59c1fbf68.png

상태 3은 마이그레이션 상태입니다. consumer-vpc에서 사용하기 위해 VPC 피어링 기반 서비스가 배포된 위치의 서브넷 범위를 Producer-vpc에 예약합니다. 그런 다음 Producer-vpc의 기존 전달 규칙과 동일한 IP 주소로 새 PSC 엔드포인트를 생성합니다.

a64ab7b69132c722.png

상태 4는 최종 PSC 상태입니다. 테스트 PSC 엔드포인트를 삭제하고 consumer-vpc와 Producer-vpc 간의 VPC 피어링을 삭제할 예정입니다.

3. 설정 및 요구사항

자습형 환경 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로 PROJECT_ID로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다.
  • 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.

55efc1aaa7a4d3ad.png

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

7ffe5cbb04455448.png

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab의 모든 작업은 브라우저 내에서 수행할 수 있습니다. 아무것도 설치할 필요가 없습니다.

4. 시작하기 전에

API 사용 설정

Cloud Shell 내에서 프로젝트가 설정되어 변수를 구성했는지 확인합니다.

gcloud auth login
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
export projectid=[YOUR-PROJECT-ID]
export region=us-central1
export zone=$region-a
echo $projectid
echo $region
echo $zone

필요한 모든 서비스 사용 설정

gcloud services enable compute.googleapis.com
gcloud services enable networkconnectivity.googleapis.com
gcloud services enable dns.googleapis.com

5. 생산자 VPC 네트워크 만들기 (프로듀서 활동)

VPC 네트워크

Cloud Shell 사용

gcloud compute networks create producer-vpc \
    --subnet-mode=custom

서브넷 만들기

Cloud Shell 사용

gcloud compute networks subnets create producer-service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

gcloud compute networks subnets create producer-fr-subnet \
        --network=producer-vpc \
        --range=192.168.0.0/28 \
        --region=$region

생성자 Cloud Router 및 Cloud NAT 만들기

Cloud Shell 사용

gcloud compute routers create $region-cr \
   --network=producer-vpc \
   --region=$region

gcloud compute routers nats create $region-nat \
    --router=$region-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

생산자 네트워크 방화벽 정책 및 방화벽 규칙 만들기

Cloud Shell 사용

gcloud compute network-firewall-policies create producer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy producer-vpc-policy \
    --network producer-vpc \
    --name network-producer-vpc \
    --global-firewall-policy

IAP에서 VM 인스턴스에 연결할 수 있도록 허용하려면 다음과 같은 방화벽 규칙을 만듭니다.

  • IAP를 사용하여 액세스할 수 있도록 하려는 모든 VM 인스턴스에 적용됩니다.
  • IP 범위 35.235.240.0/20에서 들어오는 인그레스 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달에 사용하는 모든 IP 주소가 포함됩니다.

Cloud Shell 사용

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

또한 서비스에 대한 부하 분산기 상태 점검을 허용하고 consumer-vpc에서 연결되는 VM의 네트워크 트래픽을 허용하는 규칙을 두 개 더 만들 예정입니다.

Cloud Shell 사용

gcloud compute network-firewall-policies rules create 2000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "LB healthchecks" \
    --direction INGRESS \
    --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
    --layer4-configs tcp:80  \
    --global-firewall-policy


gcloud compute network-firewall-policies rules create 3000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access from consumer-vpc" \
    --direction INGRESS \
    --src-ip-ranges 10.0.1.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

6. 프로듀서 서비스 설정 (프로듀서 활동)

Apache 웹 서버를 실행하는 단일 VM으로 프로듀서 서비스를 만들어 리전 내부 네트워크 패스 스루 부하 분산기가 있는 비관리형 인스턴스 그룹에 추가됩니다.

VM 및 비관리형 인스턴스 그룹 만들기

Cloud Shell 사용

gcloud compute instances create producer-service-vm \
    --network producer-vpc \
    --subnet producer-service-subnet \
    --zone $zone \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "I am a Producer Service." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

Cloud Shell 사용

gcloud compute instance-groups unmanaged create prod-uig \
  --zone=$zone

gcloud compute instance-groups unmanaged add-instances prod-uig \
  --zone=$zone \
  --instances=producer-service-vm

리전 내부 네트워크 패스 스루 부하 분산기 만들기

Cloud Shell 사용

gcloud compute health-checks create http producer-hc \
        --region=$region

gcloud compute backend-services create producer-bes \
  --load-balancing-scheme=internal \
  --protocol=tcp \
  --region=$region \
  --health-checks=producer-hc \
  --health-checks-region=$region

gcloud compute backend-services add-backend producer-bes \
  --region=$region \
  --instance-group=prod-uig \
  --instance-group-zone=$zone

gcloud compute addresses create producer-fr-ip\
  --region $region \
  --subnet producer-fr-subnet \
  --addresses 192.168.0.2

gcloud compute forwarding-rules create producer-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-fr-subnet \
  --address=producer-fr-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

7. 소비자 VPC 네트워크 만들기 (소비자 활동)

VPC 네트워크

Cloud Shell 사용

gcloud compute networks create consumer-vpc \
    --subnet-mode=custom

서브넷 만들기

Cloud Shell 사용

gcloud compute networks subnets create consumer-vm-subnet \
    --network=consumer-vpc \
    --range=10.0.1.0/28 \
    --region=$region

소비자 네트워크 방화벽 정책 및 방화벽 규칙 만들기

consumer-vpc에 대한 또 다른 네트워크 방화벽 정책을 만들어 보겠습니다.

Cloud Shell 사용

gcloud compute network-firewall-policies create consumer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy consumer-vpc-policy \
    --network consumer-vpc \
    --name network-consumer-vpc \
    --global-firewall-policy

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy consumer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

8. VPC 피어 만들기

프로듀서 활동

Cloud Shell 사용

gcloud compute networks peerings create producer-vpc-peering \
    --network=producer-vpc \
    --peer-project=$projectid \
    --peer-network=consumer-vpc

소비자 활동

Cloud Shell 사용

gcloud compute networks peerings create consumer-vpc-peering \
    --network=consumer-vpc \
    --peer-project=$projectid \
    --peer-network=producer-vpc

consumer-vpc에서 경로 목록을 확인하여 피어링이 설정되었는지 확인합니다. consumer-vpc 및 Producer-vpc의 경로가 모두 표시됩니다.

소비자 활동

Cloud Shell 사용

gcloud compute routes list --filter="network=consumer-vpc"

예상 출력:

NAME: default-route-49dda7094977e231
NETWORK: consumer-vpc
DEST_RANGE: 0.0.0.0/0
NEXT_HOP: default-internet-gateway
PRIORITY: 1000

NAME: default-route-r-10d65e16cc6278b2
NETWORK: consumer-vpc
DEST_RANGE: 10.0.1.0/28
NEXT_HOP: consumer-vpc
PRIORITY: 0

NAME: peering-route-496d0732b4f11cea
NETWORK: consumer-vpc
DEST_RANGE: 192.168.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

NAME: peering-route-b4f9d3acc4c08d55
NETWORK: consumer-vpc
DEST_RANGE: 10.0.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

9. DNS 영역 만들기 (소비자 활동)

보다 현실적인 예를 보여주기 위해 비공개 IP 주소가 아닌 DNS를 통해 생산자 서비스를 호출하는 Cloud DNS 비공개 영역을 만듭니다.

앞서 만든 네트워크 패스 스루 부하 분산기 전달 규칙 IP 주소로 service.example.com을 가리키는 A 레코드를 example.com 도메인에 추가합니다. 전달 규칙 IP 주소는 192.168.0.2입니다.

Cloud Shell 사용

gcloud dns managed-zones create "producer-service" \
   --dns-name=example.com \
   --description="producer service dns" \
   --visibility=private \
   --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="producer-service"

gcloud dns record-sets transaction add 192.168.0.2 \
   --name=service.example.com \
   --ttl=300 \
   --type=A \
   --zone="producer-service"

gcloud dns record-sets transaction execute \
   --zone="producer-service"

10. VPC 피어를 통한 테스트 프로듀서 서비스 (소비자 활동)

이제 State 1 아키텍처가 생성되었습니다.

소비자-클라이언트 VM 만들기

Cloud Shell 사용

gcloud compute instances create consumer-client \
   --zone=$zone \
   --subnet=consumer-vm-subnet \
   --no-address

연결 테스트

Cloud Shell 사용

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

소비자-클라이언트 VM에서

curl service.example.com

정상 출력

I am a Producer Service. 

소비자-클라이언트 VM에서

exit

11. Private Service Connect용 서비스 준비 (프로듀서 활동)

초기 설정 단계가 모두 완료되었으므로 이제 Private Service Connect로 마이그레이션할 VPC 피어링 서비스를 준비해 보겠습니다. 이 섹션에서는 서비스 연결을 통해 노출되도록 서비스를 구성하여 Producer-vpc를 변경합니다. 서비스의 기존 IP 주소를 그대로 유지하기 위해 기존 서브넷을 consumer-vpc로 마이그레이션할 수 있도록 해당 서브넷 내에 새 서브넷과 새 전달 규칙을 만들어야 합니다.

새 부하 분산기 전달 규칙 IP가 호스팅될 서브넷을 만듭니다.

Cloud Shell 사용

gcloud compute networks subnets create producer-psc-fr-subnet \
    --network=producer-vpc \
    --range=10.0.2.64/28 \
    --region=$region

부하 분산기 전달 규칙 내부 IP 주소를 만듭니다.

Cloud Shell 사용

gcloud compute addresses create producer-psc-ip \
  --region $region \
  --subnet producer-psc-fr-subnet \
  --addresses 10.0.2.66

새 부하 분산기 전달 규칙을 만듭니다. 이 규칙은 이전에 구성한 것과 동일한 백엔드 서비스 및 상태 확인을 사용하도록 구성됩니다.

Cloud Shell 사용

gcloud compute forwarding-rules create psc-service-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-psc-fr-subnet \
  --address=producer-psc-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

psc-nat-subnet은 네트워크 주소 변환을 위해 PSC 서비스 연결과 연결됩니다. 프로덕션 사용 사례의 경우 연결된 엔드포인트 수를 지원하도록 이 서브넷의 크기를 적절하게 조절해야 합니다. 자세한 내용은 PSC NAT 서브넷 크기 조정 문서를 참조하세요.

Cloud Shell 사용

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --range=10.100.100.0/28 \
    --region=$region \
    --purpose=PRIVATE_SERVICE_CONNECT

이제 psc-nat-subnet에서 오는 트래픽을 허용하려면 네트워크 방화벽 정책에 방화벽 규칙을 추가해야 합니다. PSC를 통해 서비스에 액세스할 때 psc-nat-subnet에서 트래픽이 발생합니다.

Cloud Shell 사용

gcloud compute network-firewall-policies rules create 2001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow PSC NAT subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.100.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

서비스 연결을 만들고 다음 섹션에서 PSC 엔드포인트를 구성할 서비스 연결 URI를 기록해 둡니다.

Cloud Shell 사용

gcloud compute service-attachments create producer-sa \
    --region=$region \
    --producer-forwarding-rule=psc-service-fr  \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$projectid=5 \
    --nat-subnets=psc-nat-subnet

Cloud Shell 사용

gcloud compute service-attachments describe producer-sa --region=$region

샘플 출력

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-04-24T11:23:09.886-07:00'
description: ''
enableProxyProtocol: false
fingerprint: xxx
id: 'xxx'
kind: compute#serviceAttachment
name: producer-sa
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxx'
  low: 'xxx'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/serviceAttachments/producer-sa
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/forwardingRules/psc-service-fr

12. '테스트' 소비자 PSC 엔드포인트를 생산자 서비스에 연결하고 테스트 (소비자 활동)

이제 아키텍처는 상태 2입니다.

이 시점에서 VPC 피어링을 통해 노출된 기존 프로듀서 서비스는 여전히 활성 상태이며 프로덕션 시나리오에서 제대로 작동합니다. 현재 VPC 피어링 서브넷을 소비자 VPC로 마이그레이션하는 중단 기간을 시작하기 전에 노출된 서비스 연결이 제대로 작동하는지 확인하기 위해 '테스트' PSC 엔드포인트를 만듭니다. 최종 상태 연결은 VPC 피어링 기반 서비스의 현재 전달 규칙과 동일한 IP 주소를 가진 PSC 엔드포인트가 됩니다.

PSC 엔드포인트 만들기

Cloud Shell 사용

gcloud compute addresses create test-psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-vm-subnet \
    --addresses 10.0.1.3

아래의 대상 서비스는 이전 단계에서 기록한 서비스 연결 URI입니다.

Cloud Shell 사용

gcloud compute forwarding-rules create test-psc-endpoint \
  --region=$region \
  --network=consumer-vpc \
  --address=test-psc-endpoint-ip \
  --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

'테스트' PSC 엔드포인트 테스트

Cloud Shell 사용

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

고객-클라이언트에서

curl 10.0.1.3

정상 출력

I am a Producer Service. 

고객-클라이언트에서

exit

13. 기존 프로듀서 전달 규칙 서브넷 마이그레이션

이 단계를 수행하면 실시간 VPC 피어링 기반 Producer 서비스가 중단됩니다. 이제 Internal Ranges API를 사용해 전달 규칙 서브넷을 Producer-vpc에서 consumer-vpc로 이전하겠습니다. 이렇게 하면 Producer-vpc에서 서브넷을 삭제하는 동안 서브넷이 사용되지 않도록 잠기고, consumer-vpc에서 마이그레이션을 위한 목적으로만 이 서브넷이 지정됩니다.

내부 범위 API를 사용하려면 기존 VPC 피어링 전달 규칙 서브넷 (Producer-fr-subnet, 192.168.0.0/28)을 예약하고 consumer-vpc (consumer-psc-subnet)에 대상 서브넷 이름을 지정해야 합니다. 몇 단계를 통해 이 이름으로 consumer-vpc에 새 서브넷을 만듭니다.

마이그레이션을 위해 Producer-fr-subnet 예약

프로듀서 활동

Cloud Shell 사용

gcloud network-connectivity internal-ranges create producer-peering-internal-range \
    --ip-cidr-range=192.168.0.0/28 \
    --network=producer-vpc \
    --usage=FOR_MIGRATION \
    --migration-source=projects/$projectid/regions/$region/subnetworks/producer-fr-subnet \
    --migration-target=projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

만든 내부 범위에서 설명을 실행하여 서브넷의 상태를 확인합니다.

프로듀서 활동

Cloud Shell 사용

gcloud network-connectivity internal-ranges describe producer-peering-internal-range

샘플 출력

createTime: '2025-04-24T19:26:10.589343291Z'
ipCidrRange: 192.168.0.0/28
migration:
  source: projects/$projectid/regions/$region/subnetworks/producer-fr-subnet
  target: projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet
name: projects/$projectid/locations/global/internalRanges/producer-peering-internal-range
network: https://www.googleapis.com/compute/v1/projects/$project/global/networks/producer-vpc
peering: FOR_SELF
updateTime: '2025-04-24T19:26:11.521960016Z'
usage: FOR_MIGRATION

VPC 피어링 기반 전달 규칙 및 서브넷 삭제

프로듀서 활동

Cloud Shell 사용

gcloud compute forwarding-rules delete producer-fr --region=$region

gcloud compute addresses delete producer-fr-ip --region=$region

gcloud compute networks subnets delete producer-fr-subnet --region=$region

서브넷 마이그레이션

앞에서 만든 내부 범위를 사용하여 새 서브넷을 만들어 서브넷을 consumer-vpc로 마이그레이션합니다. 이 서브넷의 이름은 앞서 타겟팅한 이름 (consumer-psc-subnet)과 동일해야 합니다. PEER_MIGRATION의 구체적인 목적은 서브넷이 피어링된 VPC 간의 서브넷 마이그레이션을 위해 예약되어 있음을 나타냅니다. 이 목적 플래그를 사용하면 이 서브넷에 예약된 고정 IP 주소와 PSC 엔드포인트만 포함될 수 있습니다.

소비자 활동

Cloud Shell 사용

gcloud compute networks subnets create consumer-psc-subnet \
  --purpose=PEER_MIGRATION \
  --network=consumer-vpc \
  --range=192.168.0.0/28 \
  --region=$region

14. 종료 상태 PSC 엔드포인트 (소비자 활동) 만들기

이 시점에서 Producer 서비스는 여전히 다운된 상태입니다. 방금 만든 서브넷은 여전히 잠겨 있으며 특정 마이그레이션 목적으로만 사용할 수 있습니다. 이 서브넷에 VM을 만들어 이를 테스트할 수 있습니다. VM 생성이 실패합니다.

Cloud Shell 사용

gcloud compute instances create test-consumer-vm \
    --zone=$zone \
    --subnet=consumer-psc-subnet \
    --no-address

정상 출력

ERROR: (gcloud.compute.instances.create) Could not fetch resource:
 - Subnetwork must have purpose=PRIVATE.

이 서브넷은 PSC 엔드포인트를 만드는 데만 사용할 수 있습니다. 생성한 IP 주소는 프로듀서 서비스가 VPC 피어를 통해 사용한 전달 규칙과 동일한 IP를 사용합니다.

Cloud Shell 사용

gcloud compute addresses create psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-psc-subnet \
    --addresses 192.168.0.2

앞서 언급했듯이 "테스트" PSC 엔드포인트를 생성할 때도 사용한 것과 동일한 서비스 연결 URI를 사용해야 합니다.

Cloud Shell 사용

gcloud compute forwarding-rules create psc-endpoint \
    --region=$region \
    --network=consumer-vpc \
    --address=psc-endpoint-ip \
    --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

15. 최종 상태 PSC 엔드포인트 테스트 (소비자 활동)

이제 상태 3 아키텍처에 있습니다.

Cloud Shell 사용

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

소비자-클라이언트 VM에서

curl service.example.com

정상 출력

I am a Producer Service. 

소비자-클라이언트 VM에서

exit

이 시점에서 서비스 중단이 종료되었으며 서비스가 다시 활성화됩니다. 기존 DNS는 변경할 필요가 없었습니다. 소비자 측 클라이언트를 변경할 필요가 없습니다. 애플리케이션은 마이그레이션된 서비스에 대한 작업을 재개할 수 있습니다.

16. 마이그레이션 정리

이전을 완료하려면 몇 가지 정리 단계를 수행해야 합니다. 리소스를 삭제하고 잠금 해제해야 합니다.

내부 범위 서브넷 잠금 해제

이렇게 하면 마이그레이션된 서브넷이 잠금 해제되어 용도가 'PEER_MIGRATION'에서 'PRIVATE'로 변경될 수 있습니다.

프로듀서 활동

Cloud Shell 사용

gcloud network-connectivity internal-ranges delete producer-peering-internal-range

소비자 활동

Cloud Shell 사용

gcloud compute networks subnets update consumer-psc-subnet \
    --region=$region \
    --purpose=PRIVATE

gcloud compute networks subnets describe consumer-psc-subnet --region=$region

샘플 출력

creationTimestamp: '2025-04-24T12:29:33.883-07:00'
fingerprint: xxx
gatewayAddress: 192.168.0.1
id: 'xxx'
ipCidrRange: 192.168.0.0/28
kind: compute#subnetwork
name: consumer-psc-subnet
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
privateIpGoogleAccess: false
privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS
purpose: PRIVATE
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

VPC 피어 삭제

프로듀서 활동

Cloud Shell 사용

gcloud compute networks peerings delete producer-vpc-peering \
    --network=producer-vpc

소비자 활동

Cloud Shell 사용

gcloud compute networks peerings delete consumer-vpc-peering \
        --network=consumer-vpc

'테스트' PSC 엔드포인트 삭제

소비자 활동

Cloud Shell 사용

gcloud compute forwarding-rules delete test-psc-endpoint --region=$region
gcloud compute addresses delete test-psc-endpoint-ip --region=$region

17. 마이그레이션 정리 후 최종 테스트 (소비자 활동)

이제 상태 4 아키텍처 (최종 상태)가 달성되었습니다.

PSC 엔드포인트 연결을 다시 테스트하여 마이그레이션 정리 시 부정적인 영향이 관찰되지 않는지 확인합니다.

Cloud Shell 사용

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

소비자-클라이언트 VM에서

curl service.example.com

정상 출력

I am a Producer Service. 

소비자-클라이언트 VM에서

exit

성공!

18. 삭제 단계

Cloud Shell 사용

gcloud compute forwarding-rules delete psc-endpoint --region=$region -q

gcloud compute addresses delete psc-endpoint-ip --region=$region -q

gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q

gcloud dns record-sets delete service.example.com --zone="producer-service" --type=A -q

gcloud dns managed-zones delete "producer-service" -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy consumer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy  --name=network-consumer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q

gcloud compute networks subnets delete consumer-psc-subnet --region=$region -q

gcloud compute networks subnets delete consumer-vm-subnet --region=$region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute service-attachments delete producer-sa --region=$region -q

gcloud compute forwarding-rules delete psc-service-fr --region=$region -q

gcloud compute addresses delete producer-psc-ip --region=$region -q

gcloud compute backend-services delete producer-bes --region=$region -q

gcloud compute health-checks delete producer-hc --region=$region -q

gcloud compute instance-groups unmanaged delete prod-uig --zone=$zone -q

gcloud compute instances delete producer-service-vm --zone=$zone --project=$projectid -q

gcloud compute network-firewall-policies rules delete 3000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy  --name=network-producer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete producer-vpc-policy --global -q

gcloud compute routers nats delete $region-nat --router=$region-cr --region=$region -q

gcloud compute routers delete $region-cr --region=$region -q

gcloud compute networks subnets delete psc-nat-subnet --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet --region=$region -q

gcloud compute networks subnets delete producer-service-subnet --region=$region -q

gcloud compute networks delete producer-vpc -q

19. 축하합니다.

축하합니다. Codelab을 완료했습니다.

학습한 내용

  • VPC 피어링 기반 서비스 설정 방법
  • PSC 기반 서비스 설정 방법
  • Internal-Ranges API를 사용하여 VPC 피어링을 통해 서브넷 마이그레이션을 수행하여 VPC 피어링에서 PSC 서비스로 이전 수행
  • 서비스 마이그레이션을 위해 다운타임이 발생해야 하는 시점 이해
  • 마이그레이션 정리 단계