الدرس التطبيقي حول ترميز المسارات المستنِدة إلى السياسات (PBR)

1. مقدمة

المسارات المستندة إلى السياسات

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

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

  • الشبكة بأكملها: جميع مثيلات الأجهزة الافتراضية (VM) ومداخل الشبكات الافتراضية الخاصة وعمليات الاتصال Interconnect
  • استخدام علامات الشبكة: اختيار مثيلات الأجهزة الافتراضية في VPC
  • منطقة الاتصال: جميع الزيارات التي تدخل إلى شبكة VPC عن طريق مرفقات VLAN في المنطقة

يجب أن تكون القفزة التالية من المسار المستند إلى السياسة جهاز موازنة حمل الشبكة الداخلية صالحًا وأن يكون على شبكة VPC نفسها مثل المسار المستند إلى السياسة.

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

تكون للمسارات المستندة إلى السياسات أولوية أعلى من أنواع المسارات الأخرى باستثناء مسارات الإرجاع الخاصة.

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

يمكنك إنشاء قاعدة واحدة للزيارات الأحادية أو قواعد متعددة للتعامل مع الزيارات ثنائية الاتجاه.

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

ويجب تفعيل ميزة إعادة توجيه عناوين IP في مثيلات الأجهزة الافتراضية التي تتلقّى حركة البيانات من مسار مستند إلى سياسة معيّنة.

الاعتبارات الواجب مراعاتها عند استخدام سجل PBR

يجب ضبط إعدادات خاصة لاستخدام المسارات المستندة إلى السياسات بالطرق التالية.

على سبيل المثال، استخدام PBR مع GKE أو PSC أو مع PGA/PSA

يمكنك الاطّلاع هنا على مزيد من التفاصيل حول سجل PBR مع GKE، كما يمكنك الاطّلاع على قسم قيود PBR العامة هنا.

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

  • كيفية ضبط مسارات مستنِدة إلى السياسات

المتطلبات

  • معرفة نشر المثيلات وتهيئة مكونات الشبكة
  • معرفة إعداد جدار الحماية لـ VPC

2. بيئة الاختبار

سيعتمد هذا الدرس التطبيقي حول الترميز على شبكة VPC واحدة. سيكون هناك مصدران للحوسبة، هما clienta و clientb في هذه البيئة يرسلان الحزم إلى مورد خادم آخر. باستخدام PBR والفلاتر، سنفرض حركة البيانات من العميل من خلال مورد حوسبة آخر لفرض جدار الحماية بينما تنتقل حركة بيانات العميل مباشرةً إلى الخادم. يوضح الرسم التخطيطي أدناه المسار.

bff32b01ada8e9ad.png

في المخطّط البياني أعلاه، من المفترض أن يكون هناك من الناحية الفنية جهاز موازنة الحمل الداخلي للشبكة (ILB) لمسارات PBR. تم حذف هذا المحتوى لتبسيط المخطّط البياني.

3- قبل البدء

يتطلّب الدرس التطبيقي حول الترميز مشروعًا واحدًا.

من cloudshell:

export project_id=`gcloud config list --format="value(core.project)"`
export region=us-central1
export zone=us-central1-a
export prefix=codelab-pbr

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

إذا لم يسبق لك إجراء ذلك، فعِّل واجهات برمجة التطبيقات لاستخدام المنتجات.

من cloudshell:

gcloud services enable compute.googleapis.com
gcloud services enable networkconnectivity.googleapis.com

5- إنشاء شبكة VPC وشبكة فرعية

شبكة VC

إنشاء درس تطبيقي حول الترميز-pbr-vpc VPC:

من cloudshell:

gcloud compute networks create $prefix-vpc --subnet-mode=custom 

الشبكة الفرعية

أنشئ الشبكات الفرعية المعنية في المنطقة المحددة:

من cloudshell:

gcloud compute networks subnets create $prefix-vpc-subnet \
   --range=10.10.10.0/24 --network=$prefix-vpc --region=${region}

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

للسماح لعمليات الشراء داخل التطبيق بالاتصال بمثيلات الأجهزة الافتراضية، أنشِئ قاعدة جدار حماية تعمل على:

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

