Private Service Connect for Google APIs

1. مقدمة

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

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

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

المعلومات التي ستطّلع عليها

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

المتطلبات

  • معرفة بمحرر DNS أو nano أو vi

2. حالات الاستخدام الخاصة بربط الخدمة الخاصة

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

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

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

5e142c2fbf6f010e.png

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

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

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

يمكن للجهاز الافتراضي الذي لديه عنوان IP خارجي الوصول إلى واجهات Google APIs وخدماتها باستخدام نقاط نهاية Private Service Connect سواء تم تفعيل Private Google Access للشبكة الفرعية أم لا. يظل الاتصال بنقطة نهاية 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 PSC للوصول إلى حزمة التخزين على السحابة الإلكترونية. في المقابل، سيستخدم VM2 نطاقات IP العامة googleapis.com عبر GW NAT.

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

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

إعداد بيئة ذاتية

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

MrEseyJH4tg9PuS3GzJa72onCqawwQiRm04c0YjnpR6WD3IciP1ICDh5e5RoxrG3tc5y44_Ynn9GB0Igjo3sTE0BlsAnCxJdhXn7egP3tX4rkzkub7ZCjOKc70kJvl07REnmPb3TGg

HgKQ1sLCGDGbz0e3RCc-FNa3fQliCtq67H-Oj9jzzYn_upkmNN1lOMQrQm8Jdvo6EEYAvSwDEjpH37bIG9ouBJcmS_xFYV1IHJoyAhsasS1SfYtZkO-RBwWPXRrr3Zt4r31ETcjJeQ

KHAY2ncSMFGZ2vGxcMEcNoIy_cuWGCaWAsrH0KsOVwkV5e93Ypfcq3sQ_HPIrV-NSocegQN2PnRUku_CVi1MM89O6qHIU6E32ZypJPxojkbRTJXET5JvtskIXgzFMk18-4NnNjzCJA

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

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

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

بدء Cloud Shell

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

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

yEqEFRN4OGfeGJEfJplSt5sGY95BluU78i3Lk0Opo9caOYfrWUPBi_RglIfo9x078tH5Z_Obgq1wOhrEPV8k5OvMgI5e3aam1a7teXuimwTy-evcupc34_UEMmfAFkV-hnXwl559rg

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

BxRCLVCDNXX4OxwHppzaY9ghvuFTsgsozreyEHvRK9GPfsh3sW-kdwev6_gZdkX5FWPvb7M_Vp4FoyjFWwZxBMK6CLXiPwJgFbhz8Tgec-tyQR7GEdNjGMBca052yM8ga0UqzdHAmw

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

الناتج

Created
NAME     SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
psc-lab  CUSTOM       REGIONAL

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

من 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

الناتج

Created
NAME             REGION       NETWORK  RANGE
psclab-subnet  us-central1  psc-lab  10.0.0.0/24

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

من Cloud Shell

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

الناتج

NAME        NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
psclab-ssh  psc-lab  INGRESS    1000      tcp:22        False

إنشاء مثيل 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 beta compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=<pscendpointip> \
    --network=psc-lab

تخزين "pscendpointip" طوال مدة التمرين المعملي

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

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

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

من Cloud Shell

gcloud beta 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. إعداد نظام أسماء النطاقات

لنفرض أنّ لديك تطبيقًا يستخدم Google Cloud Storage. بدون توفّر Private Service Connect، قد يتم ربط التطبيقات بالموقع الإلكتروني "storage.googleapis.com" والذي يتم ربطه تلقائيًا ببعض العناوين العامة. من خلال Private Service Connect، يمكنك إنشاء واستخدام أسماء، مثل "storage-psclab.p.googleapis.com". ويكون الاسم والعناوين خاصًا بشبكة VPC وأي شبكات متصلة داخل الشركة.

يتبع Private Service Connect لنظام أسماء النطاقات اصطلاح التسمية، SERVICE-ENDPOINT.p.googleapis.com. في المثال الوارد أعلاه، "storage" يمثل SERVICE & "psclab" هي نقطة النهاية. من الضروري تضمين علامة "-" بين SERVICE و ENDPOINT.

للوصول إلى نقطة نهاية Cloud Storage باستخدام Private Service Connect، أنشئ سجلّ نظام أسماء النطاقات (A) على Storage-psclab.p.googleapis.com يشير إلى عنوان IP لنقطة النهاية في Private Service Connect.

إنشاء منطقة خاصة لنظام أسماء النطاقات

gcloud dns --project=$projectname managed-zones create psc-dns-zone --description="" --dns-name="p.googleapis.com." --visibility="private" --networks="psc-lab"

إنشاء سجلّ DNS A

gcloud dns --project=$projectname record-sets transaction start --zone=psc-dns-zone

gcloud dns --project=$projectname record-sets transaction add $pscendpointip --name=storage-pscendpoint.p.googleapis.com. --ttl=300 --type=A --zone=psc-dns-zone

gcloud dns --project=$projectname record-sets transaction execute --zone=psc-dns-zone

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

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

من 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) إلى الجهاز الافتراضي (VM) من خلال Cloud Shell

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

أنشئ محطات دفع إضافية في Cloud Shell بالنقر على + (لقطة شاشة أدناه) ثلاث مرات.

69ea94e1527912bb.png

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

من علامة التبويب 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) إلى الجهاز الافتراضي (VM) من خلال 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 Shell SSH إلى psc-instance-2 عبر 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"

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 لنقطة نهاية PSC. في الخطوة التالية، سنتحكّم الآن في طريقة عمل أداة gsutil من خلال تعديل ملف BOTO للأجهزة الافتراضية على psc-instance-1.

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

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

الإخراج (سيختلف project_id)

[GSUtil]
default_project_id  = 234086459238
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) الطرفية لمثيل الجهاز الافتراضي (VM)

[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

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

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  = 234086459238
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 beta compute forwarding-rules delete pscendpoint --global --quiet

gcloud beta 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.

d0ed4bd585006e45.png

تحديد انقر على "psc-dns-zone"

903532e68a262111.png

اختيار مجموعة السجلّات "storage-pscendpoint.p.googleapis.com" ثم انقر على "حذف مجموعات السجلَّات"

e89394b43ddb5ce2.png

انقر على "حذف منطقة" لإكمال تنظيف التمرين المعملي

b2a612d7b3a80030.png

16. تهانينا!

تهانينا على إكمال الدرس التطبيقي حول الترميز.

النقاط التي تناولناها

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