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

1. مقدمه

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

Private Service Connect اکنون می تواند به صورت بومی مقصد صحیح را با استفاده از Port Mapping هدف قرار دهد. در این آزمایشگاه، با موارد استفاده که در آن این ویژگی مورد نیاز است و نحوه استقرار Port Mapping NEG در یک بار کاری Private Service Connect آشنا خواهید شد.

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

  • موارد استفاده از نگاشت پورت اتصال سرویس خصوصی
  • مزایای کلیدی نقشه برداری پورت PSC
  • الزامات شبکه
  • یک سرویس تولید کننده Private Service Connect با استفاده از نقشه پورت ایجاد کنید.
  • یک نقطه پایانی Private Service Connect ایجاد کنید
  • از طریق یک سرویس خصوصی تماس بگیرید، نقطه پایانی را به یک سرویس تولید کننده متصل کنید

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

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

2. موارد استفاده از خدمات خصوصی Connect Port Mapping

ویژگی Port Mapping از یک Port Mapping NEG (گروه نقطه پایانی شبکه) استفاده می کند که مخصوص موارد استفاده PSC است.

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

Producer نگاشت بین پورت مشتری و پورت مقصد + VM تولید کننده را تعریف می کند. سپس تولید کننده باید این اطلاعات را با مصرف کننده به اشتراک بگذارد. مصرف کننده از پورت های از پیش تعریف شده برای شناسایی منحصر به فرد VM + پورت مقصد استفاده می کند. پورت مورد استفاده مصرف کننده پورت متفاوتی است که توسط تولید کننده استفاده می شود.

مزایای کلیدی PSC Port Mapping

  • ساده: تولیدکنندگان اجزای PSC را با یک نقشه پورت، و مصرف کنندگان یک نقطه پایانی PSC را مستقر می کنند. PSC ترجمه آدرس شبکه را بطور خودکار انجام می دهد.
  • مقرون به صرفه: به منابع PSC اضافی یا چرخه های CPU VM تولید کننده نیاز ندارد. قیمت گذاری مشابه انواع دیگر استقرار PSC است
  • عملکرد بالا: نگاشت پورت همان توان عملیاتی نرخ خط و تأخیر کم را مانند سایر حالت های PSC ارائه می دهد.
  • مقیاس پذیر و دارای IP کارآمد: یک آدرس IP از VPC مصرف کننده می تواند به 1000 ماشین مجازی تولید کننده و 1000 نگاشت پورت دسترسی داشته باشد.

3. الزامات شبکه

  • نقشه‌برداری پورت به استفاده از متعادل‌کننده بار عبوری شبکه داخلی به عنوان متعادل‌کننده بار تولیدکننده نیاز دارد.
  • فقط نقاط پایانی PSC را می توان با Port Mapping استفاده کرد (نه PSC Backends یا PSC Interface).
  • NEG های نگاشت بندر سازه های منطقه ای هستند.
  • NEG های نگاشت پورت فقط در یک اتصال PSC قابل استفاده هستند. اگر VM مشتری مستقیماً قانون حمل و نقل بار متعادل کننده تولید کننده را فراخوانی کند، کار نمی کنند. این در روشی که سرویس تولیدکننده در این کد لبه آزمایش می شود منعکس می شود.
  • نقطه پایانی PSC و پشته سرویس تولید کننده باید در VPC های مختلف باشند.

4. توپولوژی Codelab

ad37cfc003475b7c.png

در VPC تولید کننده، دو ماشین مجازی ایجاد می شود که هر کدام دو سرور وب را اجرا می کنند، یکی روی پورت 1000 و دیگری در پورت 2000 اجرا می شود. ما هر سرویس را قبل از راه اندازی Portmap NEG، Internal Network Passthrough Load Balancer، و پیوست سرویس.

در VPC مصرف‌کننده، یک نقطه پایانی PSC را راه‌اندازی می‌کنیم و اتصال به سرویس تولیدکننده را از VM مشتری آزمایش می‌کنیم.

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

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

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

6. قبل از شروع

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

7. Producer VPC Network ایجاد کنید

شبکه 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/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 مراجعه کنید.

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

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

قانون فایروال زیر اجازه می دهد تا ترافیک روی پورت های TCP 1000-2000 از زیرشبکه PSC به تمام نمونه های شبکه انجام شود. در یک محیط تولید، این قانون فایروال باید فقط به موارد مرتبط با سرویس تولیدکننده خاص محدود شود.

از Cloud Shell

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 اجازه می دهد. این قانون برای آزمایش اینکه سرویس تولیدکننده ما به درستی کار می کند استفاده می شود.

از Cloud Shell

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

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

VM ها را ایجاد کنید

از Cloud Shell

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 را روی پورت 1000 و 2000 در هر Producer VM راه اندازی کنید.

VM ها را پیکربندی کنید

از Cloud Shell

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 &

8. خدمات تولید کننده تست

ابتدا باید آدرس های 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

در Cloud Shell

curl [portmap-vm1 IP]:2000

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

portmap-vm1 2000

در Cloud Shell

curl [portmap-vm2 IP]:1000

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

portmap-vm2 1000

در Cloud Shell

curl [portmap-vm2 IP]:2000

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

portmap-vm2 2000

خروج از test-client-vm

9. خدمات تولید کننده را با Portmap NEG ایجاد کنید

اجزای Load Balancer را ایجاد کنید

از Cloud Shell

gcloud beta 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 به اشتراک گذاشته نمی شود.

در Cloud Shell

gcloud beta 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

ساخت متعادل کننده بار را کامل کنید.

در Cloud Shell

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

ایجاد پیوست سرویس

از Cloud Shell

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 را در محیط مصرف کننده پیکربندی کنید.

در Cloud Shell

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

10. شبکه Consumer VPC ایجاد کنید

شبکه VPC

از Cloud Shell

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

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

از Cloud Shell

gcloud compute networks subnets create consumer-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access

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

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

فقط SSH از دسترسی IAP برای شبکه مصرف کننده مورد نیاز است.

11. VM، PSC Endpoint و Test Connectivity را ایجاد کنید

در این مرحله، باید سه پنجره Cloud Shell باز باشد. باید یک جلسه باز با portmap-vm1 داشته باشید. یکی باید یک جلسه باز با portmap-vm2 داشته باشد و یکی باید جلسه کاری باشد.

تست VM را ایجاد کنید

از Cloud Shell

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

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

از Cloud Shell

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]

تست اتصال

از Cloud Shell

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

curl 10.0.0.10:1001

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

portmap-vm1 1000

از Cloud Shell

curl 10.0.0.10:1002

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

portmap-vm1 2000

از Cloud Shell

curl 10.0.0.10:1003

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

portmap-vm2 1000

از Cloud Shell

curl 10.0.0.10:1004

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

portmap-vm2 2000

12. مراحل پاکسازی

خروج از نمونه VM (همه ویندوز)

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

13. تبریک می گویم!

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

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

  • موارد استفاده از نگاشت پورت اتصال سرویس خصوصی
  • مزایای کلیدی نقشه برداری پورت PSC
  • الزامات شبکه
  • یک سرویس تولید کننده Private Service Connect با استفاده از نقشه پورت ایجاد کنید.
  • یک نقطه پایانی Private Service Connect ایجاد کنید
  • از طریق یک سرویس خصوصی تماس بگیرید، نقطه پایانی را به یک سرویس تولید کننده متصل کنید