استخدام Private Service Connect لنشر الخدمات واستخدامها من خلال GKE

1. مقدمة

تتيح خدمة Private Service Connect لمقدّم الخدمة تقديم الخدمات بشكل خاص لمستهلك الخدمة. توفّر خدمة Private Service Connect المزايا التالية:

  • يمكن لشبكة VPC الخاصة بمقدّم الخدمة أن تستوعب أكثر من مستهلك خدمة واحد.
  • يتصل كل مستهلك بعنوان IP داخلي يحدّده. تنفّذ Private Service Connect ترجمة عنوان الشبكة (NAT) لتوجيه الطلب إلى مقدّم الخدمة.

45b90d50690dd111.png

الشكل 2: تستخدم Private Service Connect نقاط النهاية ومرفقات الخدمة للسماح لمستهلكي الخدمة بإرسال حركة البيانات من شبكة VPC الخاصة بالمستهلك إلى الخدمات في شبكة VPC الخاصة بمقدّم الخدمة (انقر للتكبير).

ما ستتعلمه

  • مزايا Private Service Connect
  • المفاهيم الأساسية لمستهلكي الخدمات
  • المفاهيم الأساسية لمقدّمي الخدمات
  • إنشاء بيئة منتِج
  • عرض الخدمة (بيئة المنتج) من خلال ربط الخدمة
  • إنشاء بيئة مستهلك
  • إنشاء قاعدة إعادة توجيه في شبكة المستهلك
  • التحقّق من إذن وصول المستهلك
  • تفعيل ميزة التحكّم في الوصول إلى السياسات
  • استخدام قاعدة جدار حماية للخروج لحظر الوصول إلى قاعدة إعادة توجيه المستهلك

المتطلبات

  • معرفة كيفية نشر مجموعات وخدمات GKE
  • معرفة بأجهزة موازنة الحمل الداخلية
  • إمكانية إنشاء شبكات VPC في مشروعَين
  • إمكانية إنشاء مجموعة GKE

2. مزايا Private Service Connect

توفّر لك خدمة PSC مزايا عديدة مقارنةً باستخدام ميزة "نظير شبكة VPC":

تحكّم أفضل في مساحة عناوين IP الخاصة

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

تحسين الأمان والعزل

  • بصفتك مستهلكًا للخدمة، يمكنك وحدك بدء التواصل مع مقدّم الخدمة. يؤدي هذا الاتصال الأحادي الاتجاه إلى تبسيط عملية ضبط جدار الحماية بشكل كبير، كما يقلّل من خطر مرور زيارات غير مصرح بها من مقدّم الخدمة.
  • بصفتك منتج خدمة، لا تحتاج إلى تغيير قواعد جدار الحماية استنادًا إلى نطاقات الشبكات الفرعية في شبكة VPC الخاصة بالمستهلك. يمكنك ببساطة إنشاء قواعد جدار الحماية لنطاق عناوين IP الخاص بـ "ترجمة عنوان الشبكة" (NAT) الذي تم إعداده لخدمتك.

قابلية أفضل للتوسّع

  • تتيح PSC تصميمًا قابلاً للتوسيع بشكل كبير من خلال إتاحة آلاف المستهلكين، كما تسمح لموفّري الخدمات بتقديم خدمات قابلة للتوسيع بشكل كبير ومتعددة المستأجرين أو ذات مستأجر واحد.
  • بصفتك مستهلكًا للخدمة يستخدم Private Service Connect، يمكنك إنشاء الموارد حسب الحاجة في شبكتك VPC. لا يتأثر حجم هذا المقياس بعدد هذه الموارد التي تم إنشاؤها في شبكة VPC الخاصة بالمنتج.

3- المفاهيم الأساسية لمستهلكي الخدمات

يمكنك استخدام نقاط نهاية Private Service Connect لاستهلاك الخدمات التي تقع خارج شبكة السحابة الإلكترونية الخاصة الافتراضية (VPC). ينشئ مستهلكو الخدمة نقاط نهاية Private Service Connect تتصل بخدمة مستهدَفة.

نقاط النهاية

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

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

الاستهدافات

