Private Service Connect for Google APIs

1. مقدمة

باستخدام Private Service Connect، يمكنك إنشاء نقاط نهاية خاصة باستخدام عناوين IP داخلية عالمية ضِمن شبكة السحابة الافتراضية الخاصة (VPC) للوصول إلى واجهات Google APIs. يمكنك تعيين أسماء نظام أسماء النطاقات لعناوين IP الداخلية هذه بأسماء ذات معنى، مثل storage-pscendpoint.p.googleapis.com وbigtable-adsteam.p.googleapis.com. وبدلاً من إرسال طلبات واجهة برمجة التطبيقات إلى نقاط نهاية الخدمة العامة، مثل storage.googleapis.com، يمكنك إرسال الطلبات إلى نقطة نهاية Private Service Connect، وهي نقطة خاصة وداخلية في شبكة السحابة الخاصة الافتراضية (VPC).

تكون هذه الأسماء وعناوين IP داخل شبكة السحابة الخاصة الافتراضية وأي شبكات داخلية مرتبطة بها باستخدام أنفاق Cloud VPN أو مرفقات Cloud Interconnect (شبكات VLAN).

يمكنك التحكّم في حركة البيانات التي تنتقل إلى نقطة النهاية، ويمكنك إثبات أنّ حركة البيانات تبقى ضمن Google Cloud.

ما ستتعلمه

  • حالات استخدام Private Service Connect
  • متطلبات الشبكة
  • واجهات برمجة التطبيقات المتوافقة
  • إنشاء نقطة نهاية Private Service Connect
  • إنشاء حزمة تخزين في السحابة الإلكترونية
  • إنشاء مناطق خاصة في Cloud DNS وتعديلها
  • إنشاء NAT GW للوصول إلى googleapis العامة
  • إنشاء ملف إعداد BOTO وتعديله
  • تنفيذ gsutil list على الجهاز الظاهري 1 الذي تمّت تسويته مقابل نقطة نهاية خدمة PSC
  • تنفيذ gsutil list على VM2 الذي تمّت تسويته مقابل googleapis.com العام
  • استخدام Tcpdump للتحقّق من التحويل باستخدام نظام أسماء النطاقات

المتطلبات

  • معرفة نظام أسماء النطاقات أو محرِّر النصوص nano أو vi

2. حالات استخدام Private Service Connect

يمكنك إنشاء نقاط نهاية متعدّدة لخدمة Private Service Connect في شبكة السحابة الإلكترونية الخاصة الافتراضية (VPC) نفسها. ما مِن حدّ أقصى لعرض النطاق لنقطة نهاية معيّنة. بما أنّ نقاط نهاية Private Service Connect تستخدم عناوين IP داخلية عالمية، يمكن لأي مورد في شبكة VPC استخدامها.

