1. مقدمة
تتيح Private Service Connect لمنتج الخدمة تقديم الخدمات لمستهلك الخدمات. يمكن لشبكة VPC لمنتج الخدمة دعم العديد من مستهلكي الخدمة.
هناك نوعان من نقاط نهاية Private Service Connect التي يمكنها الاتصال بخدمة منشورة:
- نقطة نهاية Private Service Connect (استنادًا إلى قاعدة إعادة توجيه)
باستخدام نوع نقطة النهاية هذا، يتصل المستهلكون بعنوان IP داخلي يحددونه. ينفّذ Private Service Connect ترجمة عنوان الشبكة (NAT) لتوجيه الطلب إلى منتِج الخدمة.
- نقطة نهاية Private Service Connect مع عناصر التحكّم في خدمة HTTP(S) للمستهلك (استنادًا إلى جهاز موازنة حمل HTTP(S) خارجي عام)
وباستخدام نوع نقطة النهاية هذا، يتصل المستهلكون بعنوان IP خارجي. يستخدم Private Service Connect مجموعة نقاط نهاية للشبكة لتوجيه الطلب إلى الجهة المصنّعة للخدمة.
يؤدي استخدام جهاز موازنة حمل HTTP(S) خارجي كنقطة لفرض السياسة إلى تحقيق المزايا التالية:
- يمكنك إعادة تسمية الخدمات وتعيينها إلى عناوين URL من اختيارك.
- يمكنك ضبط جهاز موازنة الحمل لتسجيل جميع الطلبات إلى ميزة "التسجيل في السحابة الإلكترونية".
- يمكنك استخدام شهادات بروتوكول أمان طبقة النقل (TLS) التي يديرها العميل. أو شهادات تديرها Google.
في هذا الدرس التطبيقي حول الترميز، ستتعرَّف على كيفية إنشاء عناصر التحكّم في خدمة HTTP(S) الخاصة بنقطة نهاية Private Service Connect للمستهلكين باستخدام بروتوكول XLB العالمي للوصول بشكل خاص إلى خدمة في شبكة أخرى. يمكن تنفيذ نمط PSC هذا باستخدام مشروع واحد أو مشروعات منفصلة. لأغراض هذا التمرين، سنستخدم مشروعًا واحدًا مع اثنين من شبكات VPC منفصلَين.
ما ستتعرَّف عليه
- إنشاء نقطة نهاية Private Service Connect باستخدام عناصر التحكّم في خدمة HTTP(S) للمستهلك باستخدام حزمة XLB العامة
- إعداد خدمة مُدارة ليتم عرضها من خلال مرفق خدمة لقبول اتصالات L7 XLB.
- أنشئ شهادة طبقة المقابس الآمنة (SSL) وهيئ خادم ويب Apache لإنهاء بروتوكول أمان طبقة النقل (TLS) وقبول حركة البيانات على المنفذ 443.
- إنشاء PSC NEG
المتطلبات
- مشروع على Google Cloud
- معرفة نشر المثيلات وتهيئة مكونات الشبكة
2. بيئة الاختبار
ستتألف البيئة التي ستنشئها من جهاز موازنة حمل HTTP(S) خارجي وPSC NEG في شبكة VPC للمستهلك. تستضيف شبكة VPC المنتِج خدمة ويب Apache بسيطة تم ضبطها باستخدام HTTPS. ستنشئ خدمة الخلفية من خدمة الويب Apache والخدمة الأمامية التي تتم في الخلفية باستخدام جهاز موازنة حمل TCP الداخلي الذي تم تكوينه مع مرفق خدمة PSC.
3- الإعداد والمتطلبات
إعداد بيئة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي عبارة عن سلسلة أحرف لا تستخدمها Google APIs، ويمكنك تحديثها في أي وقت.
- يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الرجوع إلى رقم تعريف المشروع (والذي يتم تحديده عادةً على أنّه
PROJECT_ID
). لذلك، إذا لم يعجبك، يمكنك إنشاء رقم تعريف عشوائي آخر أو يمكنك تجربة رقم تعريف المشروع الخاص بك ومعرفة ما إذا كان متاحًا. بعد ذلك تكون الحالة "مجمّدة". بعد إنشاء المشروع. - هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد أكثر من هذا البرنامج التعليمي، اتبع أي عملية "تنظيف". التعليمات الموجودة في نهاية الدرس التطبيقي حول الترميز. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
مع أنّه يمكن إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.
من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:
من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بالبيئة بضع لحظات فقط. عند الانتهاء، من المفترض أن يظهر لك شيء مثل هذا:
يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل على Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ كل أعمالك في هذا التمرين من خلال متصفح.
4. قبل البدء
تفعيل واجهات برمجة التطبيقات
داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export project=YOUR-PROJECT-NAME export region=us-central1 echo $project echo $region
تفعيل جميع الخدمات اللازمة
gcloud services enable compute.googleapis.com gcloud services enable servicedirectory.googleapis.com
5- إعداد شبكة VPC في أداة نشر الأخبار، والشبكة الفرعية، وإعداد قواعد جدار الحماية
شبكة سحابة VPC
من Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
إنشاء شبكات فرعية
يلزم وجود شبكة فرعية من جانب المنتج لإجراء ترجمة عنوان الشبكة (NAT) لـ PSC. تجدر الإشارة إلى أنّ الغرض هو PRIVATE_SERVICE_CONNECT. وهذا يعني أنه لا يمكن استخدام هذه الشبكة الفرعية لنشر أحمال العمل.
من Cloud Shell
gcloud compute networks subnets create producer-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.100.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
سننشر شبكتَين فرعيتَين في شبكة VPC الخاصة بأداة المنتج. أول من يقوم بخدمة الإنتاج، ومستخدم إضافي في منطقة أخرى لنشر جهاز عميل افتراضي لاختبار الاتصال بالخدمة عبر الوصول العالمي على جهاز موازنة الحمل الداخلي في TCP.
من Cloud Shell
gcloud compute networks subnets create service-subnet \ --network=producer-vpc \ --range=10.0.0.0/24 \ --region=$region
من Cloud Shell
gcloud compute networks subnets create client-subnet \ --network=producer-vpc \ --range=10.0.1.0/24 \ --region=us-east4
إنشاء Cloud NAT
هناك حاجة إلى تقنية NAT (ترجمة عنوان الشبكة) في السحابة الإلكترونية لتثبيت الحزم المناسبة لخدمات المنتِجين لدينا.
من Cloud Shell
gcloud compute routers create service-cr \ --region=$region --network=producer-vpc \ --asn=65501
من Cloud Shell
gcloud compute routers nats create service-nat-gw \ --router=service-cr \ --router-region=$region \ --nat-custom-subnet-ip-ranges=service-subnet \ --auto-allocate-nat-external-ips
إنشاء قواعد جدار حماية
في هذا التمرين المعملي، ستستخدم الشراء داخل التطبيق للاتصال بالمثيلات التي تنشئها. ستتيح لك قاعدة جدار الحماية التالية الاتصال بالمثيلات من خلال الشراء داخل التطبيق. إذا كنت تفضل عدم استخدام IAP، فيمكنك تخطي هذه الخطوة، وإضافة عناوين IP عامة على المثيل وإنشاء قاعدة جدار حماية تسمح بدخول منفذ TCP رقم 22 من 0.0.0.0/0.
للسماح لعمليات الشراء داخل التطبيق بالاتصال بمثيلات الأجهزة الافتراضية، أنشِئ قاعدة جدار حماية تعمل على:
- ينطبق ذلك على جميع مثيلات الأجهزة الافتراضية التي تريد أن تتوفّر إمكانية الوصول إليها من خلال استخدام الشراء داخل التطبيق.
- يسمح بالزيارات الواردة من نطاق IP 35.235.240.0/20. يحتوي هذا النطاق على جميع عناوين IP التي يستخدمها بروتوكول IAP لإعادة توجيه بروتوكول التحكم بالنقل.
من Cloud Shell
gcloud compute firewall-rules create allow-ssh-iap \ --network producer-vpc \ --allow tcp:22 \ --source-ranges=35.235.240.0/20
ستنشأ زيارات العملاء من جهاز موازنة حمل HTTP(S) الخارجي العام، لذا يجب إنشاء قاعدة جدار حماية للسماح بهذه الزيارات إلى خوادم الوجهات ذات العلامات التي ستستضيف خدمة الويب. وسنفتح أيضًا قاعدة جدار الحماية من client-subnet لأغراض الاختبار.
من Cloud Shell
gcloud compute firewall-rules create allow-xlb-client \ --network=producer-vpc \ --direction=ingress \ --allow=tcp:443 \ --target-tags=psc-service \ --source-ranges=130.211.0.0/22,35.191.0.0/16,10.0.1.0/24
إنشاء خدمة Apache على الويب
سننشئ خدمة ويب Apache بسيطة تعرض "خدمة PSC"
إنشاء نموذج مثيل
من Cloud Shell
gcloud compute instance-templates create producer-service-template \ --network producer-vpc \ --subnet service-subnet \ --region $region \ --no-address \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=psc-service \ --metadata startup-script='#! /bin/bash sudo apt-get update apt-get install apache2 -y a2ensite default-ssl echo "PSC Service" | \ tee /var/www/html/index.html systemctl restart apache2'
إنشاء ميزة "التحقّق من الصحة" لـ MIG
من Cloud Shell
gcloud compute health-checks create https psc-service-mig-healthcheck \ --port=443 \ --global
إنشاء مجموعة مثيلات مُدارة
من Cloud Shell
gcloud compute instance-groups managed create psc-service-mig \ --region $region \ --size=2 \ --template=producer-service-template \ --health-check=psc-service-mig-healthcheck
إعداد طبقة المقابس الآمنة (SSL) في خوادم الويب Apache
بعد ذلك، سنحتاج إلى تهيئة طبقة المقابس الآمنة (SSL) على كل خادم من خوادم الويب Apache. وسنقوم بذلك عن طريق إنشاء شهادة وإضافة تلك الشهادة إلى تهيئة Apache.
يجب تهيئة إنهاء طبقة المقابس الآمنة (SSL) في خدمات الخلفية، نظرًا لأنه يجب أن تكون الخدمة مقدمة من خلال جهاز موازنة حمل TCP/UDP (L4) الداخلي لنمط PSC المحدد هذا. لا ينهي جهاز موازنة حمل TCP/UDP الداخلي طبقة المقابس الآمنة في طبقة موازنة الحمل.
ابدأ ببروتوكول SSH في أول جهاز افتراضي في MIG. سيتم تخصيص منطقة الجهاز الافتراضي واسم الجهاز الافتراضي بشكل ديناميكي حسب بيئة. انتقِل إلى Compute Engine في وحدة التحكّم > مثيلات الأجهزة الافتراضية (VM) للعثور على اسم المثيلات ومنطقتها
من Cloud Shell
gcloud compute ssh --zone "<YOUR_VM_ZONE>" "<YOUR_MIG_VM_1>" --tunnel-through-iap --project $project
بعد ذلك، سننشئ الشهادة من خلال OpenSSL. سيُطلب منك ملء معلومات حول بلدك والولاية والمنطقة المحلية والمؤسسة واسم الوحدة التنظيمية والاسم الشائع وعنوان البريد الإلكتروني. يجب أن تكون المعلومات الوحيدة التي يجب ملؤها هي الاسم الشائع، والذي يجب أن يكون FQDN (اسم المجال المؤهل بالكامل) داخليًا من اختيارك. لأغراض هذا التمرين، يجب اختيار example.com.
من Cloud Shell
sudo openssl genrsa -out private-key-file.pem 2048
من Cloud Shell
cat <<'EOF' >config.txt [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements [extension_requirements] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @sans_list [dn_requirements] countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (e.g. server FQDN or YOUR name) emailAddress = Email Address [sans_list] DNS.1 = example.com EOF
من Cloud Shell
sudo openssl req -new -key private-key-file.pem \ -out csr.pem \ -config config.txt
من Cloud Shell
sudo openssl x509 -req \ -signkey private-key-file.pem \ -in csr.pem \ -out cert.cert \ -extfile config.txt \ -extensions extension_requirements \ -days 10
لنتمكّن الآن من تعديل معلومات إعداد Apache باستخدام تفاصيل الشهادة الجديدة.
sudo vi /etc/apache2/sites-enabled/default-ssl.conf
أضف سطرًا ضمن ServerAdmin (AdminAdmin) أنه
ServerName example.com
حدِّث شهادة SSLCertificateFile وSSLCertificateKeyFile لموقع ملف cert.cert والمواقع الخاصة-key-file.pem على جهازك الافتراضي. في ما يلي مثال. الحرص على تعديل <profile> مع اسم الدليل.
SSLCertificateFile /home/<profile>/cert.cert SSLCertificateKeyFile /home/<profile>/private-key-file.pem
أغلِق المحرِّر وأعِد تشغيل Apache.
sudo a2enmod ssl sudo systemctl restart apache2
اخرج من المثيل وكرِّر الخطوات نفسها على المثيل الآخر في مجموعة المثيلات المُدارة.
6- إنشاء خدمة المنتِج
بعد ذلك، سننشئ مكونات جهاز موازنة الحمل للخدمة.
إنشاء فحص سلامة جهاز موازنة الحمل
من Cloud Shell
gcloud compute health-checks create https service-lb-healthcheck \ --port=443 \ --region=$region
أنشئ خدمة الخلفية.
من Cloud Shell
gcloud compute backend-services create psc-backend-service \ --load-balancing-scheme=internal \ --protocol=TCP \ --region=$region \ --health-checks=service-lb-healthcheck \ --health-checks-region=$region gcloud compute backend-services add-backend psc-backend-service \ --region=$region \ --instance-group=psc-service-mig
إنشاء قاعدة إعادة التوجيه. لاحظ أنه يجب ضبط قاعدة إعادة التوجيه على المنفذ 443 ومع "الوصول العام". وهذا مطلوب حتى يعمل نمط PSC هذا.
من Cloud Shell
gcloud compute forwarding-rules create producer-fr \ --region=$region \ --load-balancing-scheme=internal \ --network=producer-vpc \ --subnet=service-subnet \ --address=10.0.0.100 \ --ip-protocol=TCP \ --ports=443 \ --backend-service=psc-backend-service \ --backend-service-region=$region \ --allow-global-access
7. اختبار الخدمة
قبل إنشاء مرفق الخدمة، سننشئ برنامجًا في منطقة مختلفة لاختبار جهاز موازنة الحمل الذي تمت تهيئته مع الوصول الشامل، فضلاً عن خدمة Apache المهيأة لإنهاء بروتوكول أمان طبقة النقل.
من Cloud Shell
gcloud compute instances create vm-client \ --zone=us-east4-a \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet=client-subnet \ --no-address
SSH في المثيل.
من Cloud Shell
gcloud compute ssh \ --zone "us-east4-a" "vm-client" \ --tunnel-through-iap \ --project $project
اختبر خدمة Apache من خلال توصيل أكثر من 443 من خلال جهاز موازنة الحمل.
curl https://example.com:443 -k --connect-to example.com:443:10.0.0.100:443
نتيجة متوقَّعة
PSC Service
8. إنشاء مرفق الخدمة
من Cloud Shell
gcloud compute service-attachments create pscservice \ --region=$region \ --producer-forwarding-rule=producer-fr \ --connection-preference=ACCEPT-AUTOMATIC \ --nat-subnets=producer-nat-subnet
يجب تدوين معرّف الموارد المنتظم (URI) لمرفق الخدمة، لأنّك ستحتاج إليه في الخطوة التالية لإعداد نقطة النهاية. يمكنك الحصول عليه من خلال تنفيذ ما يلي في Cloud Shell
من Cloud Shell
gcloud compute service-attachments describe pscservice --region $region
انسخ معرّف الموارد المنتظم (URI) بدءًا من /projects
مثال: /projects/<YOUR_PROJECT_ID>/regions/us-central1/serviceمُرفَقs/pscservice
9. إعداد شبكة VPC وشبكة فرعية للمستهلك
شبكة سحابة VPC
من Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
إنشاء شبكة فرعية
يجب أن تتوفّر شبكة فرعية لدى المستهلك حيث سيتم تفعيل مجموعة نقاط النهاية الخاصة بشبكة Private Service Connect (NEG).
من Cloud Shell
gcloud compute networks subnets create psc-neg-subnet \ --network=consumer-vpc \ --region=$region \ --range=10.100.200.0/24 \ --purpose=private
10. إنشاء نقطة نهاية Private Service Connect واختبار الاتصال
وسنتابع عملية إنشاء مجموعة نقاط نهاية الشبكة (PSC) التي سيتم ربطها بمرفق الخدمة الذي أنشأناه للتو، ثم نرفق أداة PSC NEG بخدمة الخلفية، ونُربط الخدمة الخلفية بقاعدة إعادة توجيه.
اجعل معرف الموارد المنتظم (URI) لمرفق الخدمة في متناول يدك الذي ذكرناه في الخطوة الأخيرة. استبدِل عنوان URL أدناه بمعرّف الموارد المنتظم (URI).
من Cloud Shell
gcloud beta compute network-endpoint-groups create xlb-psc-neg \ --network-endpoint-type=private-service-connect \ --psc-target-service=projects/<PROJECT-ID>/regions/us-central1/serviceAttachments/pscservice \ --region=$region \ --network=consumer-vpc \ --subnet=psc-neg-subnet
أنشئ عنوان IP العام لـ XLB واحصل على عنوان IP الفعلي الذي تم تعيينه للاختبار لاحقًا.
من Cloud Shell
gcloud compute addresses create xlb-psc-address \ --ip-version=IPv4 --global gcloud compute addresses describe xlb-psc-address --format="get(address)" --global
سننشئ بعد ذلك نقطة نهاية PSC، والتي في هذه الحالة، في موازن تحميل خارجي.
من Cloud Shell
gcloud beta compute backend-services create pscneg-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global
من Cloud Shell
gcloud beta compute backend-services add-backend pscneg-backend-service \ --network-endpoint-group=xlb-psc-neg \ --network-endpoint-group-region=$region \ --global
من Cloud Shell
gcloud beta compute url-maps create xlb-psc-map \ --default-service=pscneg-backend-service \ --global
من Cloud Shell
gcloud beta compute target-http-proxies create psc-http-proxy \ --url-map=xlb-psc-map
من Cloud Shell
gcloud beta compute forwarding-rules create xlb-psc-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=xlb-psc-address \ --target-http-proxy=psc-http-proxy \ --ports=80 \ --global
انتظِر من 5 إلى 7 دقائق، ثم أدخِل عنوان IP المرتبط بعنوان xlb-psc-address في شريط عناوين المتصفّح.
في حال ظهور "خدمة PSC" عرضك تكون أنت قد قمت بتهيئة الحل بشكل صحيح.
11. خطوات التنظيف
حذف مكونات التمرين المعملي من وحدة طرفية واحدة في Cloud Shell
gcloud beta compute forwarding-rules delete xlb-psc-fr --global --quiet gcloud beta compute target-http-proxies delete psc-http-proxy --quiet gcloud beta compute url-maps delete xlb-psc-map --global --quiet gcloud beta compute backend-services delete pscneg-backend-service --global --quiet gcloud compute addresses delete xlb-psc-address --global --quiet gcloud beta compute network-endpoint-groups delete xlb-psc-neg --region $region --quiet gcloud compute networks subnets delete psc-neg-subnet --region $region --quiet gcloud compute networks delete consumer-vpc --quiet gcloud compute service-attachments delete pscservice --region $region --quiet gcloud compute instances delete vm-client --zone=us-east4-a --quiet gcloud compute forwarding-rules delete producer-fr --region $region --quiet gcloud compute backend-services delete psc-backend-service --region $region --quiet gcloud compute health-checks delete service-lb-healthcheck --region $region --quiet gcloud compute instance-groups managed delete psc-service-mig --region $region --quiet gcloud compute health-checks delete psc-service-mig-healthcheck --region $region --quiet gcloud compute instance-templates delete producer-service-template --quiet gcloud compute firewall-rules delete allow-xlb-client --quiet gcloud compute firewall-rules delete allow-ssh-iap --quiet gcloud compute routers nats delete service-nat-gw –router service-cr --region $region --quiet gcloud compute routers delete service-cr --region $region --quiet gcloud compute networks subnets delete client-subnet --quiet gcloud compute networks subnets delete service-subnet --quiet gcloud compute networks subnets delete producer-nat-subnet --quiet gcloud compute networks delete producer-vpc --quiet
12. تهانينا!
تهانينا على إكمال الدرس التطبيقي حول الترميز.
المواضيع التي تناولناها
- إنشاء نقطة نهاية Private Service Connect باستخدام عناصر التحكّم في خدمة HTTP(S) للمستهلك باستخدام حزمة XLB العامة
- إعداد خدمة مُدارة ليتم عرضها من خلال مرفق خدمة لقبول اتصالات L7 XLB.
- أنشئ شهادة طبقة المقابس الآمنة (SSL) وهيئ خادم ويب Apache لإنهاء بروتوكول أمان طبقة النقل (TLS) وقبول حركة البيانات على المنفذ 443.
- إنشاء PSC NEG