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 | تستفيد مجموعة NEG الإقليمية للإنترنت من 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 GW إضافية باستخدام –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)، يمكن أن يتم تحويل اسم FQDN إلى عنوان IP يمكن توجيهه على الإنترنت العام أو إلى عنوان IP خاص، وذلك حسب نطاق نقطة النهاية: إقليمي أو عالمي.
الخيار 1: إعداد NEG على الإنترنت باستخدام عنوان IP
يتطلّب NEG على الإنترنت عنوان IP الذي تمّت تسويته لموقع Github.com، لذا للحصول على أفضل أداء، افتح نافذة طرفية محلية ونفِّذ عملية بحث عن معلومات DNS واحصل على عنوان 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
أنشئ مجموعة نقاط نهاية شبكة (NEG) على الإنترنت، واضبط –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 على الإنترنت باستخدام اسم النطاق المؤهَّل بالكامل
يمكنك اختياريًا إنشاء مجموعة 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.
بعد ذلك، ستشارك خدمة "نظير نظام أسماء النطاقات" منطقة 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"

تعديل تبادل معلومات بين الشبكات لنظام أسماء النطاقات
في هذا القسم، ستستخدم بنية "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 أنّ الدروس التطبيقية حول الترميز رائعة!!