باستخدام نقاط نهاية متعددة، يمكنك تحديد مسارات شبكة مختلفة باستخدام Cloud Router وقواعد جدار الحماية.

  • يمكنك إنشاء قواعد جدار الحماية لمنع بعض الأجهزة الافتراضية من الوصول إلى Google APIs من خلال نقطة نهاية Private Service Connect، مع السماح لأجهزة افتراضية أخرى بالوصول إليها.
  • يمكنك تطبيق قاعدة جدار حماية على مثيل جهاز افتراضي تحظر جميع الزيارات إلى الإنترنت، ولكن الزيارات المُرسَلة إلى نقاط نهاية Private Service Connect ستصل إلى Google.
  • إذا كانت لديك مضيفات محلية متصلة بشبكة VPC باستخدام نفق Cloud VPN أو مرفق Cloud Interconnect (شبكة VLAN)، يمكنك إرسال بعض الطلبات من خلال النفق أو شبكة VLAN مع إرسال طلبات أخرى عبر الإنترنت العام. يتيح لك هذا الإعداد تجاوز النفق أو الشبكة المحلية الظاهرية (VLAN) للخدمات غير المتوافقة مع Private Google Access، مثل "كتب Google". لإنشاء هذا الإعداد، عليك إنشاء نقطة نهاية Private Service Connect، والإعلان عن عناوين IP لنقطة نهاية Private Service Connect باستخدام إعلانات المسارات المخصّصة في Cloud Router، وتفعيل سياسة إعادة التوجيه الواردة في Cloud DNS. يمكن للتطبيق إرسال بعض الطلبات من خلال نفق Cloud VPN أو مرفق Cloud Interconnect (شبكة VLAN) باستخدام اسم نقطة نهاية Private Service Connect، وإرسال طلبات أخرى عبر الإنترنت باستخدام اسم نظام أسماء النطاقات التلقائي.
  • إذا ربطت شبكتك المحلية بشبكة VPC باستخدام عدة مرفقات Cloud Interconnect (شبكات VLAN)، يمكنك إرسال بعض حركة البيانات من الشبكة المحلية عبر شبكة VLAN واحدة وبقية البيانات عبر شبكات أخرى، كما هو موضّح في الشكل 2. يتيح لك ذلك استخدام شبكة المنطقة الواسعة الخاصة بك بدلاً من شبكة Google، والتحكّم في نقل البيانات لاستيفاء المتطلبات الجغرافية. لإنشاء هذا الإعداد، أنشئ نقطتَي نهاية Private Service Connect. أنشئ إعلانًا مخصّصًا عن المسار لنقطة النهاية الأولى في جلسة BGP الخاصة بجهاز Cloud Router الذي يدير شبكة VLAN الأولى، وأنشئ إعلانًا مخصّصًا مختلفًا عن المسار لنقطة النهاية الثانية في جلسة BGP الخاصة بجهاز Cloud Router الذي يدير شبكة VLAN الثانية. ترسل المضيفات المحلية التي تم ضبطها لاستخدام اسم نقطة نهاية Private Service Connect الزيارات عبر مرفق Cloud Interconnect المقابل (شبكة VLAN).
  • يمكنك أيضًا استخدام عدة مرفقات Cloud Interconnect (شبكات VLAN) في بنية نشطة/نشطة. إذا كنت تعلن عن عنوان IP نفسه لنقطة نهاية Private Service Connect باستخدام إعلانات المسارات المخصّصة لجلسات BGP على أجهزة Cloud Router التي تدير شبكات VLAN، يتم توجيه الحِزم المُرسَلة من الأنظمة المحلية إلى نقاط النهاية عبر شبكات VLAN باستخدام ECMP.

5e142c2fbf6f010e.png

الشكل 1: من خلال ضبط Private Service Connect وCloud Router والمضيفين المحليين، يمكنك التحكّم في المرفق (شبكة VLAN) الذي يتم استخدامه في Cloud Interconnect لإرسال الزيارات إلى Google APIs.

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

لاستخدام Private Service Connect، يجب أن تحتوي مثيلات الأجهزة الافتراضية (VM) التي لا تتضمّن عناوين IP خارجية على واجهتها الأساسية في شبكة فرعية تم تفعيل ميزة "الوصول الخاص إلى Google" فيها.

يمكن لجهاز افتراضي مزوّد بعنوان IP خارجي الوصول إلى واجهات Google APIs وخدماتها باستخدام نقاط نهاية Private Service Connect، سواء كانت ميزة "الوصول الخاص إلى Google" مفعّلة لشبكته الفرعية أم لا. يبقى الاتصال بنقطة نهاية Private Service Connect ضِمن شبكة Google.

لا يمكن الوصول إلى نقاط نهاية Private Service Connect من شبكات VPC المتصلة.

واجهات برمجة التطبيقات المتوافقة

عند إنشاء نقطة نهاية Private Service Connect، يمكنك اختيار حزمة واجهات برمجة التطبيقات التي تحتاج إلى الوصول إليها: all-apis أو vpc-sc.

تتيح حِزم واجهات برمجة التطبيقات الوصول إلى واجهات برمجة التطبيقات نفسها المتوفّرة من خلال عناوين IP الخاصة ببرنامج الوصول الخاص إلى Google.

  • تتيح حزمة جميع واجهات برمجة التطبيقات الوصول إلى واجهات برمجة التطبيقات نفسها التي يتيحها النطاق private.googleapis.com.
  • تتيح حزمة vpc-sc الوصول إلى واجهات برمجة التطبيقات نفسها التي تتيحها restricted.googleapis.com.

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

