۱. مقدمه
سرویس خصوصی Connect با پیکربندی خودکار DNS از Service Directory و Cloud DNS برای ایجاد خودکار رکوردهای DNS که با آدرسهای IP نقطه پایانی سرویس خصوصی Connect مصرفکننده برنامهریزی شدهاند، استفاده میکند.
آنچه خواهید ساخت
در این آزمایشگاه کد، شما قصد دارید یک معماری جامع Private Service Connect بسازید که نحوه استفاده از DNS خودکار را همانطور که در شکل 1 نشان داده شده است، نشان میدهد.
DNS خودکار به دلایل زیر امکانپذیر است:
- پیوست سرویس تولیدکننده با ارائه پرچم «–domain-names» به یک دامنه عمومی متعلق به خود هنگام ایجاد پیوست سرویس Private Service Connect، DNS خودکار را ایجاد میکند.
- مصرفکننده نام نقطه پایانی را تعریف میکند.
- DNS خودکار علاوه بر یک ورودی دایرکتوری سرویس شامل نام نقطه پایانی مصرفکننده، هم یک DNS Zone goog-psc-default-us-central1 و هم یک نام DNS به نام cosmopup.net ایجاد میکند.
مزیت DNS خودکار در (4) نشان داده شده است که در آن یک کاربر نهایی میتواند از طریق DNS و FQDN با نقطه پایانی مصرفکننده ارتباط برقرار کند. stargazer.cosmopup.net
شکل ۱

