Private Service Connect: VPC Peering to Private Service Connect Migration

درباره این codelab
schedule۷۴ دقیقه
subjectآخرین به‌روزرسانی: ۸ اردیبهشت ۱۴۰۴
account_circleنویسنده: Lorin Price

VPC Peering یک روش رایج برای تولیدکنندگان برای ارائه خدمات مصرفی به کاربران خود است. با این حال، با استفاده از همتاسازی VPC، پیچیدگی‌های مسیریابی زیادی مانند همتاسازی VPC غیر گذرا، مصرف آدرس IP زیاد، و قرار گرفتن بیش از حد منابع در یک VPC همتا، به وجود می‌آید.

Private Service Connect (PSC) یک روش اتصال است که به تولیدکنندگان اجازه می‌دهد تا یک سرویس را در یک نقطه پایانی واحدی که مصرف‌کننده در یک VPC حجم کاری ارائه می‌کند، در معرض دید قرار دهند. این امر بسیاری از مشکلاتی که کاربران با همتاسازی VPC با آن مواجه هستند را از بین می برد. در حالی که بسیاری از سرویس‌های جدید با PSC ایجاد می‌شوند، هنوز سرویس‌های زیادی به عنوان خدمات VPC Peering وجود دارند.

Google Cloud از معرفی یک مسیر مهاجرت برای سرویس‌هایی که از طریق VPC Peering ایجاد کرده‌اید برای انتقال به معماری مبتنی بر PSC هیجان‌زده است. با استفاده از این روش مهاجرت، آدرس IP سرویس تولیدکننده که از طریق همتاسازی VPC در معرض دید قرار می‌گیرد، تا معماری مبتنی بر PSC حفظ می‌شود، بنابراین حداقل تغییرات مورد نیاز برای مصرف‌کننده وجود دارد. با این کد لبه همراه باشید تا مراحل فنی انجام این مهاجرت را بیاموزید.

توجه: این مسیر انتقال فقط برای سرویس‌هایی است که تولیدکننده و مصرف‌کننده در یک سازمان Google Cloud وجود دارند. برای هر سرویس Google Cloud یا سرویس‌های شخص ثالثی که از همتاسازی VPC استفاده می‌کنند، از روش مهاجرت مشابهی استفاده می‌کنند، اما برای خود سرویس سفارشی می‌شود. لطفاً برای پرس و جو در مورد مسیر مهاجرت برای این نوع خدمات با طرف های مناسب تماس بگیرید.

چیزی که یاد خواهید گرفت

  • نحوه راه اندازی یک سرویس مبتنی بر همتاسازی VPC
  • نحوه راه اندازی یک سرویس مبتنی بر PSC
  • استفاده از Internal-Ranges API برای انجام انتقال زیر شبکه از طریق VPC Peering برای دستیابی به انتقال VPC Peering به سرویس PSC.
  • درک اینکه چه زمانی برای انتقال سرویس باید زمان خرابی رخ دهد
  • مراحل پاکسازی مهاجرت

آنچه شما نیاز دارید

  • پروژه Google Cloud با مجوزهای مالک

2. توپولوژی Codelab

برای سادگی، این Codelab تمام منابع را در یک پروژه متمرکز می کند. در Codelab ذکر خواهد شد که در صورت حضور تولیدکنندگان و مصرف کنندگان در پروژه های مختلف، چه اقداماتی در سمت تولیدکننده و چه اقداماتی در سمت مصرف کننده باید انجام شود.

این کد لبه دارای 4 حالت خواهد بود.

7dbf27cf215f9703.png

حالت 1 حالت VPC Peering است. دو VPC وجود خواهد داشت، consumer-vpc و producer-vpc که با هم همتا می شوند. Producer-vpc یک سرویس ساده آپاچی خواهد داشت که از طریق یک Network Passthrough Load Balancer داخلی در معرض دید قرار می گیرد. Consumer-vpc برای مقاصد آزمایشی یک مصرف کننده-vm واحد خواهد داشت.