تتضمّن نقاط نهاية Private Service Connect هدفًا، وهو الخدمة التي تريد الاتصال بها:

  • حِزمة واجهات برمجة تطبيقات:
  • جميع واجهات برمجة التطبيقات: معظم واجهات برمجة التطبيقات من Google
  • VPC-SC: واجهات برمجة التطبيقات التي تتوافق مع عناصر التحكّم في خدمة سحابة VPC
  • خدمة منشورة في شبكة VPC أخرى يمكن أن تدير هذه الخدمة مؤسستك أو جهة خارجية.

الخدمة المنشورة

لربط نقطة النهاية بالخدمة التي يقدّمها منتج الخدمة، يجب أن يتوفّر لديك ملحق الخدمة الخاص بالخدمة. يكون تنسيق معرّف الموارد المنتظم لمرفق الخدمة على النحو التالي: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

4. المفاهيم الأساسية لمقدّمي الخدمات

لإتاحة خدمة للمستهلكين، عليك إنشاء شبكة فرعية واحدة أو أكثر مخصّصة لاستخدامها في ترجمة عناوين IP الخاصة بالمستهلكين (NAT). بعد ذلك، يمكنك إنشاء ملحق خدمة يشير إلى هذه الشبكات الفرعية.

الشبكات الفرعية لخدمة Private Service Connect

لعرض خدمة، على مقدّم الخدمة أولاً إنشاء شبكة فرعية واحدة أو أكثر بغرض استخدام Private Service Connect.

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

إذا كنت تريد الاحتفاظ بمعلومات عنوان IP الخاص باتصال المستهلك، يُرجى الاطّلاع على عرض معلومات اتصال المستهلك.

لا يمكن استخدام هذه الشبكات الفرعية للموارد، مثل مثيلات الأجهزة الافتراضية أو قواعد إعادة التوجيه. لا تُستخدم الشبكات الفرعية إلا لتوفير عناوين IP لترجمة عناوين الشبكة المصدرية (SNAT) لاتصالات المستهلكين الواردة.

يجب أن تحتوي الشبكة الفرعية Private Service Connect على عنوان IP واحد على الأقل لكل 63 جهازًا افتراضيًا للمستهلكين، وذلك ليتم تخصيص 1,024 مجموعة مصدر لكل جهاز افتراضي للمستهلكين لترجمة عناوين الشبكة.

الحد الأدنى لحجم الشبكة الفرعية في Private Service Connect هو /24.

مرفقات الخدمة

يعرض منتجو الخدمات خدماتهم من خلال مرفق خدمة.

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

إعدادات الاتصال المفضّلة

عند إنشاء خدمة، يمكنك اختيار طريقة إتاحتها. وثمة خياران لذلك:

  • قبول الاتصالات تلقائيًا لجميع المشاريع: يمكن لأي مستهلك خدمة إعداد نقطة نهاية والاتصال بالخدمة تلقائيًا.
  • قبول عمليات الربط للمشاريع المحدّدة: يضبط مستهلكو الخدمة نقطة نهاية للربط بالخدمة، ويقبل منتجو الخدمة طلبات الربط أو يرفضونها.

المتطلبات والقيود

  • تطبَّق القيود المفروضة على Private Service Connect.
  • يمكنك إنشاء مرفق خدمة في الإصدارات 1.21.4-gke.300 من GKE والإصدارات الأحدث.
  • لا يمكنك استخدام الشبكة الفرعية نفسها في إعدادات متعددة لربط الخدمة.
  • يجب إنشاء خدمة GKE تستخدم جهاز موازنة حمل TCP/UDP داخليًا.

5- بيئة الاختبار

تتألف شبكة المستهلك من عنوان IP ثابت يُستخدَم لإرسال الطلبات إلى مقدّم الخدمة، بالإضافة إلى target-service-attachment الذي يتم ربطه بمرفق الخدمة الخاص بمقدّم الخدمة (الخدمة المنشورة).

1ce5607c0c56d77d.jpeg

لنلقِ الآن نظرة على شبكة المنتجين. لاحظ كيف أنّ شبكة المنتجين لا تتضمّن ربطًا بشبكة المستهلكين، بل تحتوي شبكة المنتجين على مرفق خدمة (خدمة منشورة) يستخدمه المستهلك للخدمات. يتم عرض مرفق الخدمة الخاص بالمنتج من خلال موازن تحميل داخلي من الطبقة 4 (خدمة منشورة) في GKE، ما يتيح التواصل مع وحدات GKE Pod والتطبيقات المرتبطة بها.