آنچه یاد خواهید گرفت
- نحوه ایجاد یک متعادل کننده بار داخلی HTTP(S)
- نحوه ایجاد پیوست سرویس با DNS خودکار
- نحوه ایجاد یک سرویس تولیدکننده Private Service Connect
- نحوه دسترسی به یک نقطه پایانی مصرف کننده با استفاده از DNS خودکار
آنچه نیاز دارید
- پروژه ابری گوگل
- یک دامنه عمومی که متعلق به شماست
۲. قبل از شروع
پروژه را برای پشتیبانی از codelab بهروزرسانی کنید
این Codelab از $variables برای کمک به پیادهسازی پیکربندی gcloud در Cloud Shell استفاده میکند.
درون Cloud Shell، موارد زیر را انجام دهید:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname
۳. تنظیمات تولیدکننده
VPC تولیدکننده را ایجاد کنید
درون Cloud Shell، موارد زیر را انجام دهید:
gcloud compute networks create producer-vpc --project=$projectname --subnet-mode=custom
زیرشبکههای تولیدکننده را ایجاد کنید
درون Cloud Shell، موارد زیر را انجام دهید:
gcloud compute networks subnets create gce-subnet --project=$projectname --range=172.16.20.0/28 --network=producer-vpc --region=us-central1
درون Cloud Shell، موارد زیر را انجام دهید:
gcloud compute networks subnets create load-balancer-subnet --project=$projectname --range=172.16.10.0/28 --network=producer-vpc --region=us-central1
یک آدرس IP برای متعادلکننده بار داخلی رزرو کنید
درون Cloud Shell، موارد زیر را انجام دهید:
gcloud compute addresses create lb-ip \
--region=us-central1 \
--subnet=load-balancer-subnet \
--purpose=GCE_ENDPOINT
مشاهده آدرس IP اختصاص داده شده
برای مشاهده آدرس IP اختصاص داده شده ، از دستور compute addresses describe استفاده کنید.
gcloud compute addresses describe lb-ip --region=us-central1 | grep address:
ایجاد زیرشبکههای پروکسی منطقهای
تخصیص پروکسی در سطح شبکه VPC است، نه در سطح متعادلکننده بار. شما باید در هر منطقه از یک شبکه مجازی (VPC) که در آن از متعادلکنندههای بار مبتنی بر Envoy استفاده میکنید، یک زیرشبکه فقط پروکسی ایجاد کنید. اگر چندین متعادلکننده بار را در یک منطقه و یک شبکه VPC مستقر کنید، آنها از یک زیرشبکه فقط پروکسی برای متعادلسازی بار استفاده میکنند.
- یک کلاینت به آدرس IP و پورتِ قانونِ ارسالِ متعادلکنندهی بار (load balancer) متصل میشود.
- هر پروکسی به آدرس IP و پورت مشخص شده توسط قانون ارسال متعادل کننده بار مربوطه گوش میدهد. یکی از پروکسیها اتصال شبکه کلاینت را دریافت و قطع میکند.
- پروکسی اتصالی را به ماشین مجازی بکاند مناسب که توسط نقشه URL و سرویسهای بکاند متعادلکننده بار تعیین میشود، برقرار میکند.
صرف نظر از اینکه شبکه VPC شما در حالت خودکار یا سفارشی باشد، باید زیرشبکههای فقط پروکسی ایجاد کنید. یک زیرشبکه فقط پروکسی باید ۶۴ آدرس IP یا بیشتر ارائه دهد. این مربوط به طول پیشوند ۲۶/ یا کمتر است. اندازه زیرشبکه توصیه شده ۲۳/ (۵۱۲ آدرس فقط پروکسی) است.
درون Cloud Shell، موارد زیر را انجام دهید:
gcloud compute networks subnets create proxy-subnet-us-central \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=us-central1 \
--network=producer-vpc \
--range=172.16.0.0/23
ایجاد زیرشبکههای NAT سرویس اتصال خصوصی
یک یا چند زیرشبکه اختصاصی برای استفاده با Private Service Connect ایجاد کنید . اگر از کنسول Google Cloud برای انتشار یک سرویس استفاده میکنید، میتوانید زیرشبکهها را در طول این فرآیند ایجاد کنید. زیرشبکه را در همان منطقهای که متعادلکننده بار سرویس قرار دارد، ایجاد کنید. نمیتوانید یک زیرشبکه معمولی را به یک زیرشبکه Private Service Connect تبدیل کنید.
درون Cloud Shell، موارد زیر را انجام دهید:
gcloud compute networks subnets create psc-nat-subnet \
--project $projectname \
--network producer-vpc \
--region us-central1 \
--range 100.100.10.0/24 \
--purpose PRIVATE_SERVICE_CONNECT
ایجاد قوانین فایروال تولیدکننده
قوانین فایروال را طوری پیکربندی کنید که ترافیک بین زیرشبکه Private Service Connect NAT و زیرشبکه ILB proxy only مجاز باشد.
درون Cloud Shell، موارد زیر را انجام دهید:
gcloud compute --project=$projectname firewall-rules create allow-to-ingress-nat-subnet --direction=INGRESS --priority=1000 --network=producer-vpc --action=ALLOW --rules=all --source-ranges=100.100.10.0/24
درون Cloud Shell، قانون فایروال fw-allow-health-check را ایجاد کنید تا بررسیهای سلامت Google Cloud به سرویس تولیدکننده (سرویس backend) روی پورت TCP 80 دسترسی پیدا کنند.
gcloud compute firewall-rules create fw-allow-health-check \
--network=producer-vpc \
--action=allow \
--direction=ingress \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--rules=tcp:80
یک قانون فایروال برای دسترسی به زیرشبکهی فقط پروکسی ایجاد کنید تا به متعادلکنندهی بار اجازه دهد با نمونههای backend روی پورت ۸۰ TCP ارتباط برقرار کند.
gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
--network=producer-vpc \
--action=allow \
--direction=ingress \
--source-ranges=172.16.0.0/23 \
--rules=tcp:80
پیکربندی روتر ابری و NAT
از آنجایی که ماشین مجازی آدرس IP خارجی ندارد، در codelab برای نصب بستههای نرمافزاری از Cloud NAT استفاده میشود.
درون Cloud Shell، روتر ابری را ایجاد کنید.
gcloud compute routers create cloud-router-for-nat --network producer-vpc --region us-central1
درون Cloud Shell، دروازه NAT را ایجاد کنید.
gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
پیکربندی گروه نمونه
در بخش بعدی، نمونه Compute Engine و گروه نمونه مدیریت نشده را ایجاد خواهید کرد. در مراحل بعدی، گروه نمونه به عنوان سرویس backend متعادل کننده بار استفاده خواهد شد.
درون Cloud Shell، بررسی سلامت منطقهای که به سرویس تولیدکننده ارسال میشود را ایجاد کنید.
gcloud compute instances create app-server-1 \
--project=$projectname \
--machine-type=e2-micro \
--image-family debian-10 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=gce-subnet \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to App-Server-1 !!' | tee /var/www/html/index.html
EOF"
درون Cloud Shell، گروه نمونه مدیریت نشده را ایجاد کنید.
gcloud compute instance-groups unmanaged create psc-instance-group --zone=us-central1-a
gcloud compute instance-groups unmanaged set-named-ports psc-instance-group --project=$projectname --zone=us-central1-a --named-ports=http:80
gcloud compute instance-groups unmanaged add-instances psc-instance-group --zone=us-central1-a --instances=app-server-1
متعادل کننده بار را پیکربندی کنید
در مراحل بعدی، متعادلکننده بار داخلی HTTP را پیکربندی خواهید کرد که در مرحله بعد به عنوان یک پیوست سرویس منتشر خواهد شد.
درون Cloud Shell، بررسی سلامت منطقهای را ایجاد کنید.
gcloud compute health-checks create http http-health-check \
--region=us-central1 \
--use-serving-port
درون Cloud Shell، سرویس backend را ایجاد کنید.
gcloud compute backend-services create l7-ilb-backend-service \
--load-balancing-scheme=INTERNAL_MANAGED \
--protocol=HTTP \
--health-checks=http-health-check \
--health-checks-region=us-central1 \
--region=us-central1
درون Cloud Shell، به سرویس backend، backendهایی اضافه کنید.
gcloud compute backend-services add-backend l7-ilb-backend-service \
--balancing-mode=UTILIZATION \
--instance-group=psc-instance-group \
--instance-group-zone=us-central1-a \
--region=us-central1
درون Cloud Shell، یک نقشه URL ایجاد کنید تا درخواستهای ورودی را به سرویس backend هدایت کند.
gcloud compute url-maps create l7-ilb-map \
--default-service l7-ilb-backend-service \
--region=us-central1
پروکسی هدف HTTP را ایجاد کنید.
gcloud compute target-http-proxies create l7-ilb-proxy\
--url-map=l7-ilb-map \
--url-map-region=us-central1 \
--region=us-central1
یک قانون ارسال برای هدایت درخواستهای ورودی به پروکسی ایجاد کنید. از زیرشبکهای که فقط پروکسی دارد برای ایجاد قانون ارسال استفاده نکنید.
gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=producer-vpc \
--subnet=load-balancer-subnet \
--address=lb-ip \
--ports=80 \
--region=us-central1 \
--target-http-proxy=l7-ilb-proxy \
--target-http-proxy-region=us-central1
۴. اعتبارسنجی متعادلکننده بار
از کنسول ابری به مسیر Network Services → Load Balancing → Load Balancers بروید. بررسی سلامت موفقیتآمیز سرویس backend را مشاهده کنید.