من cloudshell:

gcloud compute firewall-rules create $prefix-allow-iap-proxy \
--direction=INGRESS \
--priority=1000 \
--network=$prefix-vpc \
--action=ALLOW \
--rules=tcp:22 \
--source-ranges=35.235.240.0/20

للسماح بمنفذ HTTP القياسي (TCP 80) وبروتوكول ICMP للخادم:

  • يتم تطبيقه على الموارد التي تحتوي على علامة الشبكة "الخادم"
  • يسمح بدخول البيانات من جميع المصادر.

من cloudshell:

gcloud compute firewall-rules create $prefix-allow-http-icmp \
--direction=INGRESS \
--priority=1000 \
--network=$prefix-vpc \
--action=ALLOW \
--rules=tcp:80,icmp \
--source-ranges=0.0.0.0/0 \
--target-tags=server

للسماح للبرامج الثابتة باستلام الحزم، عليك السماح بدخول جميع البروتوكولات والمنافذ.

  • ينطبق على الموارد التي تحتوي على علامة الشبكة "fw"
  • تسمح بدخول الواردة من مصادر 10.10.10.0/24

من cloudshell:

gcloud compute firewall-rules create $prefix-fw-allow-ingress \
--direction=INGRESS \
--priority=1000 \
--network=$prefix-vpc \
--action=ALLOW \
--rules=all \
--source-ranges=10.10.10.0/24 \
--target-tags=fw

للسماح بإجراءات التحقق من الصحة

  • ينطبق هذا الإعداد على الموارد التي تحتوي على علامة الشبكة "fw".
  • السماح بدخول النطاقات من نطاقات التحقق من الصحة

من cloudshell:

gcloud compute firewall-rules create $prefix-allow-hc-ingress \
--direction=INGRESS \
--priority=1000 \
--network=$prefix-vpc \
--action=ALLOW \
--rules=tcp:80 \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--target-tags=fw

7. إنشاء Cloud Router ترجمة عنوان الشبكة في السحابة الإلكترونية (NAT)

يهدف هذا القسم إلى تمكين الأجهزة الظاهرية الخاصة من تنزيل حزم البرامج المناسبة من الإنترنت.

إنشاء Cloud Router

من cloudshell:

gcloud compute routers create ${prefix}-cr \
--region=${region} \
--network=${prefix}-vpc

إنشاء بوابة NAT في السحابة الإلكترونية

من cloudshell:

gcloud compute routers nats create ${prefix}-nat-gw-${region} \
--router=${prefix}-cr \
--router-region=${region} \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges

8. إنشاء مثيلات الحوسبة

إنشاء مثيلات الحوسبة ClientA وClientB وFW وServer:

من cloudshell:

gcloud compute instances create clienta \
   --subnet=$prefix-vpc-subnet \
   --no-address \
   --private-network-ip=10.10.10.10 \
   --zone $zone \
   --tags client \
   --metadata startup-script='#! /bin/bash
apt-get update'

من cloudshell:

gcloud compute instances create clientb \
   --subnet=$prefix-vpc-subnet \
   --no-address \
   --private-network-ip=10.10.10.11 \
   --zone $zone \
   --tags client \
   --metadata startup-script='#! /bin/bash
apt-get update'

من cloudshell:

gcloud compute instances create server \
   --subnet=$prefix-vpc-subnet \
   --no-address \
   --private-network-ip=10.10.10.200 \
   --zone $zone \
   --tags server \
   --metadata startup-script='#! /bin/bash
sudo su
apt-get update
apt-get -y install tcpdump
apt-get -y install nginx
cat > /var/www/html/index.html << EOF
<html><body><p>Server</p></body></html>
EOF'

من cloudshell:

gcloud compute instances create fw \
   --subnet=$prefix-vpc-subnet \
   --can-ip-forward \
   --no-address \
   --private-network-ip=10.10.10.75 \
   --zone $zone \
   --tags fw \
   --metadata startup-script='#! /bin/bash