يتم استخدام الشبكة الفرعية NAT عند إرسال طلب من شبكة VPC للمستهلك، ويتم ترجمة عنوان IP المصدر للمستهلك باستخدام ترجمة عنوان الشبكة المصدر (SNAT) إلى عنوان IP تم اختياره من إحدى الشبكات الفرعية Private Service Connect.

لا يمكن استخدام هذه الشبكات الفرعية للموارد، مثل مثيلات الأجهزة الافتراضية أو قواعد إعادة التوجيه. لا تُستخدم الشبكات الفرعية إلا لتوفير عناوين IP لترجمة عناوين الشبكة المصدرية (SNAT) لاتصالات المستهلكين الواردة.

لمزيد من المعلومات حول L4ILB لخدمة GKE Private Service Connect والوصول المباشر إلى المحتوى المستخدَم في إعداد هذا المرجع، يُرجى الاطّلاع على ما يلي.

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

بدء Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

6. قبل البدء

يتطلّب Codelab مشروعَين، على الرغم من أنّ ذلك ليس شرطًا في PSC. دوِّن المراجع التي تدعم مشروعًا واحدًا أو مشاريع متعددة.

مشروع واحد: تعديل المشروع ليتوافق مع شبكة المنتجين والمستهلكين

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

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

مشاريع متعددة: تعديل المشروع ليتوافق مع شبكة المنتجين

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

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

يُرجى ملاحظة اصطلاح رموز الألوان التالي:

f251ebb137e37136.png

7. إنشاء شبكة VPC للمنتجين

afe738fc869f0d6e.png

شبكة السحابة الخاصة الافتراضية (VPC)

من Cloud Shell

gcloud compute networks create gke-producer-l4-vpc --project=$prodproject --subnet-mode=custom 

إنشاء شبكة فرعية لمجموعة GKE

من Cloud Shell

gcloud compute networks subnets create node-subnet1 --project=$prodproject --range=192.168.10.0/24 --network=gke-producer-l4-vpc --region=us-central1 --secondary-range=pod=10.10.10.0/24,service=10.10.20.0/24 --enable-private-ip-google-access

إنشاء مجموعة GKE

من Cloud Shell

gcloud container clusters create gke-psc-l4 \
    --release-channel=rapid \
    --enable-ip-alias \
    --zone=us-central1-a \
    --network gke-producer-l4-vpc \
    --num-nodes 1 \
    --subnetwork node-subnet1 \
    --cluster-secondary-range-name pod \
    --services-secondary-range-name service

إنشاء شبكة فرعية لخدمة Private Service Connect (شبكة فرعية لترجمة عناوين الشبكة)

يجب إنشاء شبكة فرعية واحدة أو أكثر مخصّصة للاستخدام مع Private Service Connect. إذا كنت تستخدم Google Cloud Console من أجل نشر خدمة، يمكنك إنشاء الشبكات الفرعية أثناء هذا الإجراء.

للحصول على معلومات حول الشبكات الفرعية في Private Service Connect، يُرجى الاطّلاع على الشبكات الفرعية في Private Service Connect.

من Cloud Shell

gcloud beta compute networks subnets create gke-nat-subnet \
    --project $prodproject \
    --network gke-producer-l4-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

8. نشر حمل عمل وخدمات

يوضّح البيان التالي عملية نشر تشغّل صورة حاوية لتطبيق ويب نموذجي. احفظ ملف البيان باسم my-deployment.yaml من Cloud Shell

apiVersion: apps/v1
kind: Deployment
metadata:
  name: psc-ilb
spec:
  replicas: 3
  selector:
    matchLabels:
      app: psc-ilb
  template:
    metadata:
      labels:
        app: psc-ilb
    spec:
      containers:
      - name: whereami
        image: gcr.io/google-samples/whereami:v1.2.1
        ports:
          - name: http
            containerPort: 8080
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 5
          timeoutSeconds: 1

تطبيق ملف البيان على مجموعتك من Cloud Shell

kubectl apply -f my-deployment.yaml

إنشاء خدمة

يوضّح البيان التالي خدمة تنشئ جهاز موازنة حمل TCP/UDP داخليًا على منفذ TCP 8080. احفظ ملف البيان باسم my-service.yaml من Cloud Shell.