2ac275eb86f26338.png

الشكل 1 - بنية الدرس التطبيقي حول الترميز

حالة استخدام الدرس التطبيقي حول الترميز -

يحتاج عميلنا إلى مزيج من الوصول الخاص (الربط البيني) والعام إلى googleapis لنقل بيانات التخزين السحابي. لتلبية متطلبات عملائنا، سننفّذ Private Service Connect الذي يتألف من عنوان فريد /32، وإعدادات BOTO، وتعديلات على سجلّ نظام أسماء النطاقات. ستستخدم الآلة الافتراضية 1 خدمة Private Service Connect للوصول إلى حزمة التخزين السحابي، بينما ستستخدم الآلة الافتراضية 2 نطاقات IP العامة googleapis.com من خلال NAT GW.

يتم نشر جميع جوانب المختبر ضمن Google Cloud Platform، ولكن يمكن تطبيق حالة الاستخدام نفسها على عملية نشر السحابة المختلطة التي تتطلّب فصل الزيارات.

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

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

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

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

تذكَّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (الاسم أعلاه مستخدَم حاليًا ولن يكون متاحًا لك، نأسف لذلك). سيتم الإشارة إليه لاحقًا في هذا الدرس التطبيقي حول الترميز باسم PROJECT_ID.

  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد Google Cloud.

لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن وُجدت تكلفة على الإطلاق. احرص على اتّباع أي تعليمات في قسم "التنظيف" الذي ينصحك بكيفية إيقاف الموارد حتى لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا دائمًا بسعة 5 غيغابايت، وتعمل على Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إكمال جميع المهام في هذا التمرين المعملي باستخدام متصفّح فقط.

6. قبل البدء

تفعيل واجهات برمجة التطبيقات

داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

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

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com

7. إنشاء شبكة VPC

شبكة VPC

من Cloud Shell

gcloud compute networks create psc-lab --subnet-mode custom

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

من Cloud Shell

gcloud compute networks subnets create psclab-subnet \
--network psc-lab --range 10.0.0.0/24 --region us-central1 --enable-private-ip-google-access

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

للسماح لميزة "الوصول إلى الأجهزة الافتراضية عبر الإنترنت" بالاتصال بأجهزة VM، أنشئ قاعدة جدار حماية تتضمّن ما يلي:

  • ينطبق على جميع مثيلات الأجهزة الافتراضية التي تريد إتاحتها باستخدام IAP.
  • يسمح هذا الخيار بزيارات الدخول من نطاق عناوين IP ‏35.235.240.0/20. يحتوي هذا النطاق على جميع عناوين IP التي تستخدمها خدمة IAP لإعادة توجيه بروتوكول TCP.

من Cloud Shell

gcloud compute firewall-rules create psclab-ssh \
    --network psc-lab --allow tcp:22 --source-ranges=35.235.240.0/20

إنشاء مثيل Cloud NAT

إنشاء Cloud Router

من Cloud Shell

gcloud compute routers create crnat \
    --network psc-lab \
    --asn 65000 \
    --region us-central1

إنشاء Cloud NAT

من Cloud Shell

gcloud compute routers nats create cloudnat \
    --router=crnat \
    --auto-allocate-nat-external-ips \
    --nat-all-subnet-ip-ranges \
    --enable-logging \
    --region us-central1

8. إنشاء نقطة نهاية Private Service Connect

عند ضبط عنوان IP لنقطة نهاية Private Service Connect <pscendpointip>، عليك تقديم عنوان IP فريد غير محدّد في شبكة VPC.

من Cloud Shell

gcloud compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=192.168.255.250 \
    --network=psc-lab

تخزين "pscendpointip" لمدة الميزة الاختبارية

pscendpointip=$(gcloud compute addresses list --filter=name:psc-ip --format="value(address)")

echo $pscendpointip

أنشئ قاعدة إعادة توجيه لربط نقطة النهاية بخدمات وواجهات Google APIs.

من Cloud Shell