apt-get update
sudo apt-get -y install tcpdump
sudo apt-get -y install nginx
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -I FORWARD -d 10.10.10.200 -j REJECT'

9. اختبار الاتصال بدون إعداد PBR

بروتوكول النقل الآمن (SSH) إلى الأجهزة الافتراضية (VM) التي حوسبة العملاء والتي أنشأناها مؤخرًا ونتحقّق من إمكانية الاتصال من كلا العميلين إلى الخادم.

من cloudshell1، سجِّل الدخول إلى العميل:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

شغِّل الأوامر التالية:

ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html

من المفترض أن تكون طلبات أداة ping وربط الفيديو ناجحة.

إخراج:

root@clienta:~$ ping 10.10.10.200 -c 5
PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data.
64 bytes from 10.10.10.200: icmp_seq=1 ttl=64 time=1.346 ms
64 bytes from 10.10.10.200: icmp_seq=2 ttl=64 time=0.249 ms
64 bytes from 10.10.10.200: icmp_seq=3 ttl=64 time=0.305 ms
64 bytes from 10.10.10.200: icmp_seq=4 ttl=64 time=0.329 ms
64 bytes from 10.10.10.200: icmp_seq=5 ttl=64 time=0.240 ms
root@clienta:~$ curl 10.10.10.200/index.html
<html><body><p>Server</p></body></html>

افتح علامة تبويب إضافية في Cloudshell من خلال النقر على علامة +.

3722d8574c3812b1.png

من متغيّرات cloudshell2، يمكنك ضبطها للاستخدام:

export project_id=`gcloud config list --format="value(core.project)"`
export region=us-central1
export zone=us-central1-a
export prefix=codelab-pbr

من cloudshell2 SSH إلى clientb:

gcloud compute ssh clientb --zone=$zone --tunnel-through-iap

شغِّل الأوامر التالية:

ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html

من المفترض أن تكون طلبات أداة ping وربط الفيديو ناجحة.

إخراج:

root@clientb:~$ ping 10.10.10.200 -c 5
PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data.
64 bytes from 10.10.10.200: icmp_seq=1 ttl=64 time=1.346 ms
64 bytes from 10.10.10.200: icmp_seq=2 ttl=64 time=0.249 ms
64 bytes from 10.10.10.200: icmp_seq=3 ttl=64 time=0.305 ms
64 bytes from 10.10.10.200: icmp_seq=4 ttl=64 time=0.329 ms
64 bytes from 10.10.10.200: icmp_seq=5 ttl=64 time=0.240 ms
root@clientb:~$ curl 10.10.10.200/index.html
<html><body><p>Server</p></body></html>

يمكنك الآن الخروج من الوحدة الطرفية للجهاز الافتراضي والعودة إلى تطبيق Cloudshell.

10. إنشاء مجموعة مثيلات

يمكنك إنشاء مجموعة مثيلات غير مُدارة لجهازك الافتراضي من Android.

من cloudshell:

gcloud compute instance-groups unmanaged create pbr-uig --zone=$zone

إضافة النسخة الافتراضية من الجهاز إلى مجموعة المثيلات غير المُدارة.

من cloudshell:

gcloud compute instance-groups unmanaged add-instances pbr-uig --instances=fw --zone=$zone

11. إنشاء عملية تحقّق من الصحة

إنشاء فحص سلامة للخدمة الخلفية سنجري اختبارًا بسيطًا للتحقق من حالة منفذ TCP.

من cloudshell:

gcloud compute health-checks create tcp $prefix-hc-tcp-80 --region=$region --port 80

12. إنشاء خدمة خلفية

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

من cloudshell:

gcloud compute backend-services create be-pbr --load-balancing-scheme=internal --protocol=tcp --region=$region --health-checks=$prefix-hc-tcp-80 --health-checks-region=$region

الآن أضف مجموعة المثيل إلى خدمة الخلفية.

من cloudshell:

gcloud compute backend-services add-backend be-pbr --region=$region --instance-group=pbr-uig --instance-group-zone=$zone

13. إنشاء قاعدة إعادة توجيه

من cloudshell:

