اتصال سرویس خصوصی، تغییرپذیری، Codelab

۱. مقدمه

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

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

در این زمان، تغییرپذیری PSC پشتیبانی خواهد شد

  • مهاجرت به یک قانون ارسال متعادل‌کننده بار از همان نوع (مثلاً Network Passthrough به Network Passthrough)
  • مهاجرت به یک قانون ارسال متعادل‌کننده بار از نوع متفاوت (مثلاً عبور از شبکه به متعادل‌کننده بار برنامه)

تغییرپذیری PSC از ویرایش قانون ارسال موجود پشتیبانی نمی‌کند.

در این آزمایش، شما یک سرویس وب تولیدکننده ایجاد خواهید کرد که از طریق یک متعادل‌کننده بار داخلی Network Passthrough در معرض دید قرار می‌گیرد، اطمینان حاصل خواهید کرد که سرویس از طریق یک نقطه پایانی PSC متصل است، سپس ارتباط پیوست سرویس را با یک قانون ارسال جدید به یک متعادل‌کننده بار داخلی برنامه به‌روزرسانی خواهید کرد.

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

  • یک سرویس وب آپاچی ساده ایجاد کنید که به عنوان یک سرویس تولیدکننده PSC در معرض نمایش قرار گیرد.
  • یک نقطه پایانی PSC ایجاد کنید.
  • یک منطقه خصوصی Cloud DNS برای تماس‌های سرویس مصرف‌کننده ایجاد کنید.
  • با استفاده از PSC Mutability، قانون ارسال مرتبط با پیوست سرویس را به‌روزرسانی کنید.

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

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

۲. محیط آزمایش

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

برای این آزمایش، ما با ایجاد producer-vpc با سه زیرشبکه شروع خواهیم کرد؛ یکی برای میزبانی سرویس producer و تست ماشین مجازی، یکی برای قوانین ارسال متعادل‌کننده بار، و یک زیرشبکه PSC NAT. ما به یک Cloud Router و Cloud NAT برای دسترسی به اینترنت جهت دانلود بسته‌های لینوکس نیاز داریم. ما سرویس آپاچی خود را که از طریق یک گروه نمونه مدیریت نشده پیکربندی شده است، از طریق یک متعادل‌کننده بار Network Passthrough منطقه‌ای داخلی در معرض نمایش قرار می‌دهیم و قانون ارسال را با یک پیوست سرویس مرتبط می‌کنیم.

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

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

683e2b440a0cc07f.png

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

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

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

۲۹۵۰۰۴۸۲۱bab6a87.png

37d264871000675d.png

۹۶d86d3d5655cdbe.png

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

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

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

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

فعال کردن پوسته ابری

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

تصویر صفحه ترمینال Google Cloud Shell که نشان می‌دهد محیط متصل شده است

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

۴. قبل از شروع

فعال کردن APIها

داخل Cloud Shell، مطمئن شوید که شناسه پروژه شما تنظیم شده است

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export project=[YOUR-PROJECT-NAME]
export region=us-central1
export zone=$region-a
echo $project
echo $region
echo $zone

فعال کردن تمام سرویس‌های لازم

gcloud services enable compute.googleapis.com
gcloud services enable dns.googleapis.com

۵. ایجاد شبکه تولیدکنندگان [پروژه تولیدکنندگان]

ایجاد شبکه VPC

از پوسته ابری

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

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

ما با استقرار ۳ زیرشبکه در producer-vpc شروع خواهیم کرد. یکی برای استقرار سرویس producer، یکی برای قوانین ارسال متعادل‌کننده بار و یکی که با ضمیمه سرویس PSC برای زیرشبکه PSC NAT ما مرتبط خواهد بود.

از پوسته ابری

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

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --range=10.100.0.0/28 \
    --region=$region \
    --purpose=PRIVATE_SERVICE_CONNECT

ایجاد NAT ابری

برای نصب بسته‌های مناسب برای سرویس‌های تولیدکننده ما، به یک Cloud 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

ما با سه قانون فایروال شروع خواهیم کرد. یکی اجازه دسترسی به ماشین‌های مجازی را برای بررسی سلامت متعادل‌کننده بار (۲۰۰۰)، یکی اجازه دسترسی به ماشین‌های مجازی از محدوده PSC NAT (۳۰۰۰) و یکی اجازه اتصال بین ماشین‌های مجازی در زیرشبکه سرویس برای اهداف آزمایشی (۴۰۰۰) می‌دهد. ما تمام قوانین را برای پورت‌های ۸۰ تنظیم خواهیم کرد زیرا از این پورت برای سرویس خود استفاده خواهیم کرد.

