Private Service Connect من خلال ضبط نظام أسماء النطاقات تلقائيًا

1. مقدمة

إنّ ميزة Private Service Connect مع إعداد نظام أسماء النطاقات التلقائي تستخدم "دليل الخدمات" وCloud DNS لإنشاء سجلّات نظام أسماء النطاقات تلقائيًا والتي يتمّ برمجتها باستخدام عناوين IP لنقطة نهاية Private Service Connect للمستهلك.

التطبيق الذي ستصممه

في هذا الدليل التعليمي حول الرموز البرمجية، ستُنشئ بنية شاملة لخدمة Private Service Connect توضّح استخدام نظام أسماء النطاقات التلقائي كما هو موضّح في الشكل 1.

يمكن استخدام نظام أسماء النطاقات التلقائي من خلال ما يلي:

  1. ينشئ مرفق خدمة المنتج نظام أسماء النطاقات التلقائي من خلال توفير نطاق عام مملوك مع العلامة "- أسماء النطاقات" عند إنشاء مرفق خدمة Private Service Connect.
  2. يحدِّد المستخدِم اسم نقطة نهاية.
  3. ينشئ نظام أسماء النطاقات التلقائي منطقة نظام أسماء النطاقات goog-psc-default-us-central1 واسم نظام أسماء النطاقات cosmopup.net، بالإضافة إلى إدخال في دليل الخدمات يتألف من اسم نقطة نهاية المستهلك.

يتم توضيح ميزة نظام أسماء النطاقات التلقائي في (4) حيث يمكن للمستخدم النهائي التواصل مع نقطة نهاية المستهلك من خلال نظام أسماء النطاقات، وFQDN stargazer.cosmopup.net.

الشكل 1

5e26a358454d1336.png

ما ستتعرّف عليه

  • كيفية إنشاء جهاز موازنة حمل HTTP(S) داخلي
  • كيفية إنشاء مرفق خدمة باستخدام نظام أسماء النطاقات التلقائي
  • كيفية إنشاء خدمة Private Service Connect للمنتج
  • كيفية الوصول إلى نقطة نهاية مستهلك باستخدام نظام أسماء النطاقات التلقائي

المتطلبات

  • مشروع Google Cloud
  • نطاق متاح للجميع تملكه

2. قبل البدء

تعديل المشروع لتتوافق مع ورشة التعلم البرمجي

يستخدم هذا الدرس التطبيقي حول الترميز متغيّرات $variables لمساعدة عملية تنفيذ إعدادات 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 المخصّص

استخدِم الأمر compute addresses describe لعرض عنوان IP المخصّص.

gcloud compute addresses describe lb-ip  --region=us-central1 | grep address:

إنشاء الشبكات الفرعية للخادم الوكيل الإقليمي

يتمّ تخصيص الخادم الوكيل على مستوى شبكة VPC، وليس على مستوى موازن الحمولة. يجب إنشاء شبكة فرعية للوكيل فقط واحدة في كل منطقة من شبكة افتراضية (VPC) تستخدم فيها أدوات موازنة التحميل المستندة إلى Envoy. في حال نشر أجهزة موازنة حمل متعددة في المنطقة نفسها وشبكة VPC نفسها، ستتشارك هذه الأجهزة الشبكة الفرعية نفسها للوكيل فقط من أجل موازنة الحمل.

  1. يتصل العميل بعنوان IP والمنفذ لقاعدة إعادة التوجيه في أداة توزيع الحمل.
  2. يستمع كل خادم وكيل إلى عنوان IP والمنفذ المحدَّدَين من خلال قاعدة إعادة التوجيه الخاصة بموازن الحمولة المقابل. يتلقّى أحد الخوادم الوكيلة اتصال العميل بالشبكة ويُنهيه.
  3. يُنشئ الخادم الوكيل اتصالاً بالجهاز الافتراضي المناسب للخلفية والذي يتم تحديده من خلال خريطة عناوين URL لجهاز موازنة الحمل وخدمات الخلفية.

يجب إنشاء شبكات فرعية خاصة بالخادم الوكيل فقط بغض النظر عمّا إذا كانت شبكة VPC في الوضع التلقائي أو الوضع المخصّص. يجب أن توفّر الشبكة الفرعية للخادم الوكيل فقط 64 عنوان 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

إنشاء الشبكات الفرعية لتحويل عنوان IP في Private Service Connect

أنشئ شبكة فرعية واحدة أو أكثر مخصّصة لاستخدامها مع 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

إنشاء قواعد جدار الحماية الخاص بالمنتج

اضبط قواعد جدار الحماية للسماح بالزيارات بين الشبكة الفرعية لعنوان IP الخاص بخدمة Private Service Connect وشبكة 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

إعداد Cloud Router وNAT

يتم استخدام Cloud NAT في ورشة رموز البرامج لتثبيت حِزم البرامج لأنّ مثيل VM لا يتضمّن عنوان IP خارجيًا.

في 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 ومجموعة المثيلات غير المُدارة. في الخطوات اللاحقة، سيتم استخدام مجموعة النُسخ كخدمة خلفية لجهاز موازنة الحمل.