انتخاب 'l7-ilb-map' آدرس IP سمت کاربر را نشان میدهد که باید با آدرس IP که در مرحله قبل grep کردید مطابقت داشته باشد و سرویس سمت کاربر را شناسایی کند.

۵. پیوست سرویس Private Service Connect را ایجاد کنید
پیوست سرویس را ایجاد کنید
درون Cloud Shell، پیوست سرویس را ایجاد کنید. حتماً علامت «.» را در انتهای نام دامنه اضافه کنید.
gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet --domain-names=cosmopup.net.
اختیاری: در صورت استفاده از VPC مشترک، پیوست سرویس را در پروژه سرویس ایجاد کنید.
gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=projects/<hostproject>/regions/us-central1/subnetworks/psc-nat-subnet --domain-names=cosmopup.net.
برای مشاهده پیوست سرویس تازه تأسیس شده، به سرویسهای شبکه → اتصال سرویس خصوصی بروید.

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

جزئیات پیوست خدمات:
پروژهها/<نام پروژه>/regions/us-central1/serviceAttachments/published-service
6. تنظیمات مصرفکننده
فعال کردن APIهای مصرفکننده
در داخل Cloud، Shell موارد زیر را انجام میدهد:
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
ایجاد شبکه VPC مصرفکننده
درون Cloud Shell، موارد زیر را انجام دهید:
gcloud compute networks create consumer-vpc --project=$projectname --subnet-mode=custom
زیرشبکههای مصرفکننده را ایجاد کنید
درون Cloud Shell، زیرشبکه را برای نمونه آزمایشی ایجاد کنید.
gcloud compute networks subnets create db1-subnet --project=$projectname --range=10.20.0.0/28 --network=consumer-vpc --region=us-central1
درون Cloud Shell، یک زیرشبکه برای نقطه پایانی مصرفکننده ایجاد کنید.
gcloud compute networks subnets create consumer-ep-subnet --project=$projectname --range=10.10.0.0/28 --network=consumer-vpc --region=us-central1
ایجاد نقطه پایانی مصرفکننده (قانون ارسال)
درون Cloud Shell، آدرس IP استاتیکی را ایجاد کنید که برای نقطه پایانی مصرفکننده استفاده خواهد شد.
gcloud compute addresses create psc-consumer-ip-1 --region=us-central1 --subnet=consumer-ep-subnet --addresses 10.10.0.10
ما از URI پیوست سرویس که قبلاً تولید شده است برای ایجاد نقطه پایانی مصرفکننده استفاده میکنیم.
درون Cloud Shell، نقطه پایانی مصرفکننده را ایجاد کنید.
gcloud compute forwarding-rules create stargazer --region=us-central1 --network=consumer-vpc --address=psc-consumer-ip-1 --target-service-attachment=projects/$projectname/regions/us-central1/serviceAttachments/published-service
۷. اتصال را در شبکه VPC مصرفکننده تأیید کنید
از شبکه VPC مصرفکننده، با رفتن به Network Services → Private Service Connect→ Connected Endpoints، اتصال سرویس خصوصی موفق را تأیید کنید. به اتصال Stargazer برقرار شده و آدرس IP مربوطه که قبلاً ایجاد کردیم توجه کنید.

