۱. مقدمه
با Private Service Connect، تولیدکنندگان سرویس میتوانند سرویسها را در یک محیط VPC از طریق یک ضمیمه سرویس در معرض نمایش قرار دهند و به مصرفکنندگان در یک محیط VPC دیگر اجازه دهند تا از طریق یک نقطه پایانی Private Service Connect به آن سرویسها دسترسی پیدا کنند. گاهی اوقات این سرویسهای تولیدکننده به صورت خوشهای از ماشینهای مجازی طراحی میشوند که هر ماشین مجازی سرویسهای یکسانی را روی شماره پورتهای یکسان در معرض نمایش قرار میدهد. پیش از این، این طراحیهای سرویس نیازمند استقرار چندین نقطه پایانی Private Service Connect در سمت مصرفکننده یا استفاده از IP Forwarding در سمت تولیدکننده برای اطمینان از هدف قرار گرفتن ماشین مجازی تولیدکننده صحیح بود.
سرویس خصوصی Connect اکنون میتواند با استفاده از Port Mapping، مقصد صحیح را به صورت بومی هدف قرار دهد. در این آزمایش، در مورد مواردی که این ویژگی مورد نیاز است و نحوه استقرار یک Port Mapping NEG در بار کاری سرویس خصوصی Connect، خواهید آموخت.
آنچه یاد خواهید گرفت
- موارد استفاده از نگاشت پورت اتصال سرویس خصوصی
- مزایای کلیدی نقشهبرداری پورت PSC
- الزامات شبکه
- با استفاده از نگاشت پورت، یک سرویس تولیدکننده Private Service Connect ایجاد کنید.
- ایجاد یک نقطه پایانی اتصال سرویس خصوصی
- برقراری تماس از طریق یک نقطه پایانی Private Service Connect به یک سرویس تولیدکننده
آنچه نیاز دارید
- پروژه گوگل کلود با مجوزهای مالک
۲. موارد استفاده از نگاشت پورت اتصال سرویس خصوصی
ویژگی Port Mapping از Port Mapping NEG (گروه نقطه پایانی شبکه) استفاده میکند که مخصوص موارد استفاده PSC است.
رایجترین انواع تولیدکنندههایی که میتوانند از استفاده از نگاشت پورت بهرهمند شوند، تولیدکنندههای پایگاه داده NoSQL و تولیدکنندههای Kafka هستند. با این حال، هر تولیدکنندهای که به خوشهای از ماشینهای مجازی نیاز دارد که سرویسهای یکسانی را روی پورتهای یکسان با الزامات نگاشت ماشین مجازی خاص ارائه میدهند، میتواند از این ویژگی استفاده کند.
تولیدکننده، نگاشت بین یک پورت کلاینت و یک پورت ماشین مجازی تولیدکننده + پورت مقصد را تعریف میکند. سپس تولیدکننده باید این اطلاعات را با مصرفکننده به اشتراک بگذارد. مصرفکننده از پورتهای از پیش تعریفشده برای شناسایی منحصر به فرد پورت ماشین مجازی تولیدکننده + پورت مقصدی که باید به آن دسترسی پیدا کند، استفاده میکند. پورتی که توسط مصرفکننده استفاده میشود، پورت متفاوتی است که توسط تولیدکننده استفاده میشود.
مزایای کلیدی نقشهبرداری پورت PSC
- ساده است: تولیدکنندگان اجزای PSC را با نگاشت پورت مستقر میکنند و مصرفکنندگان یک نقطه پایانی PSC را مستقر میکنند. PSC به طور خودکار ترجمه آدرس شبکه را انجام میدهد.
- مقرون به صرفه: به منابع PSC اضافی یا چرخههای CPU ماشین مجازی تولیدکننده نیاز ندارد. قیمتگذاری آن مشابه سایر انواع استقرار PSC است.
- عملکرد بالا: نگاشت پورت، همان نرخ انتقال خط و تأخیر کم را مانند سایر حالتهای PSC ارائه میدهد.
- مقیاسپذیر و کارآمد از نظر IP: یک آدرس IP از VPC مصرفکننده میتواند به حداکثر ۱۰۰۰ ماشین مجازی تولیدکننده و ۱۰۰۰ نگاشت پورت دسترسی داشته باشد.
۳. الزامات شبکه
- نگاشت پورت نیازمند استفاده از یک متعادلکننده بار عبوری شبکه داخلی به عنوان متعادلکننده بار تولیدکننده است.
- فقط نقاط پایانی PSC میتوانند با Port Mapping استفاده شوند (نه PSC Backends یا PSC Interface).
- نقشهبرداری بنادر از NEGها، سازههای منطقهای هستند.
- نگاشت پورت NEGها فقط میتوانند از طریق اتصال PSC استفاده شوند. اگر ماشین مجازی کلاینت، قانون ارسال متعادلکننده بار تولیدکننده را مستقیماً فراخوانی کند، آنها کار نخواهند کرد. این موضوع در نحوه آزمایش سرویس تولیدکننده در این آزمایشگاه کد منعکس شده است.
- نقطه پایانی PSC و پشته سرویس تولیدکننده باید در VPC های مختلف باشند.
۴. توپولوژی Codelab