gcloud compute forwarding-rules create pscendpoint \
    --global \
    --network=psc-lab \
    --address=psc-ip \
    --target-google-apis-bundle=all-apis

عرض نقاط نهاية Private Service Connect التي تم ضبطها

من Cloud Shell

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

وصف نقاط نهاية Private Service Connect التي تم ضبطها

من Cloud Shell

gcloud compute forwarding-rules describe \
    pscendpoint --global

9. إنشاء حزمة

أنشئ حزمة Cloud Storage واستبدِل BUCKET_NAME بالاسم الفريد الذي تفضّله على مستوى العالم.

من Cloud Shell

gsutil mb  -l us-central1 -b on gs://BUCKET_NAME

تخزين BUCKET_NAME طوال مدة التمرين

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

10. إعدادات نظام أسماء النطاقات

عند إنشاء نقطة نهاية Private Service Connect، تنشئ خدمة Service Directory سجلّ نظام أسماء نطاقات لواجهات برمجة التطبيقات والخدمات التي يتم توفيرها باستخدام نقطة النهاية هذه.

تشير سجلّات نظام أسماء النطاقات إلى عنوان IP لنقطة نهاية Private Service Connect، وتكون بالتنسيق التالي: SERVICE-ENDPOINT.p.googleapis.com.

يمكنك استخدام أسماء نظام أسماء النطاقات هذه في طلبات واجهة برمجة التطبيقات لتوجيه الطلب إلى نقطة نهاية Private Service Connect. يمكنك أيضًا استخدام أسماء نظام أسماء النطاقات هذه في عنوان المضيف الخاص بطلبك.

إذا كنت تريد استخدام نقطة نهاية Private Service Connect مع عميل أو تطبيق يصل إلى واجهات Google APIs وخدماتها، عدِّل العميل أو التطبيق لاستخدام أسماء نظام أسماء النطاقات p.googleapis.com.

للحصول على التفاصيل، يُرجى الاطّلاع على مستندات العميل أو مكتبة العميل. على سبيل المثال:

  • Python: يمكنك ضبط api_endpoint في فئة خيارات العميل في حزمة google-api-core.
  • انتقِل إلى: يمكنك ضبط WithEndpoint في حزمة خيارات العميل في حزمة واجهة برمجة التطبيقات.
  • gcloud: You can configure api_endpoint_overrides using this command. gcloud config set api_endpoint_overrides/SERVICE ENDPOINT_URL

على سبيل المثال: gcloud config set api_endpoint_overrides/storage https://storage-xyz.p.googleapis.com/storage/v1/

إذا تعذّر عليك ضبط العميل أو التطبيق لاستخدام نقطة نهاية مختلفة، أنشِئ سجلّات نظام أسماء نطاقات لتتطابق مع أسماء نظام أسماء النطاقات التلقائية. على سبيل المثال، storage.googleapis.com. يمكنك الاطّلاع على إنشاء سجلّات نظام أسماء النطاقات باستخدام أسماء نظام أسماء النطاقات التلقائية.

التحقّق من صحة سجلّ نظام أسماء النطاقات

من وحدة تحكّم السحابة الإلكترونية، تحقّق من إدخال نظام أسماء النطاقات الذي تم إنشاؤه والموجود ضمن "خدمات الشبكة" → "Cloud DNS". دوِّن اسم نظام أسماء النطاقات الذي تم إنشاؤه "p.googleapis.com".

11. إنشاء أجهزة افتراضية

إنشاء جهاز افتراضي (psc-instance-1) يُستخدَم للتحقّق من صحة Private Service Connect

من Cloud Shell

  gcloud compute instances create psc-instance-1 \
    --subnet psclab-subnet \
    --zone us-central1-a \
    --image=centos-7-v20210122 \
    --image-project=centos-cloud \
    --no-address \
    --metadata=startup-script=yum\ install\ tcpdump\ -y$'\n'yum\ install\ bind-utils\ -y$'\n'yum\ install\ nano\ -y 

سجِّل الدخول إلى الآلة الافتراضية (psc-instance-1).

استخدام بروتوكول النقل الآمن (SSH) في الجهاز الظاهري من خلال Cloud Shell

