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 والفلاتر، سنفرض حركة البيانات من العميل من خلال مورد حوسبة آخر لفرض جدار الحماية بينما تنتقل حركة بيانات العميل مباشرةً إلى الخادم. يوضح الرسم التخطيطي أدناه المسار.
في المخطّط البياني أعلاه، من المفترض أن يكون هناك من الناحية الفنية جهاز موازنة الحمل الداخلي للشبكة (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 من خلال النقر على علامة +.
من متغيّرات 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 من خلال النقر على علامة +.
من 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 تهانينا
تهانينا على إكمال الدرس التطبيقي حول الترميز.
المواضيع التي تناولناها
- المسارات المستندة إلى السياسات