هنگام انتخاب psc-consumer-1 جزئیاتی از جمله URI پیوست سرویس ارائه میشود.

۸. اتصال را در شبکه VPC تولیدکننده اعتبارسنجی کنید
از شبکه VPC تولیدکننده، با رفتن به Network Services → Private Service Connect →Published Service، اتصال سرویس خصوصی موفق را تأیید کنید. توجه داشته باشید که اتصال سرویس منتشر شده اکنون نشاندهنده ۱ قانون ارسال (نقطه پایانی اتصال) است.

۹. پیکربندی خودکار DNS را اعتبارسنجی کنید
بیایید پیکربندی DNS و Service Directory را ارزیابی کنیم.
پیکربندی DNS ابری
به Network Services → Cloud DNS → Zones بروید. Zone مربوط به goog-psc-default-us-central و نام DNS آن cosmopup.net است که به صورت خودکار ایجاد میشود.

مشاهده پیکربندی DNS و دایرکتوری سرویسها
انتخاب نام منطقه به ما امکان میدهد ببینیم که چگونه Service Directory با Cloud DNS ادغام شده است.

پیکربندی دایرکتوری سرویس
به سرویسهای شبکه → فهرست سرویسها بروید
نام نقطه پایانی مصرفکننده « stargazer » را به خاطر دارید؟ این نام به طور خودکار در دایرکتوری سرویس برنامهریزی شده است و به ما امکان میدهد با استفاده از FQDN به نقطه پایانی مصرفکننده دسترسی پیدا کنیم. stargazer.goog-psc-default–us-central1