gcloud compute ssh --zone "us-central1-a" "psc-instance-1" --project "$projectname"

أنشئ نوافذ طرفية إضافية في Cloud Shell من خلال النقر على علامة الجمع (لقطة الشاشة أدناه) ثلاث مرات.

69ea94e1527912bb.png

إنشاء جهاز افتراضي (psc-instance-2) يُستخدَم للتحقّق من صحة Googleapis العامة

من علامة التبويب 2

  gcloud compute instances create psc-instance-2 \
    --subnet psclab-subnet \
    --zone us-central1-a \
    --image=centos-7-v20210122 \
    --image-project=centos-cloud \
    --no-address \
    --metadata=startup-script=yum\ install\ tcpdump\ -y$'\n'yum\ install\ bind-utils\ -y$'\n'yum\ install\ nano\ -y 

من علامة التبويب 2، يمكنك استخدام بروتوكول النقل الآمن (SSH) في الجهاز الافتراضي من خلال Cloud Shell.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname


gcloud compute ssh --zone "us-central1-a" "psc-instance-2" --project "$projectname"

من علامة التبويب 3، يمكنك استخدام بروتوكول SSH للوصول إلى psc-instance-1 من خلال Cloud Shell.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname


gcloud compute ssh --zone "us-central1-a" "psc-instance-1" --project "$projectname"

من علامة التبويب 4، انتقِل إلى psc-instance-2 عبر Cloud Shell باستخدام بروتوكول النقل الآمن (SSH).

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname


gcloud compute ssh --zone "us-central1-a" "psc-instance-2" --project "$projectname"

12. التحقّق من سلوك Gsutil الحالي

من علامة التبويب 4 (psc-instance-2)، ابدأ tcpdump وراقِب حركة بيانات نظام أسماء النطاقات.

sudo tcpdump -vv -i eth0 port 53

فحص عملية بحث نظام أسماء النطاقات لحزمة التخزين من علامة التبويب 2 (psc-instance-2)

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME
gsutil -D ls gs://$BUCKET_NAME

فحص تصحيح أخطاء gsutil، ويتم استخدام HOST storage.googleapis.com للتحويل باستخدام نظام أسماء النطاقات (DNS)

<snip>
send: 'GET /storage/v1/b/$BUCKET_NAME/o?delimiter=%2F&projection=noAcl&versions=False&fields=prefixes%2CnextPageToken%2Citems%2Fname&alt=json&maxResults=1000 HTTP/1.1\r\nHost: storage.googleapis.com\r\ncontent-length: 0\r\nauthorization: Bearer ya29.c.KpkB7wfaMjfc_WXEKCeNF4Md0fEHnfDU7tqBf3cd0u43yEmYXqj8fX_X5wWdNdDVH6k1EkjeAeIJDzKGvyjPOkf1Io2kVeUqYX69sDv53huW1NslffjAHKchbZ0CP3Cg83TS3Pa55jLcuE0TLbYycVrgSbD3H90LaapUGbWD3kj4IsJLf9J8R98Bqobu8HZwwqk92hlZ4zVzRqOM\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: apitools Python/2.7.5 gsutil/4.57 (linux2) analytics/disabled interactive/True command/ls google-cloud-sdk/324.0.0\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
<snip>

من علامة التبويب 4 (psc-instance-2)، تأكَّد من استخدام سجلّات A لنظام أسماء النطاقات العام في GoogleAPI.com عند الوصول إلى حزمة التخزين.

metadata.google.internal.domain > psc-instance-2.c.yourprojectname.internal.33973: [udp sum ok] 36442 q: A? storage.googleapis.com. 11/0/0 storage.googleapis.com. A 108.177.111.128, storage.googleapis.com. A 142.250.128.128, storage.googleapis.com. A 74.125.70.128, storage.googleapis.com. A 74.125.201.128, storage.googleapis.com. A 64.233.183.128, storage.googleapis.com. A 173.194.198.128, storage.googleapis.com. A 172.217.219.128, storage.googleapis.com. A 142.250.136.128, storage.googleapis.com. A 209.85.234.128, storage.googleapis.com. A 172.217.212.128, storage.googleapis.com. A 172.217.214.128