apiVersion: v1
kind: Service
metadata:
  name: gke-l4-psc
  annotations:
    networking.gke.io/load-balancer-type: "Internal"
spec:
  type: LoadBalancer
  selector:
    app: psc-ilb
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

تطبيق ملف البيان على مجموعتك من Cloud Shell

kubectl apply -f my-service.yaml

إنشاء ServiceAttachment

يوضّح ملف البيان التالي ServiceAttachment الذي يعرض الخدمة التي أنشأتها لمستهلكي الخدمة. احفظ ملف البيان باسم my-psc.yaml من Cloud Shell.

apiVersion: networking.gke.io/v1beta1
kind: ServiceAttachment
metadata:
 name: emoji-sa
 namespace: default
spec:
 connectionPreference: ACCEPT_AUTOMATIC
 natSubnets:
 - gke-nat-subnet
 proxyProtocol: false
 resourceRef:
   kind: Service
   name: gke-l4-psc

تطبيق ملف البيان على مجموعتك من Cloud Shell

kubectl apply -f my-psc.yaml

يحتوي ServiceAttachment على الحقول التالية:

  • connectionPreference: إعدادات الاتصال المفضَّلة التي تحدّد كيفية اتصال العملاء بالخدمة. يمكنك استخدام الموافقة التلقائية على المشاريع باستخدام ACCEPT_AUTOMATIC أو الموافقة الصريحة على المشاريع باستخدام ACCEPT_MANUAL. لمزيد من المعلومات، يُرجى الاطّلاع على نشر الخدمات باستخدام Private Service Connect.
  • natSubnets: قائمة بأسماء موارد الشبكات الفرعية التي سيتم استخدامها لمرفق الخدمة.
  • proxyProtocol: عند ضبط القيمة على "صحيح"، يتوفّر عنوان IP المصدر للمستهلك ومعرّف اتصال Private Service Connect في الطلبات. هذا الحقل اختياري ويتم ضبطه تلقائيًا على "خطأ" في حال عدم توفيره.
  • consumerAllowList: قائمة بمشاريع المستهلكين المسموح لها بالاتصال بـ ServiceAttachment. لا يمكن استخدام هذا الحقل إلا عندما تكون قيمة connectionPreference هي ACCEPT_MANUAL. لمزيد من المعلومات حول هذا الحقل والخيارات الأخرى، اطّلِع على نشر الخدمات باستخدام Private Service Connect.

التحقّق من هوية المنتج

عرض تفاصيل Service Attachment

يمكنك عرض تفاصيل ServiceAttachment باستخدام الأمر التالي من Cloud Shell

kubectl describe serviceattachment emoji-sa

عرض موازن التحميل الداخلي من الطبقة 4 في GKE

من Cloud Console، انتقِل إلى "خدمات الشبكة" (Network Services) → "موازنة الحمل" (Load Balancing) → "الواجهات الأمامية" (Frontends).

حدِّد عنوان IP للواجهة الأمامية الذي يتوافق مع الشبكة الفرعية للعقدة المحدّدة سابقًا 192.168.10.0/24، كما هو موضّح في لقطة الشاشة أدناه، وقد يختلف عنوان IP الخاص بك.

ed7a25ed4774977b.png

عرض الخدمة المنشورة

من وحدة تحكّم السحابة الإلكترونية، انتقِل إلى "خدمات الشبكة" (Network Services) → "خدمة Private Service Connect" (Private Service Connect) → "الخدمات المنشورة" (Published Services).

حدِّد الخدمة التي تستخدم الشبكة في الدرس التطبيقي، gke-producer-l4-vpc,، كما هو موضّح في لقطة الشاشة أدناه، علمًا بأنّ قيمتَي "الخدمة" و"الهدف" قد تختلفان

5a00836ee514b918.png

انقر على اسم الخدمة الذي ينقلك إلى الشاشة أدناه، ودوِّن تفاصيل مرفق الخدمة التي تمّت تعبئتها في "المعلومات الأساسية". لاحظ أيضًا أنّ "المشاريع المرتبطة" فارغة لأنّ المستهلك لم يسجّل بعد في الخدمة. سيظل الخياران قبول ورفض غير مفعّلين لأنّ إعدادات الاتصال المفضّلة مضبوطة على "ACCEPT_AUTOMATICALLY"، ويمكن تغيير هذا الخيار في أي وقت إلى "ACCEPT_MANUAL" من خلال تعديل ملف YAML الخاص بمرفق الخدمة (my-psc.yaml).