از پوسته ابری

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 PSC NAT subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.0.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

 gcloud compute network-firewall-policies rules create 4000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access between producer service VMs and testing client for testing purposes" \
    --direction INGRESS \
    --src-ip-ranges 10.0.0.0/28 \
    --layer4-configs tcp:80 \
    --global-firewall-policy

۶. ایجاد سرویس تولیدکننده [پروژه تولیدکننده]

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

ایجاد نمونه

از پوسته ابری

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 producer-uig \
  --zone=$zone

producer-service-vm را به گروه نمونه مدیریت نشده‌ای که ایجاد کردیم اضافه کنید.

از پوسته ابری

gcloud compute instance-groups unmanaged add-instances producer-uig \
  --zone=$zone \
  --instances=producer-service-vm

ایجاد اجزای متعادل‌کننده بار

برای نسخه ۱ سرویس تولیدکننده، ما سرویس را با استفاده از یک متعادل‌کننده بار شبکه‌ای (Network Passthrough Load Balancer) روی پورت ۸۰ در معرض دید قرار خواهیم داد.

بررسی سلامت پورت ۸۰ را اجرا کنید.

از پوسته ابری

gcloud compute health-checks create http producer-hc \
        --region=$region

سرویس backend را مستقر کنید و backend را به سرویس backend اضافه کنید.

از پوسته ابری

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=producer-uig \
  --instance-group-zone=$zone

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

از پوسته ابری

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

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

از پوسته ابری

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

۷. تست سرویس تولیدکننده [پروژه تولیدکننده]

یک ماشین مجازی آزمایشی در زیرشبکه producer-service-subnet ایجاد کنید، وارد ماشین مجازی شوید و فراخوانی سرویس آپاچی را آزمایش کنید.

از پوسته ابری

 gcloud compute instances create producer-test-vm \
    --zone=$zone \
    --subnet=producer-service-subnet \
    --no-address

از پوسته ابری

gcloud compute ssh producer-test-vm \
    --zone=$zone \
    --command="curl -s 192.168.0.2/index.html"

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

I am a Producer Service.

۸. نمایش سرویس تولیدکننده از طریق پیوست سرویس [پروژه تولیدکننده]

پیوست سرویس را ایجاد کنید. آن را با قانون ارسالی که با استفاده از psc-nat-subnet ایجاد کردیم، مرتبط کنید.

از پوسته ابری

gcloud compute service-attachments create producer-attachment \
    --region=$region \
    --producer-forwarding-rule=producer-fr  \
    --connection-preference=ACCEPT_AUTOMATIC \
    --nat-subnets=psc-nat-subnet

شما باید URI پیوست سرویس ( selfLink ) را یادداشت کنید زیرا در مرحله بعدی برای پیکربندی PSC Endpoint به آن نیاز خواهید داشت. می‌توانید با اجرای دستور زیر در Cloud Shell آن را بدست آورید.

از پوسته ابری

gcloud compute service-attachments describe producer-attachment --region=$region

خروجی نمونه

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2026-02-10T07:50:04.250-08:00'
description: ''
enableProxyProtocol: false
fingerprint: xxx
id: 'xxx'
kind: compute#serviceAttachment
name: producer-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxx'
  low: 'xxx'
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/producer-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-fr

کپی کردن URI با شروع از پروژه‌ها

مثال: projects/$project/regions/$region/serviceAttachments/producer-attachment

۹. ایجاد شبکه مصرف‌کنندگان [پروژه مصرف‌کنندگان]

ایجاد شبکه VPC

از پوسته ابری

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

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

یک زیرشبکه واحد مستقر خواهد شد که در آن نقطه پایانی PSC و یک ماشین مجازی کلاینت آزمایشی مستقر خواهیم کرد.

از پوسته ابری

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

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

از پوسته ابری

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

ما همچنین consumer-vpc را طوری پیکربندی خواهیم کرد که از IAP برای SSH استفاده کند.

از پوسته ابری

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

۱۰. ایجاد نقطه پایانی اتصال سرویس خصوصی [پروژه مصرف‌کننده]

آدرس IP استاتیکی را که برای نقطه پایانی PSC استفاده خواهد شد، رزرو کنید.

از پوسته ابری

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

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

از پوسته ابری

gcloud compute forwarding-rules create psc-endpoint \
  --region=$region \
  --network=consumer-vpc \
  --address=psc-endpoint-ip \
  --target-service-attachment=projects/$project/regions/$region/serviceAttachments/producer-attachment