13. تعديل سلوك Gsutil

تذكَّر أنّك أنشأت في خطوة سابقة منطقة نظام أسماء نطاقات خاصًا وسجلاً من النوع A تم ربطه بعنوان IP لنقطة نهاية Private Service Connect. في الخطوة التالية، سنتحكّم في طريقة عمل gsutil من خلال تعديل ملف BOTO الخاص بالجهاز الافتراضي على psc-instance-1.

عرض إعدادات BOTO التلقائية من نافذة الجهاز الافتراضي (VM) من علامة التبويب 1 (psc-instance-1)

[psc-instance ~]$ more  /etc/boto.cfg

الناتج (سيختلف project_id)

[GSUtil]
default_project_id  = [your project number]
default_api_version = 2

[GoogleCompute]
service_account = default

عدِّل إعدادات BOTO باستخدام nano أو VI Editor، واحرص على نسخ جميع الإدخالات ولصقها.

مثال: sudo nano /etc/boto.cfg

أو

مثال: sudo vi /etc/boto.cfg

من علامة التبويب 1(psc-instance-1) في نافذة الجهاز الافتراضي

[Credentials]
gs_host = storage-pscendpoint.p.googleapis.com
gs_host_header = storage.googleapis.com
gs_json_host = storage-pscendpoint.p.googleapis.com
gs_json_host_header = www.googleapis.com

التحقّق من صحة الإعدادات، وترتيب [بيانات الاعتماد] مهم جدًا للبحث في نظام أسماء النطاقات

more /etc/boto.cfg
[Credentials]
gs_host = storage-pscendpoint.p.googleapis.com
gs_host_header = storage.googleapis.com
gs_json_host = storage-pscendpoint.p.googleapis.com
gs_json_host_header = www.googleapis.com

[GSUtil]
default_project_id  = [your project number
default_api_version = 2

[GoogleCompute]
service_account = default

14. التحقّق من سلوك البحث المعدَّل في gsutil

من علامة التبويب 3 (psc-instance-1)، ابدأ tcpdump وراقِب حركة بيانات نظام أسماء النطاقات.

sudo tcpdump -vv -i eth0 port 53

فحص عملية البحث عن gsutil في حزمة التخزين من علامة التبويب 1 (psc-instance-1)

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

gsutil -D ls gs://$BUCKET_NAME

تؤكّد سجلّات تصحيح الأخطاء إمكانية الوصول إلى حزمة التخزين من خلال نقطة نهاية Private Service Connect‏ "pscendpoint".

إخراج:

<snip>
INFO 0131 22:14:18.795986 base_api.py] Making http GET to https://storage-pscendpoint.p.googleapis.com/storage/v1/b/$BUCKET_NAME/o?delimiter=%2F&projection=noAcl&versions=False&fields=prefixes%2CnextPageToken%2Citems%2Fname&alt=json&maxResults=1000
INFO 0131 22:14:18.796415 base_api.py] Headers: {u'Host': 'www.googleapis.com',
 'accept': 'application/json',
 'accept-encoding': 'gzip, deflate',
 'content-length': '0',
 'user-agent': 'apitools Python/2.7.5 gsutil/4.57 (linux2) analytics/disabled interactive/True command/ls google-cloud-sdk/324.0.0'}
INFO 0131 22:14:18.796502 base_api.py] Body: (none)
connect: (storage-pscendpoint.p.googleapis.com, 443)
send: 'GET /storage/v1/b/psc-bucket/o?delimiter=%2F&projection=noAcl&versions=False&fields=prefixes%2CnextPageToken%2Citems%2Fname&alt=json&maxResults=1000 HTTP/1.1\r\ncontent-length: 0\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: apitools Python/2.7.5 gsutil/4.57 (linux2) analytics/disabled interactive/True command/ls google-cloud-sdk/324.0.0\r\nhost: www.googleapis.com\r\nauthorization: Bearer ya29.c.KpkB7wd3XWiYeRyTuth5_HPlNV-hPwc2Nn7RSIeMpzrpa_j4EsMPl2m_mDGKAcGHvYIgiC5bT2UVQirAPpSbbpToa6G6lkaBbH5SZwHwgNXYfisp5Ww1UjXe4rTa69a_Wp0WesafcwPNnYzDo3xf5VGh3iGhySA04kTXuyT--MgOU8U-XLII2LJQxUWlV8KEdrvyCuqRb-jsDdk_\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
<snip>

