اتصال سرویس خصوصی با پیکربندی خودکار DNS

1. مقدمه

Private Service Connect با پیکربندی خودکار DNS از فهرست خدمات و Cloud DNS برای ایجاد خودکار رکوردهای DNS استفاده می کند که با آدرس های IP نقطه پایانی Private Service Connect مصرف کننده برنامه ریزی شده اند.

چیزی که خواهی ساخت

در این نرم افزار کد، شما یک معماری جامع Private Service Connect ایجاد می کنید که استفاده از DNS خودکار را همانطور که در شکل 1 نشان داده شده است، نشان می دهد.

DNS خودکار با موارد زیر امکان پذیر می شود:

  1. پیوست سرویس تولیدکننده با ارائه یک دامنه عمومی متعلق به مالکیت با پرچم «– نام‌های دامنه» هنگام ایجاد پیوست سرویس Private Service Connect، DNS خودکار ایجاد می‌کند.
  2. مصرف کننده یک نام نقطه پایانی را تعریف می کند.
  3. DNS خودکار هم یک DNS Zone goog-psc-default-us-central1 و هم نام DNS cosmopup.net را ایجاد می کند، علاوه بر آن یک ورودی دایرکتوری خدمات متشکل از نام نقطه پایانی مصرف کننده.

مزایای DNS خودکار در (4) نشان داده شده است که در آن کاربر نهایی می تواند با نقطه پایانی مصرف کننده از طریق DNS، FQDN stargazer.cosmopup.net ارتباط برقرار کند.

شکل 1

5e26a358454d1336.png

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

  • نحوه ایجاد تعادل بار داخلی HTTP(S).
  • نحوه ایجاد پیوست سرویس با DNS خودکار
  • نحوه ایجاد سرویس Private Service Connect Producer
  • نحوه دسترسی به نقطه پایانی مصرف کننده با استفاده از DNS خودکار

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

  • پروژه Google Cloud
  • یک دامنه عمومی که شما مالک آن هستید

2. قبل از شروع

پروژه را برای پشتیبانی از Codelab به روز کنید

این Codelab از متغیرهای $ برای کمک به پیاده سازی پیکربندی gcloud در Cloud Shell استفاده می کند.

در داخل Cloud Shell موارد زیر را انجام دهید:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

3. راه اندازی تولید کننده

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

  1. یک کلاینت به آدرس IP و پورت قانون حمل و نقل بار متعادل کننده متصل می شود.
  2. هر پروکسی به آدرس IP و پورت مشخص شده توسط قانون حمل و نقل بار متعادل کننده مربوطه گوش می دهد. یکی از پراکسی ها اتصال شبکه مشتری را دریافت و قطع می کند.
  3. پروکسی یک اتصال به پشتیبان VM مناسب تعیین شده توسط نقشه URL و خدمات باطن بارگذاری متعادل کننده برقرار می کند.

بدون توجه به اینکه شبکه VPC شما حالت خودکار است یا حالت سفارشی، باید زیرشبکه های فقط پروکسی ایجاد کنید. یک زیرشبکه فقط پروکسی باید ۶۴ آدرس IP یا بیشتر را ارائه دهد. این مربوط به طول پیشوند 26/ یا کوتاهتر است. اندازه زیر شبکه پیشنهادی 23/ است (512 آدرس فقط پروکسی).

در داخل 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

زیرشبکه های Private Service Connect 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 مجاز باشد.

در داخل 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 به سرویس تولیدکننده (سرویس پشتیبان) در پورت 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

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

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

از آنجایی که نمونه VM یک آدرس IP خارجی ندارد، از 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

پیکربندی گروه نمونه

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

در داخل 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 را برای هدایت درخواست‌های دریافتی به سرویس باطن ایجاد کنید.

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

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

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

881567cc11627009.png

انتخاب 'l7-ilb-map' آدرس IP frontend را به دست می‌دهد، که باید با آدرس IP که در مرحله قبل دریافت کرده‌اید مطابقت داشته باشد و سرویس Backend را مشخص می‌کند.

