Looker PSA Southbound HTTPS Internet NEG

لمحة عن هذا الدرس التطبيقي حول الترميز
schedule38 دقيقة
subjectتاريخ التعديل الأخير: 2 أبريل 2025
account_circleتأليف: Deepak Michael, Emanuele Mazza

لا تتيح مثيلات Looker (الأساسية في Google Cloud) التي تستخدم إذن الوصول إلى الخدمات الخاصة لعملية الاتصال الخاصة إلا ضبط عنوان IP الخاص وعنوان IP العام.

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

Figure1

9f587c14791dd92e.png

يتمّ حلّ الاتصال بـ github.com إلى عنوان IP عام، وبالتالي لا يمكن الوصول إليه من مثيل Looker الذي تمّ نشره على أنّه خاص أو عام+خاص.

في هذا الدليل التعليمي حول الرموز البرمجية، ستُجري اتصالاً من جهة العميل باستخدام بروتوكول HTTPS مع GitHub باستخدام موازن تحميل وكيل tcp داخلي ومجموعة نقاط نهاية شبكة الإنترنت (NEG) التي يتمّ استدعاؤها من Looker PSA.

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

  • متطلبات الشبكة
  • إنشاء اتصال بـ GitHub من Looker باستخدام اختبار اتصال

المتطلبات

5348de53f0a78a50.png

2. ما ستُنشئه

ستنشر خادمًا وكيلاً لبروتوكول TCP الداخلي وعنصر NEG للإنترنت تم ضبطه باستخدام عنوان IP الذي تمّ حلّه لموقع github.com، والذي يستفيد من Cloud NAT للخروج إلى الإنترنت إلى المؤسسات التي تملك github.com والتي تمّ حلّها بواسطة Looker.

3- متطلبات الشبكة

في ما يلي تفاصيل متطلبات الشبكة:

المكونات

الوصف

شبكة VPC ($vpc_network)

شبكة VPC للوضع المخصّص

الشبكة الفرعية لقاعدة إعادة التوجيه

يُستخدَم لتخصيص عنوان IP لجهاز موازنة حمل الخادم الوكيل الداخلي الإقليمي لبروتوكول TCP.

الشبكة الفرعية للوكيل فقط

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

مجموعة نقاط نهاية الشبكة للإنترنت

مورد يُستخدَم لتحديد خلفية خارجية لجهاز موازنة الحمل لا يمكن الوصول إلى نقطة النهاية إلا من خلال Cloud VPN أو Cloud Interconnect.

خدمة الخلفية

تعمل خدمة الخلفية كجسر بين جهاز موازنة الحمل وموارد الخلفية. في البرنامج التعليمي، تكون خدمة الخلفية مرتبطة بـ Internet NEG.

Cloud Router

تعتمد تقنية Cloud NAT على أجهزة توجيه السحابة الإلكترونية لتوفير إمكانات مسار التحكّم، ولكن ليس لإدارة جلسات BGP.

Cloud NAT

يستفيد NEG للإنترنت على مستوى المنطقة من Cloud NAT للخروج إلى الإنترنت.

4. طوبولوجيا الدرس التطبيقي حول الترميز

c5871e5418d37f13.png

5- الإعداد والمتطلبات

إعداد البيئة حسب السرعة التي تناسبك

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

بدء Cloud Shell

على الرغم من أنّه يمكن تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدليل التعليمي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.

من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. ويقدّم هذا الدليل دليلاً منزليًا دائمًا بسعة 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

الشرط الأساسي للدليل التعليمي هو توفُّر مثيل PSA 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 العامة

يستخدم موازن الحمولة الوكيل الداخلي لبروتوكول النقل المتعدّد للمخطّطات (TCP) في المنطقة بوابة NAT للخروج إلى الإنترنت باستخدام خيار الضبط -endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB، وبالتالي لن تتوافق بوابة NATGW نفسها مع الخروج إلى الإنترنت في Google Compute Engine/Google Kubernetes Engine. يمكنك نشر بوابة NAT إضافية باستخدام الخيار –endpoint-types=ENDPOINT_TYPE_VM للخروج إلى الإنترنت في GCE/GKE.

داخل Cloud Shell، أنشئ "راوتر السحابة":

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 في نظام أسماء النطاقات لموقع 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. مجموعة نقاط نهاية الشبكة للإنترنت

تتوفّر طريقتان لضبط نقطة النهاية الخارجية التي يشير إليها Internet 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، وبالتالي للحصول على أفضل أداء، افتح وحدة تحكّم طرفية محلية ونفِّذ 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

أنشئ 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، عدِّل 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، عدِّل NEG للإنترنت github-internet-neg باستخدام FQDN 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 من خلال موازن الحمولة الداخلي مع Internet NEG و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"

7b41b2f44609e5ed.png

تعديل عملية ربط نظام أسماء النطاقات

في هذا القسم، ستستخدم البنية "gcloud services peered-dns-domains create" التي تنشئ نطاق نظام أسماء النطاقات المعادل لربط خدمة خاصة يُرسِل طلبات للحصول على السجلات في مساحة اسم معيّنة مصدرها شبكة VPC لموفّر الخدمة إلى شبكة VPC للمستهلك ليتم حلّها.

في Cloud Shell، أنشئ نطاقًا لنظام أسماء النطاقات المعادل الذي سيبحث عنه 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، انتقِل إلى:

فعِّل "وضع التطوير" (في أسفل يمين الصفحة)، وبعد اختياره، سيظهر بانر "أنت في وضع التطوير".

70c9ded749decfbe.png

إنشاء مشروع جديد

في Cloud Console، انتقِل إلى:

التطوير → المشاريع

e8ae11e0392a776d.png

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

65a3c2573e97e1e9.png

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

9185808e001fa540.png

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

42f5e51ce70642ad.png

ضبط Git

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

f5c448f6659b8fc1.png

مثال:

4065ab1d196589f.png

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

1dc44d63c555a9ae.png

اختيار إجراءات Git

b5903668a50a99ca.png

اختَر "اختبار اتصال Git".

51b722e84f2df38c.png

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

8fb7386b739f60be.png

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 أنّ الدروس التطبيقية حول الترميز رائعة.

c911c127bffdee57.jpeg

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

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

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