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

۱. مقدمه

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

آنچه خواهید ساخت

در این آزمایشگاه کد، شما قصد دارید یک معماری جامع Private Service Connect بسازید که نحوه استفاده از DNS خودکار را همانطور که در شکل 1 نشان داده شده است، نشان می‌دهد.

DNS خودکار به دلایل زیر امکان‌پذیر است:

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

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

شکل ۱

5e26a358454d1336.png

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

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

  1. یک کلاینت به آدرس IP و پورتِ قانونِ ارسالِ متعادل‌کننده‌ی بار (load balancer) متصل می‌شود.
  2. هر پروکسی به آدرس IP و پورت مشخص شده توسط قانون ارسال متعادل کننده بار مربوطه گوش می‌دهد. یکی از پروکسی‌ها اتصال شبکه کلاینت را دریافت و قطع می‌کند.
  3. پروکسی اتصالی را به ماشین مجازی بک‌اند مناسب که توسط نقشه 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 را مشاهده کنید.

881567cc11627009.png

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

bab89b0a7b4f95e9.png

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

برای مشاهده پیوست سرویس تازه تأسیس شده، به سرویس‌های شبکه → اتصال سرویس خصوصی بروید.

d27fee9073dbbe2.png

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

503df63730c62df2.png

جزئیات پیوست خدمات:

پروژه‌ها/<نام پروژه>/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 مربوطه که قبلاً ایجاد کردیم توجه کنید.

c60812433c3e1676.png

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

۱۴d3e3b1e0aee3c2.png

۸. اتصال را در شبکه VPC تولیدکننده اعتبارسنجی کنید

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

911dbd7421bcfd3a.png

۹. پیکربندی خودکار DNS را اعتبارسنجی کنید

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

پیکربندی DNS ابری

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

4395e7b33fc42faa.png

مشاهده پیکربندی DNS و دایرکتوری سرویس‌ها

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

e4fe44d945b20451.png

پیکربندی دایرکتوری سرویس

به سرویس‌های شبکه → فهرست سرویس‌ها بروید

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

602deab65b5ac315.png

۱۰. اعتبارسنجی دسترسی مصرف‌کننده به سرویس تولیدکنندگان

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

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

8c2a10eb841f7b01.jpeg

بعدش چی؟

به برخی از این آزمایشگاه‌های کد نگاهی بیندازید...

مطالعه بیشتر و ویدیوها

اسناد مرجع