7f64427c0e59d417.png

حالت 2 حالت تست PSC است. ما یک قانون بازارسال جدید ایجاد خواهیم کرد و از این قانون برای ارتباط با پیوست سرویس خود استفاده خواهیم کرد. سپس یک نقطه پایانی آزمایشی PSC در consumer-vpc ایجاد می‌کنیم تا آزمایش کنیم که سرویس PSC ما مطابق انتظار کار می‌کند.

98c324c59c1fbf68.png

ایالت 3 وضعیت مهاجرت است. ما محدوده زیرشبکه را در producer-vpc که در آن سرویس مبتنی بر VPC Peering برای استفاده در consumer-vpc مستقر شده است، رزرو می کنیم. سپس یک نقطه پایانی PSC جدید با همان آدرس IP به عنوان قانون ارسال از قبل موجود در producer-vpc ایجاد می کنیم.

a64ab7b69132c722.png

حالت 4 آخرین وضعیت PSC است. ما نقطه پایانی آزمایشی PSC را پاکسازی می کنیم و همتاسازی VPC بین consumer-vpc و producer-vpc را حذف می کنیم.

3. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورت‌حساب فراتر از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

55efc1aaa7a4d3ad.png

تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.

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

Producer 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 شما متصل شود، یک قانون فایروال ایجاد کنید که:

  • برای تمام نمونه های VM که می خواهید با استفاده از IAP در دسترس باشند، اعمال می شود.
  • به ترافیک ورودی از محدوده IP 35.235.240.0/20 اجازه می دهد. این محدوده شامل تمام آدرس های IP است که IAP برای ارسال TCP استفاده می کند.

از 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

ما همچنین دو قانون دیگر ایجاد خواهیم کرد که امکان بررسی سلامت Load Balancer را برای سرویس و همچنین اجازه ترافیک شبکه از VMهایی را که از consumer-vpc متصل می شوند، ایجاد خواهیم کرد.

از 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. راه اندازی سرویس تولید کننده (فعالیت تولید کننده)

ما یک سرویس تولید کننده با یک ماشین مجازی که یک وب سرور آپاچی را اجرا می کند ایجاد خواهیم کرد که به یک گروه نمونه مدیریت نشده اضافه می شود که با یک بار متعادل کننده گذر شبکه داخلی منطقه ای اضافه می شود.

VM و Unmanaged Instance Group را ایجاد کنید

از 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 Peer ایجاد کنید

فعالیت تولید کننده

از 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 (فعالیت مصرف کننده)

ما یک Cloud DNS Private Zone برای فراخوانی سرویس تولیدکننده از طریق DNS به جای یک آدرس IP خصوصی ایجاد خواهیم کرد تا نمونه واقعی تر را به نمایش بگذاریم.

یک رکورد A به domain pointing service.example.com به آدرس IP Network Passthrough Load Balancer Forwarding Rule که قبلا ایجاد کردیم اضافه می کنیم. آن آدرس 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 Peer (فعالیت مصرف کننده)

در این مرحله، معماری 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 (فعالیت تولید کننده)

اکنون که تمام مراحل اولیه راه اندازی را به پایان رساندیم، اکنون شروع به آماده سازی سرویس VPC-Peered برای انتقال به Private Service Connect می کنیم. در این بخش، با پیکربندی سرویس به گونه ای که از طریق یک Service Attachment در معرض نمایش قرار گیرد، تغییراتی در 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

قانون حمل و نقل بار متعادل کننده جدید را ایجاد کنید. این قانون برای استفاده از همان سرویس backend و بررسی های سلامتی پیکربندی شده است که قبلاً پیکربندی کردیم.

از 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. «آزمایش» نقطه پایانی PSC مصرف کننده را به خدمات تولیدکننده و آزمایش (فعالیت مصرف کننده) وصل کنید.

معماری اکنون در حالت 2 است.

