Private Service Connect: VPC Peering to Private Service Connect Migration

۱. مقدمه

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

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

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

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

آنچه یاد خواهید گرفت

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

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

  • پروژه گوگل کلود با مجوزهای مالک

۲. توپولوژی Codelab

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

این آزمایشگاه کد ۴ حالت خواهد داشت.

7dbf27cf215f9703.png

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

7f64427c0e59d417.png

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

۹۸c۳۲۴c۵۹c۱fbf۶۸.png

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

a64ab7b69132c722.png

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

۳. تنظیمات و الزامات

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

شروع پوسته ابری

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه‌ای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه کد را می‌توان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.

۴. قبل از شروع

فعال کردن 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

۵. ایجاد شبکه VPC تولیدکننده (فعالیت تولیدکننده)

شبکه VPC

از پوسته ابری

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

ایجاد زیرشبکه‌ها

از پوسته ابری

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

ایجاد روتر ابری تولیدکننده و NAT ابری

از پوسته ابری

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

ایجاد سیاست فایروال شبکه تولیدکننده و قوانین فایروال

از پوسته ابری

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

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

از پوسته ابری

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 و همچنین امکان عبور ترافیک شبکه از ماشین‌های مجازی که از consumer-vpc متصل می‌شوند را فراهم می‌کند.

از پوسته ابری

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

۶. راه‌اندازی خدمات تولیدکننده (فعالیت تولیدکننده)

ما یک سرویس تولیدکننده با یک ماشین مجازی واحد که یک وب سرور آپاچی را اجرا می‌کند، ایجاد خواهیم کرد که به یک گروه نمونه مدیریت نشده (Unmanaged Instance Group) اضافه می‌شود و در مقابل آن یک متعادل‌کننده بار عبوری شبکه داخلی منطقه‌ای (Regional Internal Network Passthrough Load Balancer) قرار دارد.

ایجاد ماشین مجازی و گروه نمونه مدیریت نشده

از پوسته ابری

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'

از پوسته ابری

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

ایجاد متعادل‌کننده بار عبوری شبکه داخلی منطقه‌ای

از پوسته ابری

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

۷. ایجاد شبکه VPC مصرف‌کننده (فعالیت مصرف‌کننده)

شبکه VPC

از پوسته ابری

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

ایجاد زیرشبکه

از پوسته ابری

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

ایجاد سیاست و قوانین فایروال شبکه مصرف‌کننده

ما یک سیاست فایروال شبکه دیگر برای consumer-vpc ایجاد خواهیم کرد.

از پوسته ابری

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

۸. ایجاد همتای VPC

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

از پوسته ابری

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

فعالیت مصرف‌کننده

از پوسته ابری

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

با بررسی لیست مسیرهای موجود در consumer-vpc، از برقراری اتصال مطمئن شوید. باید مسیرهای مربوط به consumer-vpc و producer-vpc را ببینید.

فعالیت مصرف‌کننده

از پوسته ابری

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

۹. ایجاد DNS Zone (فعالیت مصرف‌کننده)

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

ما یک رکورد A به دامنه example.com که به service.example.com اشاره می‌کند، به آدرس IP مربوط به Network Passthrough Load Balancer Forwarding Rule که قبلاً ایجاد کردیم، اضافه خواهیم کرد. آدرس IP مربوط به Forwarding Rule، 192.168.0.2 است.

از پوسته ابری

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"

۱۰. تست سرویس تولیدکننده روی VPC Peer (فعالیت مصرف‌کننده)

در این مرحله، معماری حالت ۱ ایجاد شده است.

ایجاد ماشین مجازی مشتری-مشتری

از پوسته ابری

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

اتصال را آزمایش کنید

از پوسته ابری

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

از ماشین مجازی مشتری-مصرف‌کننده

curl service.example.com

خروجی مورد انتظار

I am a Producer Service. 

از ماشین مجازی مشتری-مصرف‌کننده

exit

۱۱. آماده‌سازی سرویس برای اتصال سرویس خصوصی (فعالیت تولیدکننده)

اکنون که تمام مراحل اولیه راه‌اندازی را انجام داده‌ایم، آماده‌سازی سرویس VPC-Peered را برای مهاجرت به Private Service Connect آغاز خواهیم کرد. در این بخش، با پیکربندی سرویس برای نمایش از طریق یک Service Attachment، تغییراتی را در producer-vpc ایجاد خواهیم کرد. باید یک زیرشبکه جدید و یک قانون ارسال جدید در آن زیرشبکه ایجاد کنیم تا بتوانیم زیرشبکه موجود را به consumer-vpc منتقل کنیم تا آدرس IP موجود سرویس دست نخورده باقی بماند.

زیرشبکه‌ای را ایجاد کنید که IP قانون جدید ارسال متعادل‌کننده بار در آن میزبانی شود.

از پوسته ابری

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

آدرس IP داخلی مربوط به قانون ارسال متعادل‌کننده بار را ایجاد کنید.

از پوسته ابری

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

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