gcloud compute forwarding-rules create fr-pbr --region=$region --load-balancing-scheme=internal --network=$prefix-vpc --subnet=$prefix-vpc-subnet --ip-protocol=TCP --ports=ALL --backend-service=be-pbr --backend-service-region=$region --address=10.10.10.25 --network-tier=PREMIUM

14. إنشاء قاعدة PBR

تنطبق قاعدة PBR هذه على العملاء. سيتم توجيه جميع زيارات IPv4 إلى قاعدة إعادة التوجيه 10.10.10.25 إذا كان عنوان IP المصدر هو 10.10.10.10/32 (عنوان العميل) وعنوان IP الوجهة هو 10.10.10.0/24.

وهذا يعني أنّ العميل سيتطابق مع سجل PBR وليس العميل.

من cloudshell:

gcloud network-connectivity policy-based-routes create pbr-client \
   --network=projects/$project_id/global/networks/$prefix-vpc \
   --next-hop-ilb-ip=10.10.10.25 \
   --source-range=10.10.10.10/32 \
   --destination-range=10.10.10.0/24 \
   --protocol-version=IPv4 \
   --priority=1000 \
   --tags=client

تنطبق قاعدة PBR هذه على الخادم. سيتم توجيه جميع حركة بيانات IPv4 إلى قاعدة إعادة التوجيه 10.10.10.25 إذا كان عنوان IP المصدر هو 10.10.10.200/32 وعنوان IP الوجهة هو 10.10.10.10/32.

من cloudshell:

gcloud network-connectivity policy-based-routes create pbr-server \
   --network=projects/$project_id/global/networks/$prefix-vpc \
   --next-hop-ilb-ip=10.10.10.25 \
   --source-range=10.10.10.200/32 \
   --destination-range=10.10.10.10/32 \
   --protocol-version=IPv4 \
   --priority=2000 \
   --tags=server

15. اختبار الاتصال باستخدام PBR

سنتحقق الآن من وظيفة PBR. الإصدار "fw" يتم إعداد المثيل باستخدام iptables لرفض الطلبات الموجهة للخادم. إذا كان PBR يعمل بشكل صحيح، فستفشل الطلبات التي عملت سابقًا على العميل الآن، بينما لا يزال clientb ناجحًا.

بروتوكول النقل الآمن (SSH) إلى جهاز العميل (VM) الخاص بحاسوب العميل وإجراء الاختبارات نفسها.

من cloudshell1:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

شغِّل الأوامر التالية:

ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html

إخراج:

root@clienta:~$ ping 10.10.10.200 -c 5
PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data.
From 10.10.10.75 icmp_seq=1 Destination Port Unreachable
From 10.10.10.75 icmp_seq=2 Destination Port Unreachable
From 10.10.10.75 icmp_seq=3 Destination Port Unreachable
From 10.10.10.75 icmp_seq=4 Destination Port Unreachable
From 10.10.10.75 icmp_seq=5 Destination Port Unreachable
root@clienta:~$ curl 10.10.10.200/index.html
curl: (7) Failed to connect to 10.10.10.200 port 80: Connection refused

بما أنّ الطلبات تعذَّرت معالجتها، يمكننا التأكّد من أنّ "خدمة التحقق من الناشر" (PBR) تعمل بشكل نشط على توجيه حركة بيانات العميل إلى النسخة الافتراضية التي تم ضبطها لحظر هذه الزيارات.

SSH في clientb وإجراء نفس اختبار الاتصال.

من cloudshell2:

gcloud compute ssh clientb --zone=$zone --tunnel-through-iap

شغِّل الأوامر التالية:

ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html

إخراج:

root@clientb:~$ ping 10.10.10.200 -c 5
PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data.
64 bytes from 10.10.10.200: icmp_seq=1 ttl=63 time=0.361 ms
64 bytes from 10.10.10.200: icmp_seq=2 ttl=63 time=0.475 ms
64 bytes from 10.10.10.200: icmp_seq=3 ttl=63 time=0.379 ms
root@clientb:~$ curl 10.10.10.200
<html><body><p>Server</p></body></html>

