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

1. 소개

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

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

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

참고: 이 마이그레이션 경로는 프로듀서와 컨슈머가 동일한 Google Cloud 조직 내에 있는 서비스에만 해당합니다. VPC 피어링을 사용하는 Google Cloud 서비스 또는 서드 파티 서비스의 경우 유사한 이전 방법을 활용하지만 서비스 자체에 맞게 맞춤설정됩니다. 이러한 유형의 서비스의 이전 경로에 관해 문의하려면 적절한 당사자에게 문의하세요.

학습할 내용

  • VPC 피어링 기반 서비스를 설정하는 방법
  • PSC 기반 서비스를 설정하는 방법
  • Internal-Ranges API를 사용하여 VPC 피어링을 통해 서브넷을 이전하여 PSC 서비스로 VPC 피어링을 이전합니다.
  • 서비스 이전 시 다운타임이 필요한 경우 이해하기
  • 마이그레이션 정리 단계

필요한 항목

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

2. Codelab 토폴로지

간단하게 하기 위해 이 Codelab에서는 모든 리소스를 단일 프로젝트에 중앙 집중화합니다. 프로듀서와 소비자가 서로 다른 프로젝트에 있는 경우 프로듀서 측에서 실행해야 하는 작업과 소비자 측에서 실행해야 하는 작업이 코드랩에 명시됩니다.

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

7dbf27cf215f9703.png

상태 1은 VPC 피어링 상태입니다. 함께 피어링될 소비자 VPC와 프로듀서 VPC라는 두 개의 VPC가 있습니다. producer-vpc에는 내부 네트워크 패스 스루 부하 분산기를 통해 노출된 간단한 Apache 서비스가 있습니다. 소비자 VPC에는 테스트 목적으로 단일 소비자 VM이 있습니다.

7f64427c0e59d417.png

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

98c324c59c1fbf68.png

상태 3은 이전 상태입니다. VPC 피어링 기반 서비스가 배포된 프로듀서-vpc의 서브넷 범위는 소비자-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

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

소비자 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 피어를 통한 프로듀서 서비스 테스트 (소비자 활동)

이제 상태 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를 변경합니다. 기존 서브넷을 consumer-vpc로 이전하여 서비스의 기존 IP 주소를 그대로 유지하려면 해당 서브넷 내에 새 서브넷과 새 전달 규칙을 만들어야 합니다.

새 부하 분산기 전달 규칙 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

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

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. 'test' 소비자 PSC 엔드포인트를 프로듀서 서비스에 연결하고 테스트 (소비자 활동)

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

이 시점에는 VPC 피어링을 통해 노출된 기존 프로듀서 서비스가 프로덕션 시나리오에서 여전히 라이브 상태이며 올바르게 작동합니다. 현재 VPC 피어링 서브넷을 소비자 VPC로 마이그레이션하기 위해 중단 기간을 시작하기 전에 노출된 서비스 연결이 올바르게 작동하는지 확인하기 위해 'test' 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

'test' 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 피어링 기반 프로듀서 서비스의 서비스 중단이 시작됩니다. 이제 내부 범위 API를 사용하여 전달 규칙 서브넷을 producer-vpc에서 consumer-vpc로 이전합니다. 이렇게 하면 프로듀서-vpc에서 서브넷을 삭제하고 소비자-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

생성한 internal-range에서 describe를 실행하여 서브넷의 상태를 확인합니다.

제작자 활동

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

서브넷 마이그레이션

이전에 만든 internal-range를 사용하여 새 서브넷을 만들어 서브넷을 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 엔드포인트 만들기 (소비자 활동)

이 시점에서 프로듀서 서비스는 여전히 다운되어 있습니다. 방금 만든 서브넷은 아직 잠겨 있으며 마이그레이션이라는 특정 목적으로만 사용할 수 있습니다. 이 서브넷에서 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

다시 말하지만 앞에서 기록해 두었고 'test' 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

'test' PSC 엔드포인트 삭제

Consumer-Activity

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 피어링을 통해 서브넷을 이전하여 PSC 서비스로 VPC 피어링을 이전합니다.
  • 서비스 이전 시 다운타임이 필요한 경우 이해하기
  • 마이그레이션 정리 단계