1. مقدمة
لا تتوافق إعدادات عنوان IP الخاص وعنوان IP العام إلا مع مثيلات Looker (Google Cloud الأساسية) التي تستخدم الوصول إلى الخدمات الخاصة للاتصال الخاص.
يتضمّن مثيل Looker (الإصدار الأساسي من Google Cloud) الذي يتضمّن اتصالاً عبر عنوان IP خاص (الوصول إلى الخدمات الخاصة) واتصالاً عبر عنوان IP علني عنوان URL علنيًا، وستمرّ جميع الزيارات الواردة عبر الاتصال عبر عنوان IP العلني. يتم توجيه الزيارات الصادرة من خلال شبكة VPC، ويمكن ضبطها للسماح فقط بزيارات عناوين IP الخاصة كما هو موضّح في الشكل 1.
Figure1

يتم حلّ الاتصال بـ github.com إلى عنوان IP عام، وبالتالي لا يمكن الوصول إليه من مثيل Looker تم نشره على أنّه "خاص" أو "عام + خاص".
في هذا الدرس التطبيقي حول الترميز، ستجري عملية ربط صادرة باستخدام بروتوكول HTTPS مع GitHub من خلال موازنة حمل داخلية باستخدام وكيل TCP ومجموعة نقاط نهاية الشبكة (NEG) الخاصة بالإنترنت، والتي يتم استدعاؤها من Looker PSA.
ما ستتعلمه
- متطلبات الشبكة
- إعداد اتصال بـ GitHub من Looker باستخدام "اختبار الاتصال"
المتطلبات
- مشروع Google Cloud لديه أذونات المالك
- حساب ومستودع GitHub
- رمز الوصول الشخصي (الكلاسيكي) في GitHub
- مثيل Looker PSA حالي مع تفعيل "عام + خاص" أو "خاص" فقط

2. ما ستنشئه
ستنشئ جهاز موازنة حمل داخليًا لخادم TCP الوكيل ومجموعة نقاط نهاية شبكة (NEG) على الإنترنت تم إعدادها باستخدام عنوان IP الذي تم تحديده لموقع github.com، والذي يستفيد من Cloud NAT لإرسال البيانات إلى مؤسسات github.com التي يحددها Looker.
3- متطلبات الشبكة
في ما يلي تفاصيل متطلبات الشبكة:
المكونات | الوصف |
شبكة VPC ($vpc_network) | شبكة VPC في الوضع المخصّص |
الشبكة الفرعية لقاعدة إعادة التوجيه | يُستخدم لتخصيص عنوان IP لجهاز موازنة الحمل الخاص بخادم وكيل TCP الداخلي الإقليمي |
الشبكة الفرعية للوكيل فقط | يتمّ تعيين عنوان IP داخلي لكل خادم وكيل في موازن التحميل. تحتوي الحِزم المُرسَلة من خادم وكيل إلى جهاز افتراضي أو نقطة نهاية في الخلفية على عنوان IP مصدر من الشبكة الفرعية الخاصة بالخادم الوكيل فقط. |
مجموعة نقاط نهاية الشبكة للإنترنت | مورد يُستخدَم لتحديد خلفية خارجية لجهاز موازنة الحمل لا يمكن الوصول إلى نقطة النهاية إلا من خلال Cloud VPN أو Cloud Interconnect. |
خدمة الخلفية | تعمل خدمة الخلفية كجسر بين برنامج موازنة الحمل وموارد الخلفية. في البرنامج التعليمي، تكون خدمة الخلفية مرتبطة بمجموعة نقاط نهاية الشبكة على الإنترنت. |
Cloud Router | تعتمد خدمة Cloud NAT على Cloud Routers في ما يتعلق بإمكانات مستوى التحكّم، ولكن ليس في ما يتعلق بإدارة جلسات BGP. |
Cloud NAT | تستفيد مجموعة نقاط نهاية الشبكة على الإنترنت الإقليمية من Cloud NAT لإرسال البيانات إلى الإنترنت. |
4. بنية الدرس التطبيقي حول الترميز

5- الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
- رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف مشروعك (يُشار إليه عادةً باسم
PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم آخر عشوائي. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك ومعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة ويظل ساريًا طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع، وتستخدمها بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير، إن وُجدت أي تكلفة. لإيقاف الموارد وتجنُّب تحمّل تكاليف فوترة تتجاوز هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي حول الترميز Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة:

لن يستغرق توفير البيئة والاتصال بها سوى بضع لحظات. عند الانتهاء، من المفترض أن يظهر لك ما يلي:

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا دائمًا بسعة 5 غيغابايت، وتعمل على Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إكمال جميع المهام في هذا الدرس العملي ضمن المتصفّح. لست بحاجة إلى تثبيت أي تطبيق.
6. قبل البدء
تفعيل واجهات برمجة التطبيقات
داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك:
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
vpc_network=[VPC Name]
echo $project
echo $region
echo $vpc-network
فعِّل جميع الخدمات اللازمة:
gcloud services enable compute.googleapis.com
7. مكوّنات شبكة VPC
شبكة VPC
المتطلّب الأساسي للبرنامج التعليمي هو توفّر مثيل Looker حالي خاص بفريق خدمات ما بعد البيع، وبالتالي تم إنشاء شبكة VPC المرتبطة به.
داخل Cloud Shell، أنشئ الشبكة الفرعية لقاعدة إعادة التوجيه:
gcloud compute networks subnets create psa-fr-subnet --network $vpc_network --range 172.16.20.0/28 --region $region --enable-private-ip-google-access
داخل Cloud Shell، أنشئ الشبكة الفرعية الخاصة بالخادم الوكيل الإقليمي فقط:
gcloud compute networks subnets create $region-proxyonly-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$region \
--network=$vpc_network \
--range=10.10.10.0/24
إنشاء بوابة NAT العامة
يتم استخدام NAT Gateway من خلال موازن التحميل الإقليمية الداخلية لخادم وكيل TCP من أجل نقل البيانات إلى الإنترنت مع خيار الإعداد –endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB، وبالتالي لن تتوافق NATGW نفسها مع نقل البيانات إلى الإنترنت في GCE/GKE. يمكنك نشر بوابة NAT إضافية باستخدام –endpoint-types=ENDPOINT_TYPE_VM لإرسال البيانات إلى الإنترنت في GCE/GKE.
داخل Cloud Shell، أنشئ Cloud Router:
gcloud compute routers create $vpc_network-cloud-router --network $vpc_network --region $region
داخل Cloud Shell، أنشئ بوابة Cloud NAT التي تتيح خروج الإنترنت لجهاز موازنة الحمل لوكيل TCP:
gcloud compute routers nats create $vpc_network-natgw \
--router=$vpc_network-cloud-router \
--endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
--nat-custom-subnet-ip-ranges=$region-proxyonly-subnet \
--auto-allocate-nat-external-ips \
--region=$region
حجز عنوان IP الخاص بجهاز موازنة الحمل
داخل Cloud Shell، احجز عنوان IP داخليًا لموازنة الحمل التي سيتم استخدامها لاحقًا كسجلّ A لنظام أسماء النطاقات (DNS) الخاص بـ github.com:
gcloud compute addresses create internet-neg-lb-ip \
--region=$region \
--subnet=psa-fr-subnet
في Cloud Shell، اعرض عنوان IP المحجوز:
gcloud compute addresses describe internet-neg-lb-ip \
--region=$region | grep -i address:
مثال على الناتج:
user@cloudshell$ gcloud compute addresses describe internet-neg-lb-ip --region=$region | grep -i address:
address: 172.16.20.2
8. مجموعة نقاط نهاية الشبكة للإنترنت
هناك طريقتان لإعداد نقطة النهاية الخارجية المشار إليها في مجموعة NEG على الإنترنت: INTERNET_FQDN_PORT أو INTERNET_IP_PORT. في حال اختيار تنسيق INTERNET_IP_PORT (الخيار 1)، لا يمكن استخدام سوى عنوان IP يمكن توجيهه على الإنترنت العام. في حال اختيار تنسيق INTERNET_FQDN_PORT (الخيار 2)، يمكن أن يتم تحويل اسم النطاق المؤهّل بالكامل إلى عنوان IP يمكن توجيهه على الإنترنت العام أو إلى عنوان IP خاص، وذلك حسب نطاق نقطة النهاية: إقليمي أو عالمي.
الخيار 1: إعداد مجموعة NEG على الإنترنت باستخدام عنوان IP
يتطلّب NEG على الإنترنت عنوان IP الذي تمّت تسويته لموقع Github.com، لذا للحصول على أفضل أداء، افتح نافذة طرفية محلية ونفِّذ عملية بحث dig واحصل على عنوان IP لموقع github.com.
مثال من جهاز طرفي محلي ينشئ عنوان IP الذي تمّت تسويته 140.82.113.4
bash-3.2$ dig github.com ; <<>> DiG 9.10.6 <<>> github.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64801 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;github.com. IN A ;; ANSWER SECTION: github.com. 60 IN A 140.82.113.4 ;; Query time: 409 msec ;; SERVER: ::1#53(::1) ;; WHEN: Thu Sep 26 15:50:45 CDT 2024 ;; MSG SIZE rcvd: 65
أنشئ مجموعة نقاط نهاية شبكة على الإنترنت، واضبط –network-endpoint-type على internet_ip_port.
داخل Cloud Shell، أنشئ مجموعة NEG على الإنترنت مستخدَمة في github.com:
gcloud compute network-endpoint-groups create github-internet-neg \
--network-endpoint-type=INTERNET_IP_PORT \
--network=$vpc_network \
--region=$region
في Cloud Shell، عدِّل Internet NEG github-internet-neg باستخدام عنوان IP الذي تمّت تسويته لـ github.com والمنفذ 443:
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="ip=[your-resolved-ip],port=443" \
--region=$region
مثال:
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="ip=140.82.113.4,port=443" \
--region=$region
الخيار 2: إعداد مجموعة NEG على الإنترنت باستخدام اسم النطاق المؤهَّل بالكامل
يمكنك اختياريًا إنشاء مجموعة نقاط نهاية شبكة على الإنترنت، وضبط –network-endpoint-type على internet_FQDN_port.
داخل Cloud Shell، أنشئ مجموعة NEG على الإنترنت مستخدَمة في github.com:
gcloud compute network-endpoint-groups create github-internet-neg \
--network-endpoint-type=INTERNET_FQDN_PORT \
--network=$vpc_network \
--region=$region
داخل Cloud Shell، عدِّل Internet NEG github-internet-neg باستخدام اسم النطاق المؤهّل بالكامل github.com:
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="fqdn=github.com,port=443" \
--region=$region
9. إنشاء خدمة Github
إنشاء مكوّنات موازنة الحمل
داخل Cloud Shell، اتّبِع الخطوات التالية:
gcloud compute backend-services create psa-backend-svc --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED
gcloud compute backend-services add-backend psa-backend-svc --network-endpoint-group=github-internet-neg --network-endpoint-group-region=$region --region=$region
في Cloud Shell، أنشئ خادم وكيل TCP مستهدفًا لتوجيه الطلبات إلى خدمة الخلفية:
gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
--backend-service=psa-backend-svc \
--region=$region
في الصيغة التالية، أنشئ قاعدة إعادة توجيه (جهاز موازنة حمل وكيل TCP داخلي).
في Cloud Shell، نفِّذ ما يلي:
gcloud compute forwarding-rules create psa-github-fr \
--load-balancing-scheme=INTERNAL_MANAGED \
--network-tier=PREMIUM \
--network=$vpc_network \
--subnet=psa-fr-subnet \
--address=internet-neg-lb-ip \
--target-tcp-proxy=producer-lb-tcp-proxy \
--target-tcp-proxy-region=$region \
--region=$region \
--ports=443
10. منطقة نظام أسماء النطاقات في GitHub
في القسم التالي، ستنشئ سياسة استجابة لنظام أسماء النطاقات خاصةً بموقع GitHub.com تتضمّن سجلّ A يتألف من عنوان IP الخاص بجهاز موازنة الحمل الداخلي لخادم وكيل TCP.
بعد ذلك، ستشارك خدمة DNS peering منطقة github.com مع Looker PSA، ما يتيح إمكانية الاتصال بـ github من خلال موازن التحميل الداخلية مع مجموعة نقاط نهاية الشبكة الصادرة والخاصة بالإنترنت وCloud NAT.
في Cloud Shell، أنشئ منطقة سياسة الردّ:
gcloud dns --project=$project response-policies create github-com --description="" --networks="$vpc_network"
في Cloud Shell، أنشئ سجلّ A لنظام أسماء النطاقات يتألف من عنوان IP لموازن تحميل وكيل TCP، [insert-your-ip-address]:
gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="[insert-your-ip-address]"
مثال:
gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="172.16.20.2"

تعديل إعدادات تبادل DNS
في هذا القسم، ستستخدم بنية "gcloud services peered-dns-domains create" التي تنشئ نطاق نظام أسماء نطاقات (DNS) مرتبطًا باتصال خدمة خاص يرسل طلبات للحصول على سجلات في مساحة اسم معيّنة مصدرها شبكة VPC الخاصة بمقدّم الخدمة إلى شبكة VPC الخاصة بالمستهلك ليتم حلّها.
في Cloud Shell، أنشئ peered-dns-domain سيطلبه Looker من github.com:
gcloud services peered-dns-domains create github-com --project=$project --network=$vpc_network --dns-suffix=github.com.
11. اختبار الاتصال بـ GitHub
في الخطوات التالية، ستستخدم Looker Console لإنشاء مشروع من أجل التحقّق من صحة اتصال HTTPS بـ github.com.
12. إنشاء مشروع جديد
تفعيل "وضع التطوير"
في Looker Console، انتقِل إلى:
فعِّل "وضع التطوير" (أسفل يسار الصفحة)، وبعد تحديده، سيظهر البانر "أنت في وضع التطوير".

إنشاء مشروع جديد
في Cloud Console، انتقِل إلى:
تطوير → المشاريع

اختَر "مشروع LookML جديد".

أدخِل اسم مشروع، ثمّ اختَر "مشروع فارغ" ثمّ "إنشاء مشروع".

اختَر "إعداد Git"

ضبط Git
عدِّل عنوان URL للمستودع باستخدام تفاصيل HTTPS github، وتأكَّد من إلحاق عنوان URL بـ .git، ثم انقر على "متابعة".

مثال:

عدِّل الاختيار باستخدام اسم مستخدم GitHub ورمز الدخول الشخصي (الإصدار القديم)، ثم انقر على "اختبار الإعداد وإكماله".

اختيار Git Actions

اختيار "اختبار ربط Git"

التحقّق من صحة اختبار ربط Git

13. تَنظيم
من نافذة Cloud Shell واحدة، احذف مكوّنات المختبر:
gcloud compute forwarding-rules delete psa-github-fr --region=$region -q
gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q
gcloud compute backend-services delete psa-backend-svc --region=$region -q
gcloud compute routers nats delete $vpc_network-natgw --router=$vpc_network-cloud-router --router-region=$region -q
gcloud compute routers delete $vpc_network-cloud-router --region=$region -q
gcloud compute network-endpoint-groups delete github-internet-neg --region=$region -q
gcloud compute addresses delete internet-neg-lb-ip --region=$region -q
gcloud compute networks subnets delete psa-fr-subnet $region-proxyonly-subnet --region=$region -q
gcloud services peered-dns-domains delete github-com --network=$vpc_network -q
gcloud dns --project=$project response-policies rules delete github --response-policy="github-com" -q
gcloud dns response-policies update github-com --networks= -q
gcloud dns response-policies delete github-com
14. تهانينا
تهانينا، لقد نجحت في إعداد الاتصال بـ GitHub والتحقّق منه باستخدام Looker Console.
تعتقد Cosmopup أنّ الدروس التطبيقية حول الترميز رائعة!!