كما ترى، تكون الطلبات من clientb إلى الخادم ناجحة. ويرجع ذلك إلى أنّ الطلبات لا تتطابق مع قاعدة PBR لعنوان IP المصدر.

16. [اختياري] التحقق من صحة الصور باستخدام جدار الحماية

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

يجب أن يتوفّر لديك اتصال SSH في cloudshell1 وcloudshell2 للعميل وclientb.

افتح علامة تبويب إضافية في Cloudshell من خلال النقر على علامة +.

5eb3a9956f7e41a2.png

من cloudshell3، اضبط المتغيرات:

export project_id=`gcloud config list --format="value(core.project)"`
export region=us-central1
export zone=us-central1-a
export prefix=codelab-pbr

SSH إلى إعادة توجيه:

gcloud compute ssh fw --zone=$zone --tunnel-through-iap

شغّل الأمر التالي على fw (cloudshell3):

sudo tcpdump -i any icmp -nn

من clienta (cloudshell1)، شغّل اختبار ping:

ping 10.10.10.200 -c 5

من clientb (cloudshell2)، شغّل اختبار ping:

ping 10.10.10.200 -c 5

الناتج عن البرامج الثابتة (cloudshell 3):

root@fw:~$ sudo tcpdump -i any icmp -nn
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
17:07:42.215297 ens4  In  IP 10.10.10.10 > 10.10.10.200: ICMP echo request, id 25362, seq 1, length 64
17:07:42.215338 ens4  Out IP 10.10.10.75 > 10.10.10.10: ICMP 10.10.10.200 protocol 1 port 51064 unreachable, length 92
17:07:43.216122 ens4  In  IP 10.10.10.10 > 10.10.10.200: ICMP echo request, id 25362, seq 2, length 64
17:07:43.216158 ens4  Out IP 10.10.10.75 > 10.10.10.10: ICMP 10.10.10.200 protocol 1 port 30835 unreachable, length 92
17:07:44.219064 ens4  In  IP 10.10.10.10 > 10.10.10.200: ICMP echo request, id 25362, seq 3, length 64
17:07:44.219101 ens4  Out IP 10.10.10.75 > 10.10.10.10: ICMP 10.10.10.200 protocol 1 port 2407 unreachable, length 92

لن تظهر لك أي حزم في tcpdump من clientb (10.10.10.11) لأنّ PBR غير سارٍ.

ارجع إلى Cloudshell لتنظيف الموارد.

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

من Cloud Shell، أزِل قاعدة PBR وقاعدة إعادة التوجيه وخدمة الخلفية والتحقق من الصحة ومجموعة المثيلات ومجموعة الحوسبة الافتراضية وقواعد NAT وCloud Router وقواعد جدار الحماية.

gcloud -q network-connectivity policy-based-routes delete pbr-client

gcloud -q network-connectivity policy-based-routes delete pbr-server

gcloud -q compute forwarding-rules delete fr-pbr --region=$region

gcloud -q compute backend-services delete be-pbr --region=$region

gcloud -q compute health-checks delete $prefix-hc-tcp-80 --region=$region

gcloud -q compute instance-groups unmanaged delete pbr-uig --zone=$zone

gcloud -q compute instances delete clienta --zone=$zone
gcloud -q compute instances delete clientb --zone=$zone
gcloud -q compute instances delete server --zone=$zone
gcloud -q compute instances delete fw --zone=$zone


gcloud -q compute routers nats delete ${prefix}-nat-gw-${region} \
--router=$prefix-cr --router-region=$region

gcloud -q compute routers delete $prefix-cr --region=$region

gcloud -q compute firewall-rules delete $prefix-allow-iap-proxy
gcloud -q compute firewall-rules delete $prefix-allow-http-icmp
gcloud -q compute firewall-rules delete $prefix-fw-allow-ingress
gcloud -q compute firewall-rules delete $prefix-allow-hc-ingress

إزالة الشبكة الفرعية وأجهزة VPC:

gcloud -q compute networks subnets delete $prefix-vpc-subnet \
    --region $region

gcloud -q compute networks delete $prefix-vpc

18 تهانينا

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

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

  • المسارات المستندة إلى السياسات