Looker PSC Southbound SSH Internet NEG

1. مقدمة

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

‫Private Service Connect هي إحدى ميزات شبكة Google Cloud التي تتيح للمستهلكين الوصول إلى الخدمات المُدارة بشكل خاص من داخل شبكة VPC. وبالمثل، تسمح هذه الميزة لمطوّري الخدمات المُدارة باستضافة هذه الخدمات في شبكات VPC منفصلة خاصة بهم وتوفير اتصال خاص للمستهلكين. على سبيل المثال، عند استخدام Private Service Connect للوصول إلى Looker، تكون أنت مستخدِم الخدمة وتكون Google مقدّم الخدمة، كما هو موضّح في الشكل 1.

الشكل 1.

145ea4672c3a3b14.png

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

الشكل 2.

259493afd914f68b.png

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

  • متطلبات الشبكة
  • إنشاء خدمة منتج في Private Service Connect
  • إنشاء نقطة نهاية Private Service Connect في Looker
  • إنشاء اتصال بخدمة GitHub من Looker باستخدام اختبار اتصال

المتطلبات

  • مشروع Google Cloud الذي يتضمّن أذونات المالك
  • حساب ومستودع GitHub
  • مفتاح نشر بروتوكول النقل الآمن (SSH) الذي تتم مشاركته بين Looker وGitHub
  • مثيل Looker PSC الحالي

def88091b42bfe4d.png

2. ما ستُنشئه

ستُنشئ شبكة مُنتج، وهي looker-psc-demo، لنشر موازنة الحمولة الداخلية لبروتوكول TCP وNEG على الإنترنت المنشور كخدمة من خلال Private Service Connect (PSC). بعد نشر التطبيق، عليك اتّخاذ الإجراءات التالية للتحقّق من إمكانية الوصول إلى خدمة "صانع المحتوى":

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

في ما يلي تفاصيل متطلبات الشبكة لشبكة "المنتج"، والمستهلك في هذا الدليل التعليمي هو مثيل Looker PSC.

شبكة المنتجين

المكونات

الوصف

VPC (looker-psc-demo)

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

الشبكة الفرعية لـ PSC NAT

تتم ترجمة الحِزم الواردة من شبكة VPC للمستهلك باستخدام ترجمة عنوان الشبكة المصدر (SNAT) لكي يتم تحويل عناوين IP المصدر الأصلية إلى عناوين IP مصدر من الشبكة الفرعية لترجمة عنوان الشبكة في شبكة VPC الخاصة بالمنتج.

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

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

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

تُستخدَم لتخصيص عنوان IP لمجموعة نقاط نهاية الشبكة.

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

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

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

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

خدمة الخلفية

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

Cloud Router

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

Cloud NAT

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

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

dfa4dd1d681a66da.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]
echo $project
echo $region

فعِّل جميع الخدمات اللازمة:

gcloud services enable compute.googleapis.com

7- إنشاء شبكة VPC لصانع المحتوى

شبكة VPC

في Cloud Shell، نفِّذ ما يلي:

gcloud compute networks create looker-psc-demo --subnet-mode custom

إنشاء شبكات فرعية

سيتم ربط الشبكة الفرعية لـ PSC بمرفق خدمة PSC بغرض ترجمة عناوين الشبكة.

داخل Cloud Shell، أنشئ شبكة فرعية لعنوان IP الخاص بخدمة Private Service Connect (NAT):

gcloud compute networks subnets create producer-psc-nat-subnet --network looker-psc-demo --range 172.16.10.0/28 --region $region --purpose=PRIVATE_SERVICE_CONNECT

داخل Cloud Shell، أنشئ الشبكة الفرعية لقاعدة إعادة توجيه المنتج:

gcloud compute networks subnets create producer-psc-fr-subnet --network looker-psc-demo --range 172.16.20.0/28 --region $region --enable-private-ip-google-access

داخل Cloud Shell، أنشئ الشبكة الفرعية للوكيل الإقليمي فقط لنشر الأخبار:

gcloud compute networks subnets create $region-proxy-only-subnet \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=$region \
  --network=looker-psc-demo \
  --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 looker-psc-demo-cloud-router --network looker-psc-demo --region $region

داخل Cloud Shell، أنشئ بوابة Cloud NAT التي تتيح الخروج إلى الإنترنت لجهاز موازنة الحمولة الوكيل لبروتوكول النقل المتعدّد للمخطّطات (TCP):

gcloud compute routers nats create looker-psc-demo-natgw \
  --router=looker-psc-demo-cloud-router \
  --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
  --nat-custom-subnet-ip-ranges=$region-proxy-only-subnet \
  --auto-allocate-nat-external-ips \
  --region=$region

حجز عنوان IP الخاص بجهاز موازنة الحمل

في Cloud Shell، احجز عنوان IP داخليًا لجهاز موازنة الحمل:

gcloud compute addresses create internet-neg-lb-ip \
  --region=$region \
  --subnet=producer-psc-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

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