bab89b0a7b4f95e9.png

5. پیوست سرویس 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.

برای مشاهده پیوست سرویس جدید تاسیس شده، به خدمات شبکه ← Private Service Connect بروید

d27fee9073dbbe2.png

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

503df63730c62df2.png

جزئیات پیوست سرویس:

projects/<نام پروژه>/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

7. اعتبار اتصال در شبکه VPC مصرف کننده را تأیید کنید

از شبکه VPC مصرف کننده، با پیمایش به خدمات شبکه → اتصال سرویس خصوصی → نقاط پایانی متصل، اتصال موفقیت آمیز سرویس خصوصی را تأیید کنید. به اتصال stargazer ایجاد شده و آدرس IP مربوطه که قبلا ایجاد کردیم توجه کنید.

c60812433c3e1676.png

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

14d3e3b1e0aee3c2.png

8. اعتبار اتصال در شبکه VPC تولید کننده را تأیید کنید

از شبکه VPC سازنده، با پیمایش به خدمات شبکه → اتصال سرویس خصوصی → سرویس منتشر شده، اتصال موفق خدمات خصوصی را تأیید کنید. توجه داشته باشید که اتصال سرویس منتشر شده اکنون 1 قانون حمل و نقل (نقطه پایان اتصال) را نشان می دهد.

911dbd7421bcfd3a.png

9. پیکربندی خودکار DNS را تأیید کنید

بیایید پیکربندی DNS و Service Directory را ارزیابی کنیم.

پیکربندی Cloud DNS

به خدمات شبکه → Cloud DNS → Zones بروید. نام منطقه goog-psc-default-us-central & DNS cosmopup.net. به صورت خودکار تولید می شود.

4395e7b33fc42faa.png

پیکربندی DNS و Service Directory را مشاهده کنید

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

e4fe44d945b20451.png

پیکربندی فهرست خدمات

به Network Services → Service Directory بروید

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

602deab65b5ac315.png

10. اعتبار دسترسی مصرف کننده به خدمات تولیدکنندگان

از شبکه VPC مصرف کننده، یک VM برای آزمایش اتصال سرویس منتشر شده با دسترسی به نقطه پایانی مصرف کننده stargazer.cosmopup.net ایجاد خواهیم کرد.

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

  • برای تمام نمونه های VM که می خواهید با استفاده از 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 شوید تا با انجام یک چرخش، اتصال به سرویس تولیدکننده را تأیید کنید. اگر مهلت زمانی وجود دارد دوباره امتحان کنید.

gcloud compute ssh db1 --project=$projectname --zone=us-central1-a --tunnel-through-iap

اتصال به سرویس تولیدکننده را تأیید اعتبار کرل انجام دهید. پس از تأیید خروج از VM به درخواست Cloud Shell بازگشت

در داخل Cloud Shell یک پیچ در دامنه سفارشی خود انجام دهید، به عنوان مثال stargazer.[custom-domain.com]. در خروجی زیر، یک حلقه در برابر 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 از VM خارج شوید تا کارهای پاکسازی را شروع کنید

11. پاکسازی کنید

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

12. تبریک می گویم

تبریک می‌گوییم، شما با موفقیت یک نقطه پایانی Private Service Connect را با پیکربندی خودکار DNS پیکربندی و تأیید کردید.

زیرساخت تولیدکننده را ایجاد کردید و یک پیوست سرویس با ثبت دامنه عمومی اضافه کردید. شما یاد گرفتید که چگونه یک نقطه پایانی مصرف کننده در شبکه VPC مصرف کننده ایجاد کنید که امکان اتصال به سرویس داخلی را با استفاده از DNS تولید شده خودکار فراهم می کند.

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

8c2a10eb841f7b01.jpeg

بعدش چی؟

برخی از این کدها را بررسی کنید...

ادامه مطلب و ویدیوها

اسناد مرجع