در VPC تولیدکننده، دو ماشین مجازی ایجاد خواهد شد که هر کدام دو وب سرور را اجرا میکنند، یکی روی پورت ۱۰۰۰ و دیگری روی پورت ۲۰۰۰. ما قبل از تنظیم Portmap NEG، Internal Network Passthrough Load Balancer و Service Attachment، هر سرویس را آزمایش خواهیم کرد.
در VPC مصرفکننده، یک نقطه پایانی PSC راهاندازی خواهیم کرد و اتصال به سرویس تولیدکننده را از یک ماشین مجازی کلاینت آزمایش خواهیم کرد.
۵. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



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

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

این ماشین مجازی با تمام ابزارهای توسعهای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه میدهد و روی فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. تمام کارهای شما در این آزمایشگاه کد را میتوان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.
۶. قبل از شروع
فعال کردن APIها
داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone
فعال کردن تمام سرویسهای لازم
gcloud services enable compute.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/24 --region $region --enable-private-ip-google-access gcloud compute networks subnets create psc-nat-subnet --network producer-vpc --range 10.100.100.0/24 --region $region --purpose=PRIVATE_SERVICE_CONNECT
زیرشبکه PSC به منظور ترجمه آدرس شبکه با ضمیمه سرویس PSC مرتبط خواهد شد. برای موارد استفاده در محیط عملیاتی، این زیرشبکه باید به طور مناسب اندازهگذاری شود تا از میزان ترافیک ورودی از تمام نقاط پایانی PSC متصل پشتیبانی کند. برای اطلاعات بیشتر به مستندات تعیین اندازه زیرشبکه PSC NAT مراجعه کنید.
ایجاد سیاست و قوانین فایروال شبکه
از پوسته ابری
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
قانون فایروال زیر، ترافیک روی پورتهای TCP 1000-2000 را از زیرشبکه PSC به تمام نمونههای موجود در شبکه مجاز میکند. در یک محیط عملیاتی، این قانون فایروال باید فقط به نمونههای مرتبط با سرویس تولیدکننده خاص محدود شود.
از پوسته ابری
gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 10.100.100.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
قانون فایروال زیر به تمام ترافیک درون زیرشبکه سرویسها روی پورتهای TCP 1000-2000 اجازه عبور میدهد. این قانون برای آزمایش عملکرد صحیح سرویس تولیدکننده ما استفاده خواهد شد.
از پوسته ابری
gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic within the service subnet" --direction INGRESS --src-ip-ranges 10.0.0.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
ایجاد و پیکربندی ماشینهای مجازی تولیدکننده
ایجاد ماشینهای مجازی
از پوسته ابری
gcloud compute instances create portmap-vm1 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create portmap-vm2 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create test-client-vm --zone=$zone --subnet=producer-service-subnet --no-address
در بخش بعدی، سرور http را روی پورتهای ۱۰۰۰ و ۲۰۰۰ روی هر ماشین مجازی تولیدکننده راهاندازی کنید.
پیکربندی ماشینهای مجازی
از پوسته ابری
gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project
در Cloud Shell از جلسه portmap-vm1
mkdir 1000 cd 1000 echo "portmap-vm1 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm1 2000">index.html sudo python3 -m http.server 2000 &
یک پنجره Cloud Shell جدید باز کنید
با تنظیم مجدد متغیرها شروع کنید. در Cloud Shell
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute ssh --zone $zone "portmap-vm2" --tunnel-through-iap --project $project
در Cloud Shell از جلسه portmap-vm2
mkdir 1000 cd 1000 echo "portmap-vm2 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm2 2000">index.html sudo python3 -m http.server 2000 &
۸. خدمات تولیدکننده تست
ابتدا، باید آدرسهای IP نمونههای portmap را بدست آوریم. به هر دوی این آدرسهای IP توجه کنید.
یک پنجره Cloud Shell جدید باز کنید
با تنظیم مجدد متغیرها شروع کنید. در Cloud Shell
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute instances describe portmap-vm1 \ --format='get(networkInterfaces[0].networkIP)' --zone $zone gcloud compute instances describe portmap-vm2\ --format='get(networkInterfaces[0].networkIP)' --zone $zone
وارد نمونه آزمایشی شوید. در Cloud Shell
gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project curl [portmap-vm1 IP]:1000
خروجی مورد انتظار
portmap-vm1 1000
در پوسته ابری
curl [portmap-vm1 IP]:2000
خروجی مورد انتظار
portmap-vm1 2000
در پوسته ابری
curl [portmap-vm2 IP]:1000
خروجی مورد انتظار
portmap-vm2 1000
در پوسته ابری
curl [portmap-vm2 IP]:2000
خروجی مورد انتظار
portmap-vm2 2000
خروج از test-client-vm
۹. ایجاد سرویس تولیدکننده با Portmap NEG
ایجاد اجزای متعادلکننده بار
از پوسته ابری
gcloud compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP
نقاط پایانی را به Portmap NEG اضافه کنید تا نگاشتی از پورت کلاینت به پورت تولیدکننده ایجاد شود. تولیدکننده این نگاشت را ایجاد میکند و روش خاص خود را برای انتقال این اطلاعات به مصرفکنندگان خواهد داشت. نگاشت پورت خاص از طریق PSC به اشتراک گذاشته نمیشود.
در پوسته ابری
gcloud compute network-endpoint-groups update portmap-neg --region=$region --add-endpoint=client-destination-port=1001,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=1000 --add-endpoint=client-destination-port=1002,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=2000 --add-endpoint=client-destination-port=1003,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=1000 --add-endpoint=client-destination-port=1004,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=2000
ساخت متعادلکننده بار را کامل کنید.
در پوسته ابری
gcloud compute backend-services create portmap-bes --load-balancing-scheme=internal --region=$region --network=producer-vpc gcloud compute backend-services add-backend portmap-bes --network-endpoint-group=portmap-neg --network-endpoint-group-region=$region gcloud compute forwarding-rules create portmap-fr --load-balancing-scheme=INTERNAL --network=producer-vpc --subnet=producer-service-subnet --ports=ALL --region=$region --backend-service=portmap-bes
ایجاد پیوست سرویس
از پوسته ابری
gcloud compute service-attachments create portmap-service-attachment --region=$region --producer-forwarding-rule=portmap-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet
در مرحله بعد، URI پیوست سرویس را بازیابی و یادداشت کنید تا نقطه پایانی PSC را در محیط مصرفکننده پیکربندی کنید.
در پوسته ابری
gcloud compute service-attachments describe portmap-service-attachment --region=$region
مثال خروجی مورد انتظار
connectionPreference: ACCEPT_AUTOMATIC creationTimestamp: '2024-07-19T10:02:29.432-07:00' description: '' enableProxyProtocol: false fingerprint: LI8D6JNQsLA= id: '6207474793859982026' kind: compute#serviceAttachment name: portmap-service-attachment natSubnets: - https://www.googleapis.com/compute/v1/projects/$project/regions/$zone/subnetworks/psc-nat-subnet pscServiceAttachmentId: high: '94288091358954472' low: '6207474793859982026' reconcileConnections: false region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/portmap-service-attachment targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/portmap-fr
۱۰. ایجاد شبکه VPC مصرفکننده
شبکه VPC
از پوسته ابری
gcloud compute networks create consumer-vpc --subnet-mode custom
ایجاد زیرشبکه
از پوسته ابری
gcloud compute networks subnets create consumer-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access
ایجاد سیاست و قوانین فایروال شبکه
از پوسته ابری
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
فقط دسترسی SSH از IAP برای شبکه مصرفکننده مورد نیاز است.
۱۱. ایجاد ماشین مجازی، نقطه پایانی PSC و تست اتصال
در این مرحله، باید سه پنجره Cloud Shell باز باشد. یکی باید یک جلسه باز با portmap-vm1 داشته باشد. یکی باید یک جلسه باز با portmap-vm2 داشته باشد و دیگری باید جلسه کاری باشد.
ایجاد ماشین مجازی آزمایشی
از پوسته ابری
gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address
ایجاد نقطه پایانی PSC
از پوسته ابری
gcloud compute addresses create psc-endpoint-ip --region=$region --subnet=consumer-client-subnet --addresses 10.0.0.10 gcloud compute forwarding-rules create psc-portmap-endpoint --region=$region --network=consumer-vpc --address=psc-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]
اتصال را آزمایش کنید
از پوسته ابری
gcloud compute ssh --zone $zone "consumer-client-vm" --tunnel-through-iap --project $project curl 10.0.0.10:1001
خروجی مورد انتظار
portmap-vm1 1000
از پوسته ابری
curl 10.0.0.10:1002
خروجی مورد انتظار
portmap-vm1 2000
از پوسته ابری
curl 10.0.0.10:1003
خروجی مورد انتظار
portmap-vm2 1000
از پوسته ابری
curl 10.0.0.10:1004
خروجی مورد انتظار
portmap-vm2 2000
۱۲. مراحل پاکسازی
خروج از نمونه ماشین مجازی (تمام پنجرهها)
exit
از یک ترمینال Cloud Shell، اجزای آزمایشگاه را حذف کنید
gcloud compute forwarding-rules delete psc-portmap-endpoint --region=$region -q gcloud compute addresses delete psc-endpoint-ip --region=$region -q gcloud compute instances delete consumer-client-vm --zone=$zone -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-client-subnet --region=$region -q gcloud compute networks delete consumer-vpc -q gcloud compute service-attachments delete portmap-service-attachment --region=$region -q gcloud compute forwarding-rules delete portmap-fr --region=$region -q gcloud compute backend-services delete portmap-bes --region=$region -q gcloud compute network-endpoint-groups delete portmap-neg --region=$region -q gcloud compute instances delete test-client-vm --zone=$zone -q gcloud compute instances delete portmap-vm2 --zone=$zone -q gcloud compute instances delete portmap-vm1 --zone=$zone -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 networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete producer-service-subnet --region $region -q gcloud compute networks delete producer-vpc -q
۱۳. تبریک میگویم!
تبریک میگویم که آزمایشگاه کد را تمام کردی.
آنچه ما پوشش دادهایم
- موارد استفاده از نگاشت پورت اتصال سرویس خصوصی
- مزایای کلیدی نقشهبرداری پورت PSC
- الزامات شبکه
- با استفاده از نگاشت پورت، یک سرویس تولیدکننده Private Service Connect ایجاد کنید.
- ایجاد یک نقطه پایانی اتصال سرویس خصوصی
- برقراری تماس از طریق یک نقطه پایانی Private Service Connect به یک سرویس تولیدکننده