در این مرحله، سرویس تولیدکننده موجود که از طریق VPC Peering در معرض دید قرار می‌گیرد، هنوز در سناریوی تولید به درستی فعال است و کار می‌کند. ما یک نقطه پایانی PSC "آزمایشی" ایجاد خواهیم کرد تا اطمینان حاصل کنیم که پیوست سرویس در معرض به درستی کار می کند قبل از اینکه دوره قطعی را برای انتقال زیرشبکه همتا VPC فعلی به VPC مصرف کننده آغاز کنیم. اتصال حالت پایانی ما یک نقطه پایانی PSC با همان آدرس IP قانون انتقال فعلی برای سرویس مبتنی بر VPC Peering خواهد بود.

نقطه پایانی 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 Peering زنده می شود. اکنون زیرشبکه قانون حمل و نقل را با استفاده از Internal Ranges API از producer-vpc به customer-vpc منتقل می کنیم. این کار باعث می‌شود که زیرشبکه در دوره میانی زمانی که ما زیرشبکه را در producer-vpc حذف می‌کنیم و آن را فقط برای اهداف مهاجرت برای ایجاد در consumer-vpc تعیین می‌کنیم، استفاده نشود.

API محدوده داخلی مستلزم این است که زیرشبکه قانون ارسال همتا VPC موجود (producer-fr-subnet, 192.168.0.0/28) را رزرو کنید و یک نام زیرشبکه هدف در consumer-vpc (consumer-psc-subnet) تعیین کنید. ما در چند مرحله یک زیر شبکه جدید با این نام در consumer-vpc ایجاد می کنیم.

برای مهاجرت، زیرشبکه تولیدکننده fr را رزرو کنید

فعالیت تولید کننده

از 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 Peering را حذف کنید

فعالیت تولید کننده

از 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

Subnet را مهاجرت کنید

با ایجاد یک زیرشبکه جدید با استفاده از محدوده داخلی که قبلا ایجاد کردیم، زیرشبکه را به مصرف کننده-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 State State (فعالیت مصرف کننده) را ایجاد کنید

در این مرحله، سرویس 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 که ایجاد می کنیم از همان IP قانون ارسال استفاده می کند که سرویس تولید کننده ما از طریق VPC Peer استفاده می کند.

از Cloud Shell

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

یک بار دیگر، باید از همان URI پیوست سرویس استفاده کنید که قبلاً ذکر کردید و همچنین برای ایجاد نقطه پایانی PSC "تست" استفاده شد.

از 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 حالت پایانی (فعالیت مصرف کننده) را آزمایش کنید

در این مرحله، شما در معماری State 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. پاکسازی مهاجرت

برای نهایی کردن انتقال، چند مرحله پاکسازی وجود دارد که باید انجام دهیم. ما باید منابع را حذف و قفل کنیم.

زیرشبکه Internal Range را باز کنید

با این کار، زیرشبکه انتقال یافته باز می شود تا هدف آن از "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 Peers را حذف کنید

فعالیت تولید کننده

از 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. تست نهایی پس از پاکسازی مهاجرت (فعالیت مصرف کننده)

در این مرحله، معماری State 4 (وضعیت نهایی) به دست آمده است.

اتصال PSC Endpoint را دوباره تست کنید تا مطمئن شوید که هیچ اثر نامطلوبی از پاکسازی مهاجرت مشاهده نمی شود.

از 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. تبریک می گویم!

برای تکمیل کد لبه تبریک می گویم.

آنچه را پوشش داده ایم

  • نحوه راه اندازی یک سرویس مبتنی بر همتاسازی VPC
  • نحوه راه اندازی یک سرویس مبتنی بر PSC
  • استفاده از Internal-Ranges API برای انجام انتقال زیر شبکه از طریق VPC Peering برای دستیابی به انتقال VPC Peering به سرویس PSC.
  • درک اینکه چه زمانی برای انتقال سرویس باید زمان خرابی رخ دهد
  • مراحل پاکسازی مهاجرت