من علامة التبويب 3 (psc-instance-1)، تأكَّد من أنّ عنوان IP لنقطة نهاية PSC هو سجلّ نظام أسماء النطاقات A المستخدَم عند محاولة الوصول إلى حزمة التخزين.

@psc-instance-1 ~]$ sudo tcpdump -vv -i eth0 port 53
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
05:02:33.936256 IP (tos 0x0, ttl 64, id 55416, offset 0, flags [DF], proto UDP (17), length 82)
    psc-instance-1.c.yourprojectname.internal.42296 > metadata.google.internal.domain: [bad udp cksum 0x5e4e -> 0xcceb!] 34796+ A? storage-pscendpoint.p.googleapis.com. (54)
05:02:33.936269 IP (tos 0x0, ttl 64, id 55417, offset 0, flags [DF], proto UDP (17), length 82)
    psc-instance-1.c.yourprojectname.internal.42296 > metadata.google.internal.domain: [bad udp cksum 0x5e4e -> 0x3ebd!] 5632+ AAAA? storage-pscendpoint.p.googleapis.com. (54)
05:02:33.944018 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 98)
    metadata.google.internal.domain > psc-instance-1.c.yourprojectname.42296: [udp sum ok] 34796 q: A? storage-pscendpoint.p.googleapis.com. 1/0/0 storage-pscendpoint.p.googleapis.com. A 10.10.110.10 (70)
05:02:33.946005 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 175)

التأكّد من أنّه يتم الآن استخدام عنوان IP لنقطة نهاية Private Service Connect في التحويل باستخدام نظام أسماء النطاقات (DNS)

من علامة التبويب 1

nslookup storage-pscendpoint.p.googleapis.com

الناتج

@psc-instance ~]$ nslookup storage-pscendpoint.p.googleapis.com
Server:         169.254.169.254
Address:        169.254.169.254#53

Non-authoritative answer:
Name:   storage-pscendpoint.p.googleapis.com
Address: <pscip>

15. خطوات التنظيف

الخروج من مثيل الجهاز الافتراضي (جميع علامات التبويب)

exit

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

gcloud compute routers nats delete cloudnat --router=crnat --region=us-central1 --quiet

gcloud compute routers delete crnat --region=us-central1 --quiet

gcloud compute forwarding-rules delete pscendpoint --global --quiet

gcloud compute addresses delete psc-ip --global --quiet

gsutil rm -r gs://$BUCKET_NAME

gcloud compute instances delete psc-instance-1 --zone=us-central1-a --quiet

gcloud compute instances delete psc-instance-2 --zone=us-central1-a --quiet

gcloud compute firewall-rules delete psclab-ssh --quiet

gcloud compute networks subnets delete psclab-subnet --region us-central1 --quiet

gcloud compute networks delete psc-lab --quiet

من Console، تأكَّد من أنّك تعرض المشروع الصحيح، ثمّ اختَر "خدمات الشبكات" (Networking Services) → "خدمة Cloud DNS" (Cloud DNS).

16. تهانينا!

تهانينا على إكمال درس البرمجة.

المواضيع التي تناولناها

  • حالات استخدام Private Service Connect
  • متطلبات الشبكة
  • واجهات برمجة التطبيقات المتوافقة
  • تم إنشاء نقطة نهاية Private Service Connect
  • تم إنشاء حزمة تخزين في السحابة الإلكترونية
  • تعديل ملف إعداد BOTO
  • تم إنشاء NAT GW
  • تنفيذ gsutil list على الجهاز الظاهري VM1 الذي يتم حله مقابل نقطة نهاية خدمة PSC
  • تنفيذ gsutil list على الجهاز VM2 الذي يتم تحليله مقابل googleapis.com العام
  • استخدام Tcpdump للتحقّق من التحويل باستخدام نظام أسماء النطاقات