1. 소개
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가지 상태가 있습니다.
상태 1은 VPC 피어링 상태입니다. 두 개의 VPC, consumer-vpc 및 Producer-vpc가 함께 피어링됩니다. Producer-vpc에는 내부 네트워크 패스 스루 부하 분산기를 통해 노출되는 간단한 Apache 서비스가 있습니다. Consumer-vpc에는 테스트 목적으로 단일 consumer-vm이 있습니다.
상태 2는 PSC 테스트 상태입니다. 새 전달 규칙을 만들고 이 규칙을 사용하여 서비스 연결과 연결합니다. 그런 다음 PSC 서비스가 예상대로 작동하는지 테스트하기 위해 consumer-vpc에 테스트 PSC 엔드포인트를 생성합니다.
상태 3은 마이그레이션 상태입니다. consumer-vpc에서 사용하기 위해 VPC 피어링 기반 서비스가 배포된 위치의 서브넷 범위를 Producer-vpc에 예약합니다. 그런 다음 Producer-vpc의 기존 전달 규칙과 동일한 IP 주소로 새 PSC 엔드포인트를 생성합니다.
상태 4는 최종 PSC 상태입니다. 테스트 PSC 엔드포인트를 삭제하고 consumer-vpc와 Producer-vpc 간의 VPC 피어링을 삭제할 예정입니다.
3. 설정 및 요구사항
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로
PROJECT_ID
로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다. - 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.
환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.
가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 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 서비스로 이전 수행
- 서비스 마이그레이션을 위해 다운타임이 발생해야 하는 시점 이해
- 마이그레이션 정리 단계