في 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، أنشئ خدمة الخلفية.

 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، أضِف الخلفيات إلى خدمة الخلفية.

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. التحقّق من جهاز موازنة الحمل

من Cloud Console، انتقِل إلى خدمات الشبكة → موازنة الحمل → أجهزة موازنة الحمل. يُرجى تدوين فحص الحالة الناجح لخدمة الخلفية.

881567cc11627009.png

يؤدي اختيار ‎‘l7-ilb-map' إلى عرض عنوان IP للواجهة الأمامية، والذي من المفترض أن يتطابق مع عنوان IP الذي بحثت عنه في خطوة سابقة، ويحدِّد الخدمة في الخلفية.

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

يقدّم اختيار published-service تفاصيل أكبر، بما في ذلك معرّف الموارد المنتظم لمرفق الخدمة الذي يستخدمه المستهلك لإنشاء اتصال بخدمة خاصة واسم النطاق.

503df63730c62df2.png

تفاصيل مرفق الخدمة:

projects/<project name>/regions/us-central1/serviceAttachments/published-service

6- إعداد المستهلك

تفعيل واجهات برمجة التطبيقات الخاصة بالمستهلكين

داخل 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 للمستهلك، تأكَّد من نجاح عملية "الاتصال بالخدمة الخاصة" من خلال الانتقال إلى خدمات الشبكة → Private Service Connect (الاتصال بالخدمة الخاصة) → نقاط النهاية المرتبطة. دوِّن اتصال Stargazer الذي تم إنشاؤه وعنوان IP المقابل الذي أنشأناه سابقًا.

c60812433c3e1676.png

عند اختيار psc-consumer-1، يتم تقديم التفاصيل بما في ذلك عنوان URL المرفق بالخدمة.

14d3e3b1e0aee3c2.png

8. التحقّق من صحة الاتصال في شبكة VPC الخاصة بالمنتج

من شبكة VPC الخاصة بالمنتج، تأكَّد من نجاح عملية الاتصال بخدمة Private Service Connect من خلال الانتقال إلى خدمات الشبكة → Private Service Connect → الخدمة المنشورة. يُرجى العِلم أنّ اتصال الخدمة المنشور يشير الآن إلى قاعدة إعادة توجيه واحدة (نقطة نهاية الاتصال).

911dbd7421bcfd3a.png

9. التحقّق من إعدادات نظام أسماء النطاقات التلقائية

لنقيّم إعدادات نظام أسماء النطاقات ودليل الخدمات.

إعداد Cloud DNS

انتقِل إلى خدمات الشبكة > Cloud DNS > المناطق. يتم إنشاء المنطقة goog-psc-default-us-central & واسم نظام أسماء النطاقات cosmopup.net. تلقائيًا.

4395e7b33fc42faa.png

عرض إعدادات نظام أسماء النطاقات و"دليل الخدمات"

يتيح لنا اختيار اسم المنطقة معرفة كيفية دمج "دليل الخدمات" مع Cloud DNS.

e4fe44d945b20451.png

ضبط "دليل الخدمات"

انتقِل إلى خدمات الشبكة → دليل الخدمات.

هل تذكر اسم نقطة نهاية المستهلك "stargazer"؟ يتمّ برمجته تلقائيًا في دليل الخدمات، ما يتيح لنا الوصول إلى نقطة نهاية المستهلك باستخدام الاسم الكامل للنطاقات (FQDN) stargazer.goog-psc-default–us-central1.

602deab65b5ac315.png

10. التحقّق من إمكانية وصول المستهلكين إلى خدمة المنتجين

من شبكة 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

للسماح لميزة "الشراء داخل التطبيق" بالاتصال بمثيلات الأجهزة الافتراضية، أنشئ قاعدة جدار حماية تستوفي الشروط التالية:

  • ينطبق على جميع مثيلات الأجهزة الافتراضية التي تريد الوصول إليها باستخدام ميزة "الشراء داخل التطبيق".
  • السماح بدخول الزيارات من نطاق 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 للتحقّق من إمكانية الاتصال بخدمة المنتج عن طريق تنفيذ curl. يُرجى إعادة المحاولة في حال انتهاء مهلة.

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 لبدء مهام التنظيف

11. تَنظيم

من Cloud Shell، احذف مكوّنات ورشة كتابة الرموز البرمجية.

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 والتحقق منها باستخدام إعدادات نظام أسماء النطاقات التلقائية.

لقد أنشأت البنية الأساسية للمنتج، وأضفت مرفق خدمة مع تسجيل نطاق علني. لقد تعرّفت على كيفية إنشاء نقطة نهاية للمستهلك في شبكة VPC للمستهلك التي تسمح بالاتصال بالخدمة على الموقع باستخدام نظام أسماء النطاقات الذي يتم إنشاؤه تلقائيًا.

يعتقد Cosmopup أنّ الدروس التطبيقية حول الترميز رائعة.

8c2a10eb841f7b01.jpeg

الخطوة التالية

اطّلِع على بعض هذه الدروس التطبيقية حول الترميز...

مزيد من المراجع والفيديوهات

مستندات المرجع