۱۱. پیکربندی یک منطقه DNS خصوصی برای نقطه پایانی PSC [پروژه مصرف‌کننده]

با استفاده از Cloud DNS، یک منطقه DNS خصوصی با نام DNS myservice.com پیکربندی خواهیم کرد تا با نقطه پایانی PSC ما استفاده شود.

از پوسته ابری

gcloud dns managed-zones create "consumer-service" \
    --dns-name=myservice.com \
    --description="consumer service dns" \
    --visibility=private \
    --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="consumer-service"

یک رکورد A برای myservice.com ایجاد کنید و آن را به آدرس IP نقطه پایانی PSC ارجاع دهید.

از پوسته ابری

gcloud dns record-sets transaction add 10.0.0.2 \
   --name=myservice.com \
   --ttl=300 \
   --type=A \
   --zone="consumer-service"

gcloud dns record-sets transaction execute \
   --zone="consumer-service"

۱۲. تست نقطه پایانی PSC [پروژه مصرف‌کننده]

ایجاد یک ماشین مجازی کلاینت

از پوسته ابری

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

اتصال نقطه پایانی PSC را آزمایش کنید

از پوسته ابری

gcloud compute ssh consumer-client-vm \
    --zone=$zone \
    --command="curl -s myservice.com/index.html"

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

I am a Producer Service.

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

۱۳. ایجاد سرویس تولیدکننده‌ی به‌روزرسانی‌شده [پروژه‌ی تولیدکننده]

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

شبکه را به‌روزرسانی کنید

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

از پوسته ابری

gcloud compute networks subnets create lb-proxy-subnet \
    --network=producer-vpc \
    --range=10.200.0.0/24 \
    --region=$region \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE

یک زیرشبکه جدید ایجاد کنید که سرویس جدید ما در آن میزبانی شود.

از پوسته ابری

gcloud compute networks subnets create producer-service-new-subnet \
    --network=producer-vpc \
    --range=10.0.1.0/28 \
    --region=$region

یک قانون فایروال جدید ایجاد کنید که امکان اتصال به سرویس تولیدکننده جدید ما را از زیرشبکه فقط پروکسی فراهم کند.

از پوسته ابری

 gcloud compute network-firewall-policies rules create 3001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access from proxy only subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.200.0.0/24 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

ایجاد نمونه

از پوسته ابری

gcloud compute instances create new-producer-service-vm \
    --network producer-vpc \
    --subnet producer-service-new-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 NEW Producer Service." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

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

از پوسته ابری

gcloud compute instance-groups unmanaged create producer-new-uig \
  --zone=$zone

gcloud compute instance-groups unmanaged add-instances producer-new-uig \
  --zone=$zone \
  --instances=new-producer-service-vm

gcloud compute instance-groups unmanaged set-named-ports producer-new-uig \
    --named-ports=http:80 \
    --zone=$zone

ایجاد اجزای جدید متعادل‌کننده بار

سرویس backend را ایجاد کنید. توجه داشته باشید که ما از طرح متعادل‌سازی بار INTERNAL_MANAGED استفاده می‌کنیم زیرا در حال به‌روزرسانی به یک متعادل‌کننده بار داخلی برنامه هستیم.

از پوسته ابری

gcloud compute backend-services create producer-new-bes \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=http \
  --region=$region \
  --health-checks=producer-hc \
  --health-checks-region=$region

گروه نمونه مدیریت نشده را به عنوان یک backend به سرویس backend اضافه کنید.

از پوسته ابری

gcloud compute backend-services add-backend producer-new-bes \
  --region=$region \
  --instance-group=producer-new-uig \
  --instance-group-zone=$zone

نقشه URL را ایجاد کنید و پروکسی‌های HTTP را هدف قرار دهید.

از پوسته ابری

gcloud compute url-maps create producer-url-map \
  --default-service=producer-new-bes \
  --region=$region

gcloud compute target-http-proxies create http-proxy \
  --url-map=producer-url-map \
  --region=$region

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

از پوسته ابری

gcloud compute addresses create producer-fr-new-ip\
  --region $region \
  --subnet producer-fr-subnet \
  --addresses 192.168.0.3

قانون ارسال را ایجاد کنید.

از پوسته ابری

gcloud compute forwarding-rules create new-producer-fr \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=producer-vpc \
  --subnet=producer-fr-subnet \
  --address=producer-fr-new-ip \
  --ports=80 \
  --region=$region \
  --target-http-proxy=http-proxy \
  --target-http-proxy-region=$region