أنشئ NEG على الإنترنت، واضبط –network-endpoint-type على internet-fqdn-port (اسم المضيف والمنفذ حيث يمكن الوصول إلى الخلفية الخارجية).

داخل Cloud Shell، أنشئ NEG على الإنترنت يُستخدَم لموقع github.com.

gcloud compute network-endpoint-groups create github-internet-neg-ssh \
    --network-endpoint-type=INTERNET_FQDN_PORT \
    --network=looker-psc-demo \
    --region=$region

داخل Cloud Shell، عدِّل Internet NEG github-internet-neg-ssh باستخدام FQDN github.com والمنفذ 22.

gcloud compute network-endpoint-groups update github-internet-neg-ssh \
    --add-endpoint="fqdn=github.com,port=22" \
    --region=$region

إنشاء سياسة جدار حماية الشبكة وقواعد جدار الحماية

في Cloud Shell، نفِّذ ما يلي:

gcloud compute network-firewall-policies create looker-psc-demo-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy looker-psc-demo-policy --network looker-psc-demo --name looker-psc-demo --global-firewall-policy

تسمح قاعدة جدار الحماية التالية بمرور الزيارات من نطاق الشبكة الفرعية لبروتوكول ترجمة عنوان الشبكة (NAT) في وحدة التحكّم في حدود الجلسة إلى جميع المثيلات في الشبكة.

في Cloud Shell، نفِّذ ما يلي:

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy looker-psc-demo-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 172.16.10.0/28 --global-firewall-policy --layer4-configs=tcp

8. إنشاء خدمة منتج

إنشاء مكوّنات جهاز موازنة الحمل

في Cloud Shell، نفِّذ ما يلي:

gcloud compute backend-services create producer-backend-svc  --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED

gcloud compute backend-services add-backend producer-backend-svc --network-endpoint-group=github-internet-neg-ssh --network-endpoint-group-region=$region --region=$region

في Cloud Shell، أنشئ خادمًا وكيلاً لبروتوكول النقل المتعدّد (TCP) المستهدَف لتوجيه الطلبات إلى خدمة الخلفية:

gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
      --backend-service=producer-backend-svc  \
      --region=$region

في البنية التالية، أنشئ قاعدة إعادة توجيه (جهاز موازنة حمل داخلي لبروتوكول TCP).

في Cloud Shell، نفِّذ ما يلي:

gcloud compute forwarding-rules create producer-github-fr \
     --load-balancing-scheme=INTERNAL_MANAGED \
     --network-tier=PREMIUM \
     --network=looker-psc-demo \
     --subnet=producer-psc-fr-subnet \
     --address=internet-neg-lb-ip \
     --target-tcp-proxy=producer-lb-tcp-proxy \
     --target-tcp-proxy-region=$region \
     --region=$region \
     --ports=22

إنشاء مرفق الخدمة

داخل Cloud Shell، أنشئ مرفق الخدمة github-svc-attachment-ssh:

gcloud compute service-attachments create github-svc-attachment-ssh --region=$region --producer-forwarding-rule=producer-github-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-psc-nat-subnet

بعد ذلك، احصل على مرفق الخدمة المدرَج في عنوان URL الخاص برابط الخدمة، واحرص على تدوينه، بدءًا من المشاريع لضبط نقطة نهاية PSC في Looker.

selfLink: projects/<your-project-id>/regions/<your-region>/serviceAttachments/github-svc-attachment-ssh

في Cloud Shell، نفِّذ ما يلي:

gcloud compute service-attachments describe github-svc-attachment-ssh --region=$region

مثال على الناتج المتوقّع

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-08-31T13:43:07.078-07:00'
description: ''
enableProxyProtocol: false
fingerprint: O5OtqHR33v4=
id: '7557641709467614900'
kind: compute#serviceAttachment
name: github-svc-attachment-ssh
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
  high: '19348441121424360'
  low: '7557641709467614900'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/github-svc-attachment-ssh
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-github-fr

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

خدمات الشبكة → Private Service Connect → الخدمات المنشورة

30b1a280966b1f06.png

4eafe698193f5f44.png

9. إنشاء اتصال بنقطة نهاية PSC في Looker

في القسم التالي، ستربط "مرفق خدمة المنتجين" بخدمة Private Service Connect في Looker Core من خلال استخدام علامات –psc-service-attachment في Cloud Shell لنطاق واحد.

داخل Cloud Shell، أنشئ عملية ربط psc من خلال تعديل المَعلمات التالية لتتطابق مع بيئتك:

  • INSTANCE_NAME: اسم مثيل Looker (Google Cloud core)
  • DOMAIN_1: githubssh.com
  • SERVICE_ATTACHMENT_1: عنوان URL تم تسجيله عند وصف مرفق الخدمة، github-svc-attachment-ssh.
  • REGION: المنطقة التي تتم فيها استضافة نسخة Looker (Google Cloud core)

في Cloud Shell، نفِّذ ما يلي:

gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment  domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION

مثال:

gcloud looker instances update looker-psc-instance \
--psc-service-attachment  domain=githubssh.com,attachment=projects/$project/regions/$region/serviceAttachments/github-svc-attachment-ssh \
--region=$region

في Cloud Shell، تحقَّق من أنّ حالة اتصال serviceAttachments هي "مقبول". يُرجى تعديل INSTANCE_NAME لوحدة التحكّم في الخدمات في Looker.

gcloud looker instances describe [INSTANCE_NAME] --region=$region --format=json

مثال:

gcloud looker instances describe looker-psc-instance --region=$region --format=json

مثال:

{
  "adminSettings": {},
  "createTime": "2024-08-23T00:00:45.339063195Z",
  "customDomain": {
    "domain": "cosmopup.com",
    "state": "AVAILABLE"
  },
  "encryptionConfig": {},
  "lookerVersion": "24.14.18",
  "name": "projects/$project/locations/$region/instances/looker-psc-instance",
  "platformEdition": "LOOKER_CORE_ENTERPRISE_ANNUAL",
  "pscConfig": {
    "allowedVpcs": [
      "projects/$project/global/networks/looker-psc-demo",
      "projects/$project/global/networks/looker-shared-vpc"
    ],
    "lookerServiceAttachmentUri": "projects/t7ec792caf2a609d1-tp/regions/$region/serviceAttachments/looker-psc-f51982e2-ac0d-48b1-91bb-88656971c183",
    "serviceAttachments": [
      {
        "connectionStatus": "ACCEPTED",
        "localFqdn": "githubssh.com",
        "targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/github-svc-attachment-ssh"
      }
    ]
  },
  "pscEnabled": true,
  "state": "ACTIVE",
  "updateTime": "2024-08-31T20:53:04.824018122Z"
}

التحقّق من نقطة نهاية PSC في Cloud Console

من Cloud Console، يمكنك التحقّق من صحة اتصال PSC.

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

Looker ‏→ نسخة Looker ‏→ التفاصيل

2d4684d722d31e4b.png

db670bb008ea3fc4.png

10. اختبار الاتصال بخدمة GitHub

في الخطوات التالية، ستستخدم Looker Console لإنشاء مشروع للتحقّق من إمكانية اتصال بروتوكول SSH بخدمة GitHub.com من خلال تعديل النطاق github.com إلى githubssh.com في واجهة مستخدم Looker. لا يلزم اتخاذ هذا الإجراء إلا لعمليات الاتصال عبر بروتوكول النقل الآمن (SSH) بخدمة GitHub.

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

تفعيل وضع التطوير

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

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

70c9ded749decfbe.png

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

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

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

e8ae11e0392a776d.png

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

65a3c2573e97e1e9.png

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

dbb890960291aa84.png

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

42f5e51ce70642ad.png

ضبط Git

3962a1fe7ac8da77.png

بعد النقر على "متابعة"، سيُطلب منك التحقّق من عنوان URL للمستودع وخدمة استضافة Git.

743e5d963cfe6f82.png

أضِف مفتاح النشر إلى مستودعك على GitHub. تأكَّد من السماح بإذن الوصول للكتابة. بعد إجراء التعديلات، اختَر "اختبار" و"إنهاء الإعداد".

4894e0af6421802e.png

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

e87931dbf7e265f3.png

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

73d90adf267120af.png

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

f69bc63b9c595aa1.png

12. تَنظيم

حذف مكوّنات المختبر من محطة طرفية واحدة في Cloud Shell

gcloud compute service-attachments delete github-svc-attachment-ssh --region=$region -q

gcloud compute forwarding-rules delete producer-github-fr --region=$region -q

gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q

gcloud compute backend-services delete producer-backend-svc --region=$region -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy looker-psc-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=looker-psc-demo-policy  --name=looker-psc-demo --global-firewall-policy -q

gcloud compute network-firewall-policies delete looker-psc-demo-policy --global -q

gcloud compute routers nats delete looker-psc-demo-natgw --router=looker-psc-demo-cloud-router --router-region=$region -q

gcloud compute routers delete looker-psc-demo-cloud-router --region=$region -q

gcloud compute addresses delete internet-neg-lb-ip --region=$region -q

gcloud compute network-endpoint-groups delete github-internet-neg-ssh --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet producer-psc-nat-subnet $region-proxy-only-subnet --region=$region -q

gcloud compute networks delete looker-psc-demo -q

13. تهانينا

مبروك، لقد نجحت في ضبط إعدادات الاتصال بـ GitHub والتحقق منه باستخدام Looker Console المستندة إلى Private Service Connect.

لقد أنشأت البنية الأساسية للمنتج، وتعرّفت على كيفية إنشاء نقطة نهاية NEG للإنترنت ونقطة نهاية PSC لخدمة Producer وLooker التي تتيح الاتصال بخدمة Producer.

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

c911c127bffdee57.jpeg

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

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

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

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