از پوسته ابری

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 به منظور ترجمه آدرس شبکه با ضمیمه سرویس PSC مرتبط خواهد شد. برای موارد استفاده در محیط عملیاتی، این زیرشبکه باید به طور مناسب اندازه‌گذاری شود تا از تعداد نقاط انتهایی متصل پشتیبانی کند. برای اطلاعات بیشتر به مستندات تعیین اندازه زیرشبکه PSC NAT مراجعه کنید.

از پوسته ابری

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 جایی است که ترافیک از آن سرچشمه می‌گیرد.

از پوسته ابری

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 در بخش بعدی یادداشت کنید.

از پوسته ابری

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

از پوسته ابری

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

۱۲. اتصال نقطه پایانی PSC مصرف‌کننده «تست» به سرویس تولیدکننده و تست (فعالیت مصرف‌کننده)

معماری اکنون در وضعیت ۲ قرار دارد.

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

ایجاد نقطه پایانی PSC

از پوسته ابری

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

سرویس هدف زیر، URI پیوست سرویس خواهد بود که در مرحله قبل یادداشت کردید.

از پوسته ابری

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 "آزمایشی" را آزمایش کنید

از پوسته ابری

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

از مصرف‌کننده-مشتری

curl 10.0.1.3

خروجی مورد انتظار

I am a Producer Service. 

از مصرف‌کننده-مشتری

exit

۱۳. زیرشبکه‌ی موجودِ قانونِ ارسالِ تولیدکننده را منتقل کنید

انجام این مراحل باعث قطع سرویس تولیدکننده‌ی مبتنی بر Peering و فعال VPC می‌شود. اکنون زیرشبکه‌ی قانون ارسال را با استفاده از API محدوده‌های داخلی از تولیدکننده-vpc به مصرف‌کننده-vpc منتقل خواهیم کرد. این کار باعث می‌شود زیرشبکه در دوره‌ی موقت که زیرشبکه را در تولیدکننده-vpc حذف می‌کنیم و آن را فقط برای اهداف مهاجرت و ایجاد در مصرف‌کننده-vpc تعیین می‌کنیم، قفل شود.

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

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

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

از پوسته ابری

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

برای مشاهده وضعیت زیرشبکه، یک توصیف روی محدوده داخلی که ایجاد کردیم اجرا کنید.

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

از پوسته ابری

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

قانون و زیرشبکه Forwarding مبتنی بر VPC Peering را حذف کنید

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

از پوسته ابری

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 باشد.

فعالیت مصرف‌کننده

از پوسته ابری

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

۱۴. ایجاد نقطه پایانی PSC وضعیت نهایی (فعالیت مصرف‌کننده)

در این مرحله، سرویس تولیدکننده هنوز از کار افتاده است. زیرشبکه‌ای که ایجاد کردیم هنوز قفل است و فقط می‌تواند برای هدف خاص مهاجرت استفاده شود. می‌توانید این را با تلاش برای ایجاد یک ماشین مجازی در این زیرشبکه آزمایش کنید. ایجاد ماشین مجازی با شکست مواجه خواهد شد.

از پوسته ابری

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 استفاده می‌کرد، استفاده می‌کند.

از پوسته ابری

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

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

از پوسته ابری

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

۱۵. نقطه پایانی PSC وضعیت نهایی (فعالیت مصرف‌کننده) را آزمایش کنید

در این مرحله، شما در معماری حالت ۳ هستید.

از پوسته ابری

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

از ماشین مجازی مشتری-مصرف‌کننده

curl service.example.com

خروجی مورد انتظار

I am a Producer Service. 

از ماشین مجازی مشتری-مصرف‌کننده

exit

در این مرحله، قطعی به پایان رسیده و سرویس دوباره فعال شده است. توجه داشته باشید که ما هیچ تغییری در DNS موجود ایجاد نکردیم. نیازی به ایجاد هیچ تغییری در سمت کلاینت نیست. برنامه‌ها می‌توانند عملیات خود را به سرویس منتقل شده از سر بگیرند.

۱۶. پاکسازی مهاجرت

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

باز کردن قفل زیرشبکه محدوده داخلی

این کار زیرشبکه‌ی منتقل‌شده را از حالت قفل خارج می‌کند تا بتوان هدف آن را از «PEER_MIGRATION» به «PRIVATE» تغییر داد.

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

از پوسته ابری

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

فعالیت مصرف‌کننده

از پوسته ابری

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

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

از پوسته ابری

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

فعالیت مصرف‌کننده

از پوسته ابری

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

نقطه پایانی PSC "آزمایشی" را حذف کنید

فعالیت مصرف‌کننده

از پوسته ابری

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

۱۷. تست نهایی پس از پاکسازی مهاجرت (فعالیت مصرف‌کننده)

در این مرحله، معماری حالت ۴ (حالت نهایی) حاصل شده است.

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

از پوسته ابری

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

از ماشین مجازی مشتری-مصرف‌کننده

curl service.example.com

خروجی مورد انتظار

I am a Producer Service. 

از ماشین مجازی مشتری-مصرف‌کننده

exit

موفقیت!

۱۸. مراحل پاکسازی

از پوسته ابری

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

۱۹. تبریک می‌گویم!

تبریک می‌گویم که آزمایشگاه کد را تمام کردی.

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

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