۱۴. سرویس تولیدکننده‌ی به‌روزرسانی‌شده [پروژه‌ی تولیدکننده] را آزمایش کنید

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

از پوسته ابری

gcloud compute ssh producer-test-vm \
    --zone=$zone \
    --command="curl -s 192.168.0.3/index.html"

توجه داشته باشید که ما یک آدرس IP به‌روزرسانی‌شده را فراخوانی می‌کنیم! ۱۹۲.۱۶۸.۰.۳ آدرس IP مربوط به متعادل‌کننده بار برنامه داخلی منطقه‌ای ما است.

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

I am a NEW Producer Service.

۱۵. به‌روزرسانی پیوست سرویس [پروژه تولیدکننده]

برای تجسم بهتر به‌روزرسانی قانون ارسال ضمیمه سرویس، می‌توانیم قبل و بعد از تغییر، توصیفی روی ضمیمه سرویس اجرا کنیم.

از پوسته ابری

gcloud compute service-attachments describe producer-attachment \
    --region=$region \
    --format="value(targetService)"

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

https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-fr

پیوست سرویس را به‌روزرسانی کنید.

از پوسته ابری

gcloud compute service-attachments update producer-attachment \
  --region=$region \
  --target-service=projects/$project/regions/$region/forwardingRules/new-producer-fr

حالا دوباره describe را اجرا کنید تا قانون جدید ارسال را ببینید.

از پوسته ابری

gcloud compute service-attachments describe producer-attachment \
    --region=$region \
    --format="value(targetService)"

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

https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/new-producer-fr

۱۶. اتصال PSC مصرف‌کننده را دوباره آزمایش کنید [پروژه مصرف‌کننده]

وارد همان کلاینت مصرف‌کننده شوید.

از پوسته ابری

gcloud compute ssh consumer-client-vm \
    --zone=$zone \
    --command="curl -s myservice.com/index.html"

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

 I am a NEW Producer Service.

تبریک! شما با موفقیت متعادل‌کننده بار سرویس تولیدکننده PSC را به‌روزرسانی کردید و نیازی به تغییر پیکربندی در سمت مصرف‌کننده نبود!

۱۷. مراحل پاکسازی [پروژه مصرف‌کننده]

از یک ترمینال Cloud Shell، اجزای آزمایشگاه را حذف کنید

gcloud dns record-sets delete myservice.com --zone="consumer-service" --type=A -q

gcloud dns managed-zones delete "consumer-service" -q

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-vm --zone=$zone --project $project -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-subnet --region $region -q

gcloud compute networks delete consumer-vpc -q

۱۸. مراحل پاکسازی [پروژه تولیدکننده]

از یک ترمینال Cloud Shell، اجزای آزمایشگاه را حذف کنید

gcloud compute service-attachments delete producer-attachment --region=$region -q

gcloud compute instances delete producer-test-vm --zone=$zone --project $project -q

gcloud compute forwarding-rules delete new-producer-fr --region=$region -q

gcloud compute addresses delete producer-fr-new-ip --region $region -q

gcloud compute target-http-proxies delete http-proxy --region $region -q

gcloud compute url-maps delete producer-url-map --region $region -q

gcloud compute backend-services delete producer-new-bes --region $region -q

gcloud compute instance-groups unmanaged delete producer-new-uig --zone $zone -q

gcloud compute instances delete new-producer-service-vm --zone $zone --project $project -q

gcloud compute networks subnets delete producer-service-new-subnet --region $region -q

gcloud compute networks subnets delete lb-proxy-subnet --region $region -q

gcloud compute forwarding-rules delete producer-fr --region=$region -q

gcloud compute addresses delete producer-fr-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 producer-uig --zone $zone -q

gcloud compute instances delete producer-service-vm --zone $zone --project $project -q

gcloud compute network-firewall-policies rules delete 4000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 3001 --firewall-policy producer-vpc-policy --global-firewall-policy -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 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-fr-subnet --region=$region -q

gcloud compute networks subnets delete producer-service-subnet --region=$region -q

gcloud compute networks delete producer-vpc -q

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

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

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

  • یک سرویس وب آپاچی ساده ایجاد کنید که به عنوان یک سرویس تولیدکننده PSC در معرض نمایش قرار گیرد.
  • یک نقطه پایانی PSC ایجاد کنید.
  • یک منطقه خصوصی Cloud DNS برای تماس‌های سرویس مصرف‌کننده ایجاد کنید.
  • با استفاده از PSC Mutability، قانون ارسال مرتبط با پیوست سرویس را به‌روزرسانی کنید.