۱۰. اعتبارسنجی دسترسی مصرفکننده به سرویس تولیدکنندگان
از شبکه VPC مصرفکننده، یک ماشین مجازی برای آزمایش اتصال سرویس منتشر شده با دسترسی به نقطه پایانی مصرفکننده stargazer.cosmopup.net ایجاد خواهیم کرد.
درون Cloud Shell، نمونه آزمایشی را در vpc مصرفکننده ایجاد کنید.
gcloud compute instances create db1 \
--zone=us-central1-a \
--image-family=debian-10 \
--image-project=debian-cloud \
--subnet=db1-subnet \
--no-address
برای اینکه به IAP اجازه دهید به ماشینهای مجازی شما متصل شود، یک قانون فایروال ایجاد کنید که:
- برای تمام نمونههای ماشین مجازی که میخواهید با استفاده از IAP به آنها دسترسی داشته باشید، اعمال میشود.
- اجازه ورود ترافیک از محدوده IP 35.235.240.0/20 را میدهد. این محدوده شامل تمام آدرسهای IP است که IAP برای ارسال TCP استفاده میکند.
در داخل Cloud Shell، قانون فایروال IAP را ایجاد کنید.
gcloud compute firewall-rules create ssh-iap-consumer \
--network consumer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
با استفاده از IAP در Cloud Shell وارد consumer-vm شوید تا اتصال به سرویس تولیدکننده را با انجام یک curl تأیید کنید. در صورت وجود timeout دوباره امتحان کنید.
gcloud compute ssh db1 --project=$projectname --zone=us-central1-a --tunnel-through-iap
یک curl برای اعتبارسنجی اتصال به سرویس تولیدکننده انجام دهید. پس از اعتبارسنجی، از ماشین مجازی خارج شوید و به اعلان Cloud Shell بازگردید.
درون Cloud Shell یک curl روی دامنه سفارشی خود، مثلاً stargazer.[custom-domain.com]، انجام دهید. در خروجی زیر، یک curl روی stargazer.cosmopup.net انجام شده است.
user@db1:~$ curl -v stargazer.cosmopup.net
* Trying 10.10.0.10...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55d3aa8190f0)
* Connected to stargazer.cosmopup.net (10.10.0.10) port 80 (#0)
> GET / HTTP/1.1
> Host: stargazer.cosmopup.net
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 200 OK
< date: Thu, 22 Dec 2022 00:16:25 GMT
< server: Apache/2.4.38 (Debian)
< last-modified: Wed, 21 Dec 2022 20:26:32 GMT
< etag: "1b-5f05c5e43a083"
< accept-ranges: bytes
< content-length: 27
< content-type: text/html
< via: 1.1 google
<
Welcome to App-Server-1 !!
خروج از ماشین مجازی و بازگشت به Cloud Shell برای شروع وظایف پاکسازی
۱۱. تمیز کردن
از Cloud Shell، کامپوننتهای codelab را حذف کنید.
gcloud compute forwarding-rules delete stargazer --region=us-central1 --quiet
gcloud compute instances delete db1 --zone=us-central1-a --quiet
gcloud compute addresses delete psc-consumer-ip-1 --region=us-central1 --quiet
gcloud compute networks subnets delete consumer-ep-subnet db1-subnet --region=us-central1 --quiet
gcloud compute firewall-rules delete ssh-iap-consumer --quiet
gcloud compute networks delete consumer-vpc --quiet
gcloud compute service-attachments delete published-service --region=us-central1 --quiet
gcloud compute forwarding-rules delete l7-ilb-forwarding-rule --region=us-central1 --quiet
gcloud compute target-http-proxies delete l7-ilb-proxy --region=us-central1 --quiet
gcloud compute url-maps delete l7-ilb-map --region=us-central1 --quiet
gcloud compute backend-services delete l7-ilb-backend-service --region=us-central1 --quiet
gcloud compute instance-groups unmanaged delete psc-instance-group --zone=us-central1-a --quiet
gcloud compute instances delete app-server-1 --zone=us-central1-a --quiet
gcloud compute firewall-rules delete allow-to-ingress-nat-subnet fw-allow-health-check fw-allow-proxy-only-subnet --quiet
gcloud compute addresses delete lb-ip --region=us-central1 --quiet
gcloud compute networks subnets delete gce-subnet load-balancer-subnet psc-nat-subnet proxy-subnet-us-central --region=us-central1 --quiet
gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet
gcloud compute networks delete producer-vpc --quiet
۱۲. تبریک
تبریک میگوییم، شما با موفقیت یک نقطه پایانی Private Service Connect را با پیکربندی خودکار DNS پیکربندی و اعتبارسنجی کردید.
شما زیرساخت تولیدکننده را ایجاد کردید و یک پیوست سرویس با ثبت دامنه عمومی اضافه کردید. یاد گرفتید که چگونه یک نقطه پایانی مصرفکننده در شبکه VPC مصرفکننده ایجاد کنید که امکان اتصال به سرویس داخلی را با استفاده از DNS تولید شده خودکار فراهم میکند.
کازموپاپ فکر میکند که کدلبها فوقالعاده هستند!!

بعدش چی؟
به برخی از این آزمایشگاههای کد نگاهی بیندازید...
- استفاده از Private Service Connect برای انتشار و مصرف سرویسها با GKE
- استفاده از Private Service Connect برای انتشار و مصرف سرویسها
- با استفاده از Private Service Connect و یک متعادلکننده بار داخلی TCP Proxy، از طریق شبکه ترکیبی به سرویسهای On-Premium متصل شوید.