1. مقدمة
تستخدم خدمة Private Service Connect مع إعدادات نظام أسماء النطاقات التلقائية كلاً من Service Directory وCloud DNS لإنشاء سجلّات نظام أسماء نطاقات تلقائيًا يتمّ برمجتها باستخدام عناوين IP لنقاط نهاية Private Service Connect الخاصة بالمستهلك.
ما ستنشئه
في هذا الدرس التطبيقي حول الترميز، ستنشئ بنية Private Service Connect شاملة توضّح استخدام نظام أسماء النطاقات التلقائي كما هو موضّح في الشكل 1.
تتوفّر ميزة "نظام أسماء النطاقات التلقائي" بفضل ما يلي:
- ينشئ مرفق خدمة مقدّم الخدمة نظام أسماء نطاقات تلقائيًا من خلال توفير نطاق عام مملوك باستخدام العلامة – domain-names عند إنشاء مرفق خدمة Private Service Connect.
- يحدّد المستهلك اسم نقطة نهاية.
- ينشئ نظام أسماء النطاقات التلقائي كلاً من منطقة نظام أسماء النطاقات goog-psc-default-us-central1 واسم نظام أسماء النطاقات cosmopup.net، بالإضافة إلى إدخال في "دليل الخدمات" يتألف من اسم نقطة نهاية المستهلك.
يتم توضيح فائدة نظام أسماء النطاقات التلقائي في (4) حيث يمكن للمستخدم النهائي التواصل مع نقطة نهاية المستهلك من خلال نظام أسماء النطاقات، وهو اسم النطاق المؤهّل بالكامل stargazer.cosmopup.net.
الشكل 1

ما ستتعلمه
- كيفية إنشاء جهاز موازنة حمل 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- إعداد Producer
إنشاء شبكة 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 نفسها، ستتشارك هذه الأجهزة في الشبكة الفرعية نفسها المخصّصة للوكيل فقط من أجل موازنة الحمل.
- ينشئ العميل اتصالاً بعنوان IP ومنفذ قاعدة إعادة التوجيه لموازنة التحميل.
- يستمع كل وكيل على عنوان IP والمنفذ المحدّدين في قاعدة إعادة التوجيه الخاصة بموازن التحميل المقابل. يتلقّى أحد الخوادم الوكيلة اتصال الشبكة الخاص بالعميل وينهيه.
- ينشئ الوكيل اتصالاً بالجهاز الافتراضي المناسب في الخلفية الذي تحدّده خريطة عناوين 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
إنشاء الشبكات الفرعية لترجمة عناوين الشبكة (NAT) في 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
إنشاء قواعد جدار الحماية الخاصة بالمنتج
اضبط قواعد جدار الحماية للسماح بمرور الزيارات بين الشبكة الفرعية لترجمة عناوين الشبكة (NAT) في Private Service Connect والشبكة الفرعية للخادم الوكيل في موازنة الحمل الداخلية فقط.
داخل 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 في الدرس التطبيقي حول الترميز لتثبيت حِزم البرامج لأنّ مثيل الجهاز الافتراضي لا يتضمّن عنوان 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، انتقِل إلى خدمات الشبكة → موازنة الحمل → أجهزة موازنة الحمل. تسجيل التحقق من الصحة الناجح لخدمة الخلفية

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

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 لعرض ربط الخدمة الذي تم إنشاؤه حديثًا.

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

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

عند اختيار psc-consumer-1، يتم تقديم التفاصيل، بما في ذلك معرّف الموارد المنتظم (URI) لربط الخدمة.

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

9- التحقّق من صحة إعدادات نظام أسماء النطاقات التلقائية
لنقيّم إعدادات نظام أسماء النطاقات ودليل الخدمات.
إعدادات Cloud DNS
انتقِل إلى خدمات الشبكة (Network Services) → Cloud DNS → المناطق (Zones). يتم إنشاء المنطقة goog-psc-default-us-central & واسم نظام أسماء النطاقات cosmopup.net. تلقائيًا.

عرض إعدادات نظام أسماء النطاقات و"دليل الخدمات"
يسمح لنا اختيار اسم المنطقة بمعرفة كيفية دمج Service Directory مع Cloud DNS.

إعدادات دليل الخدمات
انتقِل إلى خدمات الشبكة (Network Services) → دليل الخدمات (Service Directory)
هل تتذكّر اسم نقطة نهاية المستهلك stargazer؟ يتم برمجته تلقائيًا في "دليل الخدمات"، ما يتيح لنا الوصول إلى نقطة نهاية المستهلك باستخدام اسم النطاق المؤهَّل بالكامل stargazer.goog-psc-default–us-central1

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
للسماح لميزة "الوصول إلى الأجهزة الافتراضية عبر الإنترنت" بالاتصال بأجهزة 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
سجِّل الدخول إلى consumer-vm باستخدام IAP في Cloud Shell للتحقّق من إمكانية الاتصال بخدمة المنتج من خلال تنفيذ curl. أعِد المحاولة إذا انتهت المهلة.
gcloud compute ssh db1 --project=$projectname --zone=us-central1-a --tunnel-through-iap
نفِّذ عملية curl للتحقّق من إمكانية الاتصال بالخدمة المنتِجة. بعد التحقّق من صحة الشهادة، اخرج من الجهاز الظاهري (VM) بالعودة إلى طلب 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 أنّ الدروس التطبيقية حول الترميز رائعة!!

ما هي الخطوات التالية؟
اطّلِع على بعض دروس الترميز التطبيقية هذه...
- استخدام Private Service Connect لنشر الخدمات واستهلاكها مع GKE
- استخدام Private Service Connect لنشر الخدمات واستهلاكها
- الاتصال بالخدمات المحلية عبر شبكة مختلطة باستخدام خدمة Private Service Connect وجهاز موازنة الحمل الداخلي الذي يستخدم وكيل TCP
مزيد من المعلومات والفيديوهات
- نظرة عامة على Private Service Connect
- ما هي خدمة Private Service Connect؟
- أنواع موازنات الحمل المتوافقة