497f5f43920018c0.png

e246063a23771273.png

9- إنشاء شبكة VPC للمستهلكين

1f3c90f1e139e906.png

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

يتطلّب Codelab مشروعَين، على الرغم من أنّ ذلك ليس شرطًا في PSC. دوِّن المراجع التي تدعم مشروعًا واحدًا أو مشاريع متعددة.

مشروع واحد: تعديل المشروع ليتوافق مع شبكة المنتجين والمستهلكين

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

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

مشاريع متعدّدة: تعديل المشروع ليتوافق مع شبكة المستهلكين

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

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

شبكة السحابة الخاصة الافتراضية (VPC)

من Cloud Shell

gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom

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

من Cloud Shell

gcloud compute networks subnets create consumer-subnet --project=$consumerproject  --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-central1

إنشاء شبكة فرعية لمثيلات الأجهزة الافتراضية

من Cloud Shell

gcloud compute networks subnets create consumer-subnet-vm --project=$consumerproject  --range=10.0.70.0/24 --network=vpc-demo-consumer --region=us-central1

إنشاء عنوان IP ثابت للوصول إلى الخدمة المنشورة

من Cloud Shell

gcloud compute addresses create vpc-consumer-psc --region=us-central1 --subnet=consumer-subnet --addresses 10.0.60.100

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

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

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

من Cloud Shell

gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

على الرغم من أنّ إنشاء قاعدة جدار حماية للخروج ليس مطلوبًا لإنشاء PSC، يمكنك إنشاء قاعدة جدار حماية للخروج من أجل مراقبة عدد الزيارات إلى مرفق خدمة المنتجين في PSC.

gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging

10. إنشاء مثيل اختبار المستهلك 1

من Cloud Shell

gcloud compute instances create consumer-instance-1 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.10 --no-address --subnet=consumer-subnet-vm --tags=google1 --image-family=debian-10 --image-project=debian-cloud

11. إنشاء مثيل اختبار المستهلك 2

من Cloud Shell

gcloud compute instances create consumer-instance-2 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.20 --no-address --subnet=consumer-subnet-vm --tags=google2 --image-family=debian-10 --image-project=debian-cloud

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

في خطوة سابقة، نسخت سلسلة Producer Service Attachment في مكان آمن، لذا لنُدرج القيمة المخزّنة في الحقل "target-service-attachment".

7abaccc4e24f1ef7.png

من Cloud Shell

gcloud compute forwarding-rules create vpc-consumer-psc-fr --region=us-central1 --network=vpc-demo-consumer --address=vpc-consumer-psc --target-service-attachment=yoursavedproducerserviceattachment

13. التحقّق من صحة المعلومات - المستهلك

سنستخدم سجلّات CURL وجدار الحماية للتحقّق من التواصل بين المستهلك والمنتج.

ضمن مشروع المستهلك، تُستخدَم عناوين IP الثابتة لبدء التواصل مع المنتج. يتم التحقّق من صحة عملية الربط بين عنوان IP الثابت وقاعدة إعادة التوجيه الخاصة بالمستهلك من خلال تنفيذ البنية التالية.

1f3c90f1e139e906.png

من Consumer VPCs Cloud use shell، حدِّد قاعدة إعادة التوجيه وعنوان IP الثابت.

gcloud compute forwarding-rules describe vpc-consumer-psc-fr --region us-central1

الناتج أدناه، سنستخدم 10.0.60.100 للوصول إلى المنتج في خطوة لاحقة

IPAddress: 10.0.60.100
creationTimestamp: '2021-09-30T21:13:54.124-07:00'
id: '3564572805904938477'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr
network: https://www.googleapis.com/compute/v1/projects/deepakmichaelstage/global/networks/vpc-demo-consumer
networkTier: PREMIUM
pscConnectionId: '36583161500548196'
pscConnectionStatus: ACCEPTED

عرض الخدمة المرتبطة

من وحدة تحكّم السحابة الإلكترونية، انتقِل إلى "خدمات الشبكة" (Network Services) → Private Service Connect → نقاط النهاية المرتبطة (Connected Endpoints) واطّلِع على نقطة النهاية التي تم إنشاؤها حديثًا.

206bc00297aaa260.png

لنقم بتسجيل الدخول إلى consumer-instance-1 واختبار الوصول إلى الخدمة المنشورة من مقدّم الخدمة

من Cloud Shell، افتح علامة تبويب جديدة بالنقر على علامة الجمع (+).

81f3210b29faebd3.png

من 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" "consumer-instance-1" --project "$projectname"

بعد تسجيل الدخول إلى مثيل consumer-instance-1، نفِّذ طلب curl مقابل عنوان IP لقاعدة إعادة التوجيه 10.0.60.100.

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

user@consumer-instance-1:~$ curl 10.0.60.100

مثال على الناتج

user@consumer-instance-1:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodprojectid.internal",
  "pod_name": "psc-ilb-588887dfdb-w7tbr",
  "pod_name_emoji": "🤷",
  "project_id": "prodorijectid",
  "timestamp": "2021-10-01T17:43:37",
  "zone": "us-central1-a"

لنقم بتسجيل الدخول إلى consumer-instance-2 واختبار الوصول إلى الخدمة المنشورة من Producer

من Cloud Shell، افتح علامة تبويب جديدة بالنقر على علامة الجمع (+).

81f3210b29faebd3.png

من 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" "consumer-instance-2" --project "$projectname"

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

user@consumer-instance-2:~$ curl 10.0.60.100

مثال على الناتج

deepakmichael@consumer-instance-2:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodproject.internal",
  "pod_name": "psc-ilb-588887dfdb-4jdql",
  "pod_name_emoji": "🧑🏿",
  "project_id": "prodproject",
  "timestamp": "2021-10-01T17:49:51",
  "zone": "us-central1-a"

14. تسجيل جدار الحماية - التحقّق من صحة التخصيص

استخدِم "مستكشف السجلات" للتأكّد من أنّ قاعدة جدار الحماية "vpc-consumner-psc" تسجّل حركة البيانات بين مثيل الجهاز الافتراضي وعنوان IP الثابت.

  1. من Cloud Console، انتقِل إلى "تسجيل العمليات" (Identify Operations Logging) → "مستكشف السجلات" (Log Explorer).
  2. في حقل طلب البحث، عدِّل الإدخال أدناه باستخدام yourconsumerproject وانقر على "تنفيذ طلب البحث".

logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")

  1. تقدّم نتائج طلب البحث ما يلي لكل لقطة شاشة مقدَّمة

23e427b3060473.png

  1. وسِّع السجلّ (jsonPayload → Connection) وحدِّد الناتج الموضّح أدناه. دوِّن dest_ip: 10.0.60.100 هو عنوان IP الثابت لبروتوكول TCP المستخدَم للوصول إلى "خدمة المنتج"، وsrc_ip: 10.0.70.10 أو 10.0.70.20 هما عنوانا IP الخاصان بمثيل الجهاز الظاهري. مسموح بالتصرف.

2669743fd1f1cb0d.png

15. التحقّق من صحة البيانات - المنتج

afe738fc869f0d6e.png

من مشروع "الموفّرون"، تأكَّد من ربط مرفق الخدمة بنجاح. انتقِل إلى "خدمات الشبكة" (Network Services) →‏ Private Service Connect →‏ الخدمات المنشورة (Published Services).

89ded87a63888f60.png

يؤدي النقر على الخدمة إلى الكشف عن مشروع المستهلك المرتبط والحالة كما هو موضّح أدناه

15966d47423ebc5f.png

16. حظر الوصول إلى خدمة منشورة

1f3c90f1e139e906.png

حتى الآن، تأكّدنا من أنّ كلتا الآلتين الافتراضيتين يمكنهما الوصول إلى "الخدمات المنشورة". لننشئ الآن قاعدة جدار الحماية الصادر لرفض وصول consumer-instance-2 إلى "الخدمة المنشورة".

تسمح منصة Google Cloud Platform تلقائيًا بجميع عمليات الخروج، ولكنها ترفض جميع عمليات الدخول. في الخطوات التالية، سننشئ قاعدة جدار حماية استنادًا إلى علامة الشبكة "google2" المحدّدة سابقًا والتي تم استخدامها عند إنشاء consumer-instance-2 لرفض الوصول إلى "الخدمة المنشورة".

7fa2cda1dfec33a.png

افتح علامة تبويب جديدة في Cloud Shell من خلال النقر على علامة الجمع (+) ونفِّذ قاعدة جدار الحماية التالية في Cloud Shell

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

gcloud compute --project=$projectname firewall-rules create psc-endpoint-deny-egress --direction=EGRESS --priority=999 --network=vpc-demo-consumer --action=DENY --rules=all --destination-ranges=10.0.60.100/32 --target-tags=google2 --enable-logging

الآن، لنختبر ما إذا كان بإمكان consumer-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" "consumer-instance-2" --project "$projectname"

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

user@consumer-instance-2:~$ curl 10.0.60.100

مثال على الناتج

user@consumer-instance-2:~$ curl 10.0.60.100
curl: (7) Failed to connect to 10.0.60.100 port 80: Connection timed out

تسجيل جدار الحماية - تعذُّر التحقّق من الصحة

استخدِم "مستكشف السجلات" للتأكّد من أنّ قاعدة جدار الحماية "psc-endpoint-deny-egress" تسجّل حركة البيانات بين مثيل الجهاز الافتراضي وعنوان IP الثابت.

  1. من Cloud Console، انتقِل إلى "تسجيل العمليات" (Identify Operations Logging) → "مستكشف السجلات" (Log Explorer).
  2. في حقل "طلب البحث"، عدِّل الإدخال أدناه باستخدام yourconsumerproject وانقر على "تنفيذ طلب البحث".

logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:psc-endpoint-deny-egress")

  1. تقدّم نتائج طلب البحث ما يلي لكل لقطة شاشة مقدَّمة

83b4fc7348ac93cd.png

  1. وسِّع السجلّ وحدِّد الناتج المقدَّم أدناه. دوِّن dest_ip: 10.0.60.100 هو عنوان IP الثابت لبروتوكول TCP، وsrc_ip: 10.0.70.10 أو 10.0.70.20 هما عنوانا IP الخاصان بمثيل الجهاز الظاهري. حالة الطلب هي "مرفوض".

a344f75f67590655.png

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

خطوات إعادة ضبط شبكة المنتجين

afe738fc869f0d6e.png

من نافذة Cloud Shell واحدة في مشروع Producer، احذف مكوّنات المختبر

gcloud container clusters delete gke-psc-l4 --region us-central1-a --quiet

gcloud compute networks subnets delete gke-nat-subnet --region=us-central1 --quiet

gcloud compute networks subnets delete node-subnet1 --region=us-central1 --quiet

gcloud compute networks delete gke-producer-l4-vpc --quiet

1f3c90f1e139e906.png

خطوات إعادة ضبط شبكة المستهلك

حذف مكونات المختبر من سحابة واحدة في وحدة طرفية لمشروع المستهلك

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

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

gcloud compute forwarding-rules delete vpc-consumer-psc-fr --region=us-central1 --quiet

gcloud compute addresses delete vpc-consumer-psc --region=us-central1 --quiet

gcloud compute firewall-rules delete psclab-iap-consumer --quiet

gcloud compute networks subnets delete consumer-subnet --region=us-central1 --quiet

gcloud compute networks subnets delete consumer-subnet-vm --region=us-central1 --quiet

gcloud compute firewall-rules delete vpc-consumer-psc --quiet

gcloud compute firewall-rules delete psc-endpoint-deny-egress --quiet

gcloud compute networks delete vpc-demo-consumer --quiet

18 تهانينا!

تهانينا على إكمال هذا الدرس العملي.

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

  • مزايا Private Service Connect
  • المفاهيم الأساسية لمستهلكي الخدمات
  • المفاهيم الأساسية لمقدّمي الخدمات
  • إنشاء بيئة منتِج
  • عرض الخدمة (بيئة المنتج) من خلال ربط الخدمة
  • إنشاء بيئة مستهلك
  • إنشاء قاعدة إعادة توجيه في شبكة المستهلك
  • التحقّق من إذن وصول المستهلك
  • تفعيل ميزة التحكّم في الوصول إلى السياسات
  • استخدام قاعدة جدار حماية للخروج لحظر الوصول إلى قاعدة إعادة توجيه المستهلك