1. مقدمة
يتيح Google Cloud Platform استخدام واجهات متعددة على مستوى مثيل الأجهزة الافتراضية منذ فترة طويلة. يمكن للجهاز الافتراضي ربط ما يصل إلى 7 واجهات جديدة (الواجهات التلقائية + 7 واجهات) بوحدات سحابة VPC مختلفة باستخدام الواجهات المتعددة. تعمل شبكة GKE على توسيع نطاق هذا السلوك ليشمل مجموعات الأجهزة المتسلسلة التي تعمل على العُقد. قبل استخدام هذه الميزة، أتاحت مجموعات GKE لجميع NodePool واجهة واحدة فقط، وبالتالي يتم ربطها بـ VPC واحد. من خلال ميزة "الشبكات المتعددة على الأجهزة المتسلسلة"، يمكن للمستخدم الآن تفعيل أكثر من واجهة واحدة على العُقد ولللوحات في مجموعة GKE.
ما الذي ستنشئه
في هذا البرنامج التعليمي، ستنشئ بيئة شاملة ومتعددة لأنظمة GKE متعددة توضّح حالات الاستخدام كما هو موضّح في الشكل 1.
- أنشئ مجموعة netdevice-l3-pod التي تستفيد من عرضتشغيل نسبة المشاهدة من أجل:
- قم بـ PING & wget -S إلى مثيل netdevice-apache في netdevice-vpc عبر eth2
- قم بـ PING & wget -S إلى l3-apache في l3-vpc بدلاً من eth1
- إنشاء لوحة l3-pod للاستفادة من النطاق المُربِك لإجراء رقم التعريف الشخصي (PING) wget -S إلى مثيل l3-apache عبر eth1
في كلتا حالتَي الاستخدام، تكون واجهة eth0 للمجموعة الصغيرة متصلة بالشبكة التلقائية.
على شكل 1
المعلومات التي ستطّلع عليها
- كيفية إنشاء شبكة فرعية من النوع l3
- كيفية إنشاء شبكة فرعية لنوع netdevice
- كيفية إنشاء مجموعة عقدة GKE متعددة الأجهزة
- كيفية إنشاء مجموعة أجهزة لوحية مزوّدة بإمكانات netdevice وl3
- كيفية إنشاء مجموعة عائلة باستخدام إمكانيات المستوى 3
- كيفية إنشاء شبكة عناصر GKE والتحقّق من صحتها
- كيفية التحقق من صحة الاتصال بخوادم Apache البعيدة باستخدام سجلات PING وwget وجدار الحماية
المتطلبات
- مشروع Google Cloud
2. المصطلحات والمفاهيم
شبكة VPC الأساسية: VPC الأساسي هو شبكة VPC تم ضبطها مسبقًا تأتي مع مجموعة من الإعدادات والموارد التلقائية. يتم إنشاء مجموعة GKE في شبكة VPC هذه.
الشبكة الفرعية: في Google Cloud، تُعد الشبكة الفرعية هي الطريقة لإنشاء التوجيه بين النطاقات غير الفئوي (CIDR) باستخدام أقنعة الشبكات في شبكة VPC. تحتوي الشبكة الفرعية على نطاق عنوان IP أساسي واحد يتم تعيينه للعُقد ويمكن أن تحتوي على نطاقات ثانوية متعددة يمكن أن تنتمي إلى المجموعات والخدمات.
شبكة العقدة: تشير شبكة العقدة إلى تركيبة مخصصة من زوج VPC والشبكة الفرعية. داخل شبكة العقدة هذه، يتم تخصيص عناوين IP للعُقد التابعة لمجموعة العُقد من نطاق عناوين IP الأساسي.
النطاق الثانوي: النطاق الثانوي في Google Cloud هو CIDR وقناع الشبكة ينتميان إلى منطقة في شبكة VPC. يستخدم GKE هذه الشبكة كشبكة من الطبقة 3 Pod. يمكن أن يكون لشبكة VPC عدة نطاقات ثانوية، ويمكن توصيل الجهاز اللوحي بشبكات Pod.
الشبكة (L3 أو الجهاز): عنصر في الشبكة يعمل كنقطة اتصال لللوحات. في البرنامج التعليمي، تتوفر الشبكتان l3-network وnetdevice-network، حيث يمكن أن يكون الجهاز netdevice أو dpdk. تكون الشبكة التلقائية إلزامية ويتم إنشاؤها عند إنشاء مجموعة استنادًا إلى الشبكة الفرعية للعُقدة التلقائية.
تتجاوب شبكات الطبقة 3 مع نطاق ثانوي على شبكة فرعية، ويتم تمثيله على النحو التالي:
VPC -> اسم الشبكة الفرعية -> اسم النطاق الثانوي
تتوافق شبكة الجهاز مع شبكة فرعية على شبكة VPC، ويتم تمثيلها على النحو التالي:
VPC -> اسم الشبكة الفرعية
شبكة Pod التلقائية: تنشئ خدمة Google Cloud شبكة Pod تلقائية أثناء إنشاء المجموعة. تستخدم شبكة Pod التلقائية شبكة VPC الأساسية كشبكة العقدة. تكون شبكة Pod التلقائية متاحة على جميع عُقد المجموعات والمجموعات بشكل تلقائي.
مجموعات الإعلانات المتسلسلة ذات الواجهات المتعددة: لا يمكن لمجموعة الأجهزة المتسلسلة ذات الواجهات المتعددة في GKE الاتصال بشبكة Pod نفسها لأنّ كل واجهة من واجهات المجموعة يجب أن تكون متصلة بشبكة فريدة.
تعديل المشروع لدعم الدرس التطبيقي حول الترميز
يستخدم هذا الدرس التطبيقي حول الترميز $variables للمساعدة في تنفيذ إعدادات gcloud في Cloud Shell.
داخل Cloud Shell، يمكنك تنفيذ ما يلي:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3- إعداد شبكة VPC الأساسية
إنشاء شبكة VPC الأساسية
داخل Cloud Shell، يمكنك تنفيذ ما يلي:
gcloud compute networks create primary-vpc --project=$projectid --subnet-mode=custom
إنشاء العقدة والشبكات الفرعية الثانوية
داخل Cloud Shell، يمكنك تنفيذ ما يلي:
gcloud compute networks subnets create primary-node-subnet --project=$projectid --range=192.168.0.0/24 --network=primary-vpc --region=us-central1 --enable-private-ip-google-access --secondary-range=sec-range-primay-vpc=10.0.0.0/21
4. إنشاء مجموعة GKE
يمكنك إنشاء مجموعة GKE خاصة مع تحديد الشبكات الفرعية الأساسية لـ vpc لإنشاء مجموعة العقدة التلقائية باستخدام العلامات المطلوبة:-enable-multi-networking و-enable-dataplane-v2 لتوفير حزم العقدة المتعددة الشبكات.
داخل Cloud Shell، أنشئ مجموعة GKE:
gcloud container clusters create multinic-gke \
--zone "us-central1-a" \
--enable-dataplane-v2 \
--enable-ip-alias \
--enable-multi-networking \
--network "primary-vpc" --subnetwork "primary-node-subnet" \
--num-nodes=2 \
--max-pods-per-node=32 \
--cluster-secondary-range-name=sec-range-primay-vpc \
--no-enable-master-authorized-networks \
--release-channel "regular" \
--enable-private-nodes --master-ipv4-cidr "100.100.10.0/28" \
--enable-ip-alias
التحقّق من صحة مجموعة النماذج المتعددة الشبكات
داخل Cloud Shell، يمكنك إجراء المصادقة مع المجموعة:
gcloud container clusters get-credentials multinic-gke --zone us-central1-a --project $projectid
داخل Cloud Shell، يمكنك التحقّق من صحة إنشاء عقدتَين من المجمّع التلقائي:
kubectl get nodes
مثال:
user@$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-multinic-gke-default-pool-3d419e48-1k2p Ready <none> 2m4s v1.27.3-gke.100
gke-multinic-gke-default-pool-3d419e48-xckb Ready <none> 2m4s v1.27.3-gke.100
5. إعداد netdevice-vpc
إنشاء شبكة netdevice-vpc
داخل Cloud Shell، يمكنك تنفيذ ما يلي:
gcloud compute networks create netdevice-vpc --project=$projectid --subnet-mode=custom
إنشاء الشبكات الفرعية netdevice-vpc
داخل Cloud Shell، أنشئ الشبكة الفرعية المستخدَمة لشبكة جهاز netdevice المتعددة:
gcloud compute networks subnets create netdevice-subnet --project=$projectid --range=192.168.10.0/24 --network=netdevice-vpc --region=us-central1 --enable-private-ip-google-access
داخل Cloud Shell، أنشئ شبكة فرعية لمثيل netdevice-apache:
gcloud compute networks subnets create netdevice-apache --project=$projectid --range=172.16.10.0/28 --network=netdevice-vpc --region=us-central1 --enable-private-ip-google-access
ضبط Cloud Router وNAT
يتم استخدام ترجمة عنوان الشبكة في السحابة الإلكترونية في البرنامج التعليمي لتثبيت حزمة البرامج بما أنّ الجهاز الافتراضي (VM) لا يحتوي على عنوان IP خارجي.
أنشئ داخل Cloud Shell جهاز توجيه السحابة الإلكترونية.
gcloud compute routers create netdevice-cr --network netdevice-vpc --region us-central1
داخل Cloud Shell، أنشئ بوابة NAT.
gcloud compute routers nats create cloud-nat-netdevice --router=netdevice-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
إنشاء مثيل netdevice-apache
في القسم التالي، ستنشئ مثيل netdevice-apache.
داخل Cloud Shell، أنشئ المثيل:
gcloud compute instances create netdevice-apache \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=netdevice-apache \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to the netdevice-apache instance !!' | tee /var/www/html/index.html
EOF"
6. إعداد l3-vpc
إنشاء شبكة l3-vpc
داخل Cloud Shell، يمكنك تنفيذ ما يلي:
gcloud compute networks create l3-vpc --project=$projectid --subnet-mode=custom
إنشاء الشبكات الفرعية l3-vpc
داخل Cloud Shell، أنشئ شبكة فرعية أساسية وثانوية. يُستخدم النطاق الثانوي(sec-range-l3-subnet) مع شبكة l3 المتعددة:
gcloud compute networks subnets create l3-subnet --project=$projectid --range=192.168.20.0/24 --network=l3-vpc --region=us-central1 --enable-private-ip-google-access --secondary-range=sec-range-l3-subnet=10.0.8.0/21
داخل Cloud Shell، أنشئ شبكة فرعية لمثيل l3-apache:
gcloud compute networks subnets create l3-apache --project=$projectid --range=172.16.20.0/28 --network=l3-vpc --region=us-central1 --enable-private-ip-google-access
ضبط Cloud Router وNAT
يتم استخدام ترجمة عنوان الشبكة في السحابة الإلكترونية في البرنامج التعليمي لتثبيت حزمة البرامج بما أنّ الجهاز الافتراضي (VM) لا يحتوي على عنوان IP خارجي.
أنشئ داخل Cloud Shell جهاز توجيه السحابة الإلكترونية.
gcloud compute routers create l3-cr --network l3-vpc --region us-central1
داخل Cloud Shell، أنشئ بوابة NAT.
gcloud compute routers nats create cloud-nat-l3 --router=l3-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
إنشاء مثيل l3-apache
في القسم التالي، ستقوم بإنشاء مثيل l3-apache.
داخل Cloud Shell، أنشئ المثيل:
gcloud compute instances create l3-apache \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=l3-apache \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to the l3-apache instance !!' | tee /var/www/html/index.html
EOF"
7. إنشاء مجموعة العقدة المتعددة
في القسم التالي، ستقوم بإنشاء مجموعة عُقد متعددة الأقسام تتكون من العلامات التالية:
–additional-node-network (مطلوبة للواجهات الخاصة بنوع الجهاز)
مثال:
--additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet
–شبكة-عقدة إضافية & –additional-pod-network ( واجهة من النوع L3 مطلوبة)
مثال:
--additional-node-network network=l3-vpc,subnetwork=l3-subnet --additional-pod-network subnetwork=l3-subnet,pod-ipv4-range=sec-range-l3-subnet,max-pods-per-node=8
نوع الجهاز: عند نشر مجموعة العُقد، يجب مراعاة تبعية نوع الجهاز. على سبيل المثال، نوع جهاز مثل "e2-standard-4" التي تتضمّن 4 وحدات معالجة مركزية افتراضية يمكنها دعم ما يصل إلى 4 وحدات معالجة مركزية افتراضية. على سبيل المثال، سيكون هناك إجمالي 3 واجهات في netdevice-l3-pod (الواجهات التلقائية وnetdevice وl3)، وبالتالي يكون نوع الجهاز المستخدَم في البرنامج التعليمي هو e2-standard-4.
داخل Cloud Shell، أنشئ مجموعة العقدة التي تتكون من جهاز Type وL3:
gcloud container --project "$projectid" node-pools create "multinic-node-pool" --cluster "multinic-gke" --zone "us-central1-a" --additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet --additional-node-network network=l3-vpc,subnetwork=l3-subnet --additional-pod-network subnetwork=l3-subnet,pod-ipv4-range=sec-range-l3-subnet,max-pods-per-node=8 --machine-type "e2-standard-4"
8. التحقّق من صحة ميزة "تجميع العُقد" المتعددة
داخل Cloud Shell، يمكنك التحقّق من صحة ثلاث عُقد من خلال مجموعة العُقد المتعددة الأقسام:
kubectl get nodes
مثال:
user@$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-multinic-gke-default-pool-3d419e48-1k2p Ready <none> 15m v1.27.3-gke.100
gke-multinic-gke-default-pool-3d419e48-xckb Ready <none> 15m v1.27.3-gke.100
gke-multinic-gke-multinic-node-pool-135699a1-0tfx Ready <none> 3m51s v1.27.3-gke.100
gke-multinic-gke-multinic-node-pool-135699a1-86gz Ready <none> 3m51s v1.27.3-gke.100
gke-multinic-gke-multinic-node-pool-135699a1-t66p Ready <none> 3m51s v1.27.3-gke.100
9. إنشاء شبكة netdevice
في الخطوات التالية، ستنشئ كائن Network وGKENetworkParamSet kubernetes لإنشاء شبكة netdevice-network التي سيتم استخدامها لربط الأجهزة اللوحية في الخطوات اللاحقة.
إنشاء عنصر netdevice-network
داخل Cloud Shell، أنشِئ كائن الشبكة YAML netdevice-network.yaml باستخدام محرِّر VI أو nano. لاحظ "المسارات إلى" هي الشبكة الفرعية 172.16.10.0/28 (netdevice-apache) في netdevice-vpc.
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: netdevice-network
spec:
type: "Device"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: "netdevice"
routes:
- to: "172.16.10.0/28"
داخل Cloud Shell، طبِّق netdevice-network.yaml:
kubectl apply -f netdevice-network.yaml
داخل Cloud Shell، تحقَّق من أنّ نوع حالة netdevice-network هو جاهز.
kubectl describe networks netdevice-network
مثال:
user@$ kubectl describe networks netdevice-network
Name: netdevice-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:37:38Z
Generation: 1
Resource Version: 1578594
UID: 46d75374-9fcc-42be-baeb-48e074747052
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: netdevice
Routes:
To: 172.16.10.0/28
Type: Device
Status:
Conditions:
Last Transition Time: 2023-07-30T22:37:38Z
Message: GKENetworkParamSet resource was deleted: netdevice
Reason: GNPDeleted
Status: False
Type: ParamsReady
Last Transition Time: 2023-07-30T22:37:38Z
Message: Resource referenced by params is not ready
Reason: ParamsNotReady
Status: False
Type: Ready
Events: <none>
إنشاء GKENetworkParamSet
داخل Cloud Shell، أنشِئ كائن الشبكة YAML netdevice-network-parm.yaml باستخدام محرِّر VI أو nano. يتم ربط المواصفات بنشر الشبكة الفرعية netdevice-vpc.
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: "netdevice"
spec:
vpc: "netdevice-vpc"
vpcSubnet: "netdevice-subnet"
deviceMode: "NetDevice"
داخل Cloud Shell، تطبيق netdevice-network-parm.yaml
kubectl apply -f netdevice-network-parm.yaml
داخل Cloud Shell، يمكنك التحقّق من سبب حالة netdevice-network بسبب GNPParms ready وNetworkPayment:
kubectl describe networks netdevice-network
مثال:
user@$ kubectl describe networks netdevice-network
Name: netdevice-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:37:38Z
Generation: 1
Resource Version: 1579791
UID: 46d75374-9fcc-42be-baeb-48e074747052
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: netdevice
Routes:
To: 172.16.10.0/28
Type: Device
Status:
Conditions:
Last Transition Time: 2023-07-30T22:39:44Z
Message:
Reason: GNPParamsReady
Status: True
Type: ParamsReady
Last Transition Time: 2023-07-30T22:39:44Z
Message:
Reason: NetworkReady
Status: True
Type: Ready
Events: <none>
داخل Cloud Shell، تحقق من صحة مجموعة gkenetworkparamset CIDR كتلة 192.168.10.0/24 المستخدَمة لواجهة المجموعات في خطوة لاحقة.
kubectl describe gkenetworkparamsets.networking.gke.io netdevice
مثال:
user@$ kubectl describe gkenetworkparamsets.networking.gke.io netdevice
Name: netdevice
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: GKENetworkParamSet
Metadata:
Creation Timestamp: 2023-07-30T22:39:43Z
Finalizers:
networking.gke.io/gnp-controller
networking.gke.io/high-perf-finalizer
Generation: 1
Resource Version: 1579919
UID: 6fe36b0c-0091-4b6a-9d28-67596cbce845
Spec:
Device Mode: NetDevice
Vpc: netdevice-vpc
Vpc Subnet: netdevice-subnet
Status:
Conditions:
Last Transition Time: 2023-07-30T22:39:43Z
Message:
Reason: GNPReady
Status: True
Type: Ready
Network Name: netdevice-network
Pod CID Rs:
Cidr Blocks:
192.168.10.0/24
Events: <none>
10. إنشاء الشبكات l3
في الخطوات التالية، ستنشئ كائن Network وGKENetworkParamSet kubernetes لإنشاء الشبكة l3 التي سيتم استخدامها لربط Pods في خطوات لاحقة.
إنشاء كائن الشبكة l3
داخل Cloud Shell، أنشئ كائن الشبكة YAML l3-network.yaml باستخدام محرِّر VI أو nano. لاحظ "المسارات إلى" هي الشبكة الفرعية 172.16.20.0/28 (l3-apache) في l3-vpc.
apiVersion: networking.gke.io/v1
kind: Network
metadata:
name: l3-network
spec:
type: "L3"
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: "l3-network"
routes:
- to: "172.16.20.0/28"
داخل Cloud Shell، طبِّق l3-network.yaml:
kubectl apply -f l3-network.yaml
داخل Cloud Shell، تحقَّق من أنّ نوع حالة الشبكة l3 هو جاهز.
kubectl describe networks l3-network
مثال:
user@$ kubectl describe networks l3-network
Name: l3-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:43:54Z
Generation: 1
Resource Version: 1582307
UID: 426804be-35c9-4cc5-bd26-00b94be2ef9a
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: l3-network
Routes:
to: 172.16.20.0/28
Type: L3
Status:
Conditions:
Last Transition Time: 2023-07-30T22:43:54Z
Message: GKENetworkParamSet resource was deleted: l3-network
Reason: GNPDeleted
Status: False
Type: ParamsReady
Last Transition Time: 2023-07-30T22:43:54Z
Message: Resource referenced by params is not ready
Reason: ParamsNotReady
Status: False
Type: Ready
Events: <none>
إنشاء GKENetworkParamSet
داخل Cloud Shell، أنشئ كائن الشبكة YAML l3-network-parm.yaml باستخدام محرِّر VI أو nano. لاحظ ربط المواصفات بنشر الشبكة الفرعية l3-vpc.
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: "l3-network"
spec:
vpc: "l3-vpc"
vpcSubnet: "l3-subnet"
podIPv4Ranges:
rangeNames:
- "sec-range-l3-subnet"
داخل Cloud Shell، تطبيق l3-network-parm.yaml
kubectl apply -f l3-network-parm.yaml
داخل Cloud Shell، تحقَّق من أنّ سبب حالة الشبكة l3 هو GNPParms ready وNetwork ready:
kubectl describe networks l3-network
مثال:
user@$ kubectl describe networks l3-network
Name: l3-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:43:54Z
Generation: 1
Resource Version: 1583647
UID: 426804be-35c9-4cc5-bd26-00b94be2ef9a
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: l3-network
Routes:
To: 172.16.20.0/28
Type: L3
Status:
Conditions:
Last Transition Time: 2023-07-30T22:46:14Z
Message:
Reason: GNPParamsReady
Status: True
Type: ParamsReady
Last Transition Time: 2023-07-30T22:46:14Z
Message:
Reason: NetworkReady
Status: True
Type: Ready
Events: <none>
داخل Cloud Shell، تحقّق من صحة gkenetworkparamset l3-network CIDR 10.0.8.0/21 المستخدَم لإنشاء واجهة المجموعة.
kubectl describe gkenetworkparamsets.networking.gke.io l3-network
مثال:
user@$ kubectl describe gkenetworkparamsets.networking.gke.io l3-network
Name: l3-network
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: GKENetworkParamSet
Metadata:
Creation Timestamp: 2023-07-30T22:46:14Z
Finalizers:
networking.gke.io/gnp-controller
Generation: 1
Resource Version: 1583656
UID: 4c1f521b-0088-4005-b000-626ca5205326
Spec:
podIPv4Ranges:
Range Names:
sec-range-l3-subnet
Vpc: l3-vpc
Vpc Subnet: l3-subnet
Status:
Conditions:
Last Transition Time: 2023-07-30T22:46:14Z
Message:
Reason: GNPReady
Status: True
Type: Ready
Network Name: l3-network
Pod CID Rs:
Cidr Blocks:
10.0.8.0/21
Events: <none>
11. إنشاء مجموعة netdevice-l3-pod
في القسم التالي، ستنشئ مجموعة netdevice-l3-pod التي تعمل في صندوق النشاطات، والمعروفة باسم "سكين الجيش السويسري". يدعم أكثر من 300 أمر شائع. يتم ضبط مجموعة الإعلانات المتسلسلة للتواصل مع l3-vpc باستخدام eth1 وnetdevice-vpc باستخدام eth2.
داخل Cloud Shell، أنشئ حاوية الصندوق المزدحم باسم netdevice-l3-pod.yaml باستخدام محرِّر VI أو nano.
apiVersion: v1
kind: Pod
metadata:
name: netdevice-l3-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"l3-network"},
{"interfaceName":"eth2","network":"netdevice-network"}
]
spec:
containers:
- name: netdevice-l3-pod
image: busybox
command: ["sleep", "10m"]
ports:
- containerPort: 80
restartPolicy: Always
داخل Cloud Shell، تطبيق netdevice-l3-pod.yaml
kubectl apply -f netdevice-l3-pod.yaml
التحقّق من عملية إنشاء مجموعة netdevice-l3-pod
داخل Cloud Shell، تحقَّق من تشغيل netdevice-l3-pod:
kubectl get pods netdevice-l3-pod
مثال:
user@$ kubectl get pods netdevice-l3-pod
NAME READY STATUS RESTARTS AGE
netdevice-l3-pod 1/1 Running 0 74s
داخل Cloud Shell، تحقَّق من عناوين IP المخصّصة لواجهات Pod.
kubectl get pods netdevice-l3-pod -o yaml
في المثال المقدَّم، يحتوي الحقل networking.gke.io/pod-ips على عناوين IP المرتبطة بواجهات المجموعة من الشبكة l3-network وnetdevice-network. يمكنك الاطّلاع بالتفصيل على عنوان IP التلقائي للشبكة 10.0.1.22 ضمن podIPs:
user@$ kubectl get pods netdevice-l3-pod -o yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"networking.gke.io/default-interface":"eth0","networking.gke.io/interfaces":"[\n{\"interfaceName\":\"eth0\",\"network\":\"default\"},\n{\"interfaceName\":\"eth1\",\"network\":\"l3-network\"},\n{\"interfaceName\":\"eth2\",\"network\":\"netdevice-network\"}\n]\n"},"name":"netdevice-l3-pod","namespace":"default"},"spec":{"containers":[{"command":["sleep","10m"],"image":"busybox","name":"netdevice-l3-pod","ports":[{"containerPort":80}]}],"restartPolicy":"Always"}}
networking.gke.io/default-interface: eth0
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"l3-network"},
{"interfaceName":"eth2","network":"netdevice-network"}
]
networking.gke.io/pod-ips: '[{"networkName":"l3-network","ip":"10.0.8.4"},{"networkName":"netdevice-network","ip":"192.168.10.2"}]'
creationTimestamp: "2023-07-30T22:49:27Z"
name: netdevice-l3-pod
namespace: default
resourceVersion: "1585567"
uid: d9e43c75-e0d1-4f31-91b0-129bc53bbf64
spec:
containers:
- command:
- sleep
- 10m
image: busybox
imagePullPolicy: Always
name: netdevice-l3-pod
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
networking.gke.io.networks/l3-network.IP: "1"
networking.gke.io.networks/netdevice-network: "1"
networking.gke.io.networks/netdevice-network.IP: "1"
requests:
networking.gke.io.networks/l3-network.IP: "1"
networking.gke.io.networks/netdevice-network: "1"
networking.gke.io.networks/netdevice-network.IP: "1"
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-f2wpb
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: gke-multinic-gke-multinic-node-pool-135699a1-86gz
preemptionPolicy: PreemptLowerPriority
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
- effect: NoSchedule
key: networking.gke.io.networks/l3-network.IP
operator: Exists
- effect: NoSchedule
key: networking.gke.io.networks/netdevice-network
operator: Exists
- effect: NoSchedule
key: networking.gke.io.networks/netdevice-network.IP
operator: Exists
volumes:
- name: kube-api-access-f2wpb
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3607
path: token
- configMap:
items:
- key: ca.crt
path: ca.crt
name: kube-root-ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2023-07-30T22:49:28Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2023-07-30T22:49:33Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2023-07-30T22:49:33Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2023-07-30T22:49:28Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: containerd://dcd9ead2f69824ccc37c109a47b1f3f5eb7b3e60ce3865e317dd729685b66a5c
image: docker.io/library/busybox:latest
imageID: docker.io/library/busybox@sha256:3fbc632167424a6d997e74f52b878d7cc478225cffac6bc977eedfe51c7f4e79
lastState: {}
name: netdevice-l3-pod
ready: true
restartCount: 0
started: true
state:
running:
startedAt: "2023-07-30T22:49:32Z"
hostIP: 192.168.0.4
phase: Running
podIP: 10.0.1.22
podIPs:
- ip: 10.0.1.22
qosClass: BestEffort
startTime: "2023-07-30T22:49:28Z"
التحقّق من صحة مسارات netdevice-l3-pod
داخل Cloud Shell، يمكنك التحقّق من صحة المسارات إلى netdevice-vpc وl3-vpc من netdevice-l3-pod:
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
من خلال إنشاء المثيل، تحقَّق من صحة واجهات المجموعة:
ifconfig
في هذا المثال، يتصل eth0 بالشبكة التلقائية، ويتصل eth1 بشبكة l3، ويتصل eth2 بشبكة netdevice.
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 26:E3:1B:14:6E:0C
inet addr:10.0.1.22 Bcast:10.0.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:446 (446.0 B) TX bytes:558 (558.0 B)
eth1 Link encap:Ethernet HWaddr 92:78:4E:CB:F2:D4
inet addr:10.0.8.4 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:446 (446.0 B) TX bytes:516 (516.0 B)
eth2 Link encap:Ethernet HWaddr 42:01:C0:A8:0A:02
inet addr:192.168.10.2 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:73 errors:0 dropped:0 overruns:0 frame:0
TX packets:50581 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26169 (25.5 KiB) TX bytes:2148170 (2.0 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
من netdevice-l3-pod بالتحقق من صحة المسارات إلى netdevice-vpc (172.16.10.0/28) وl3-vpc (172.16.20.0/28).
قم بتكوين المثيل، وتحقق من صحة مسارات المجموعات:
ip route
مثال:
/ # ip route
default via 10.0.1.1 dev eth0 #primary-vpc
10.0.1.0/24 via 10.0.1.1 dev eth0 src 10.0.1.22
10.0.1.1 dev eth0 scope link src 10.0.1.22
10.0.8.0/21 via 10.0.8.1 dev eth1 #l3-vpc (sec-range-l3-subnet)
10.0.8.1 dev eth1 scope link
172.16.10.0/28 via 192.168.10.1 dev eth2 #netdevice-vpc (netdevice-apache subnet)
172.16.20.0/28 via 10.0.8.1 dev eth1 #l3-vpc (l3-apache subnet)
192.168.10.0/24 via 192.168.10.1 dev eth2 #pod interface subnet
192.168.10.1 dev eth2 scope link
للرجوع إلى هيكل السحابة الإلكترونية، عليك الخروج من المجموعة من المثيل.
exit
12. إنشاء مجموعة l3-pod
في القسم التالي، ستنشئ صِنج l3-pod running box، ويُعرف باسم "سكين الجيش السويسري" يدعم أكثر من 300 أمر شائع. يتم ضبط مجموعة الإعلانات المتسلسلة للتواصل مع l3-vpc باستخدام eth1 فقط.
داخل Cloud Shell، أنشئ حاوية الصندوق المزدحم باسم l3-pod.yaml باستخدام محرِّر VI أو nano.
apiVersion: v1
kind: Pod
metadata:
name: l3-pod
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"l3-network"}
]
spec:
containers:
- name: l3-pod
image: busybox
command: ["sleep", "10m"]
ports:
- containerPort: 80
restartPolicy: Always
داخل Cloud Shell، تطبيق l3-pod.yaml
kubectl apply -f l3-pod.yaml
التحقّق من إنشاء مجموعة l3-pod
داخل Cloud Shell، تحقَّق من تشغيل netdevice-l3-pod:
kubectl get pods l3-pod
مثال:
user@$ kubectl get pods l3-pod
NAME READY STATUS RESTARTS AGE
l3-pod 1/1 Running 0 52s
داخل Cloud Shell، تحقَّق من عناوين IP المخصّصة لواجهات Pod.
kubectl get pods l3-pod -o yaml
في المثال المقدَّم، يحتوي الحقل networking.gke.io/pod-ips على عناوين IP المرتبطة بواجهات المجموعة من شبكة l3. يمكنك الاطّلاع بالتفصيل على عنوان IP التلقائي للشبكة 10.0.2.12 ضمن podIPs:
user@$ kubectl get pods l3-pod -o yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"networking.gke.io/default-interface":"eth0","networking.gke.io/interfaces":"[\n{\"interfaceName\":\"eth0\",\"network\":\"default\"},\n{\"interfaceName\":\"eth1\",\"network\":\"l3-network\"}\n]\n"},"name":"l3-pod","namespace":"default"},"spec":{"containers":[{"command":["sleep","10m"],"image":"busybox","name":"l3-pod","ports":[{"containerPort":80}]}],"restartPolicy":"Always"}}
networking.gke.io/default-interface: eth0
networking.gke.io/interfaces: |
[
{"interfaceName":"eth0","network":"default"},
{"interfaceName":"eth1","network":"l3-network"}
]
networking.gke.io/pod-ips: '[{"networkName":"l3-network","ip":"10.0.8.22"}]'
creationTimestamp: "2023-07-30T23:22:29Z"
name: l3-pod
namespace: default
resourceVersion: "1604447"
uid: 79a86afd-2a50-433d-9d48-367acb82c1d0
spec:
containers:
- command:
- sleep
- 10m
image: busybox
imagePullPolicy: Always
name: l3-pod
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
networking.gke.io.networks/l3-network.IP: "1"
requests:
networking.gke.io.networks/l3-network.IP: "1"
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-w9d24
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: gke-multinic-gke-multinic-node-pool-135699a1-t66p
preemptionPolicy: PreemptLowerPriority
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
- effect: NoSchedule
key: networking.gke.io.networks/l3-network.IP
operator: Exists
volumes:
- name: kube-api-access-w9d24
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3607
path: token
- configMap:
items:
- key: ca.crt
path: ca.crt
name: kube-root-ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2023-07-30T23:22:29Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2023-07-30T23:22:35Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2023-07-30T23:22:35Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2023-07-30T23:22:29Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: containerd://1d5fe2854bba0a0d955c157a58bcfd4e34cecf8837edfd7df2760134f869e966
image: docker.io/library/busybox:latest
imageID: docker.io/library/busybox@sha256:3fbc632167424a6d997e74f52b878d7cc478225cffac6bc977eedfe51c7f4e79
lastState: {}
name: l3-pod
ready: true
restartCount: 0
started: true
state:
running:
startedAt: "2023-07-30T23:22:35Z"
hostIP: 192.168.0.5
phase: Running
podIP: 10.0.2.12
podIPs:
- ip: 10.0.2.12
qosClass: BestEffort
startTime: "2023-07-30T23:22:29Z"
التحقّق من صحة المسارات l3-pod
داخل Cloud Shell، يمكنك التحقّق من صحة المسارات إلى l3-vpc من netdevice-l3-pod:
kubectl exec --stdin --tty l3-pod -- /bin/sh
من خلال إنشاء المثيل، تحقَّق من صحة واجهات المجموعة:
ifconfig
في هذا المثال، يتم توصيل eth0 بالشبكة التلقائية، بينما يتم توصيل eth1 بشبكة l3.
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 22:29:30:09:6B:58
inet addr:10.0.2.12 Bcast:10.0.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:446 (446.0 B) TX bytes:558 (558.0 B)
eth1 Link encap:Ethernet HWaddr 6E:6D:FC:C3:FF:AF
inet addr:10.0.8.22 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:446 (446.0 B) TX bytes:516 (516.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
من l3-pod التحقق من صحة المسارات إلى l3-vpc (172.16.20.0/28).
قم بتكوين المثيل، وتحقق من صحة مسارات المجموعات:
ip route
مثال:
/ # ip route
default via 10.0.2.1 dev eth0 #primary-vpc
10.0.2.0/24 via 10.0.2.1 dev eth0 src 10.0.2.12
10.0.2.1 dev eth0 scope link src 10.0.2.12
10.0.8.0/21 via 10.0.8.17 dev eth1 #l3-vpc (sec-range-l3-subnet)
10.0.8.17 dev eth1 scope link #pod interface subnet
172.16.20.0/28 via 10.0.8.17 dev eth1 #l3-vpc (l3-apache subnet)
للرجوع إلى هيكل السحابة الإلكترونية، عليك الخروج من المجموعة من المثيل.
exit
13. تحديثات جدار الحماية
يجب السماح بالاتصال من ميزة "مجمّع GKE المتعدد النطاقات" بقواعد جدار الحماية للدخول إلى netdevice-vpc وl3-vpc. ستنشئ قواعد جدار حماية تحدد النطاق المصدر كشبكة فرعية للشبكة المتسلسلة، على سبيل المثال netdevice-subnet وsec-range-l3-subnet.
على سبيل المثال، الحاوية التي تمّ إنشاؤها مؤخرًا، l3-pod، الواجهة eth2، 10.0.8.22 (المخصّصة من شبكة sec-range-l3-subnet) هي عنوان IP المصدر عند الاتصال بمثيل l3-apache في l3-vpc.
netdevice-vpc: السماح بالوصول من netdevice-subnet إلى netdevice-apache
داخل Cloud Shell، أنشِئ قاعدة جدار حماية في netdevice-vpc للسماح بوصول netdevice-subnet إلى مثيل netdevice-apache.
gcloud compute --project=$projectid firewall-rules create allow-ingress-from-netdevice-network-to-all-vpc-instances --direction=INGRESS --priority=1000 --network=netdevice-vpc --action=ALLOW --rules=all --source-ranges=192.168.10.0/24 --enable-logging
l3-vpc: السماح من sec-range-l3-subnet إلى l3-apache
داخل Cloud Shell، أنشئ قاعدة جدار حماية في l3-vpc للسماح بوصول sec-range-l3-subnet إلى مثيل l3-apache.
gcloud compute --project=$projectid firewall-rules create allow-ingress-from-l3-network-to-all-vpc-instances --direction=INGRESS --priority=1000 --network=l3-vpc --action=ALLOW --rules=all --source-ranges=10.0.8.0/21 --enable-logging
14. التحقّق من اتصال المجموعة
في القسم التالي، ستتحقّق من الاتصال بمثيلات Apache من netdevice-l3-pod وl3-pod من خلال تسجيل الدخول إلى اللوحات وتشغيل ملف wget -S الذي يتحقّق من عملية تنزيل الصفحة الرئيسية لخوادم Apache. بما أنّه يتم ضبط واجهة netdevice-l3-pod باستخدام واجهات من netdevice-network وl3-network، يمكنك الاتصال بخوادم Apache في كلّ من netdevice-vpc وl3-vpc.
في المقابل، عند تنفيذ wget -S من l3-pod، لا يكون الاتصال بخادم Apache في netdevice-vpc ممكنًا لأنّ l3-pod يتمّ إعداده بواجهة من شبكة l3 فقط.
الحصول على عنوان IP لخادم Apache
من Cloud Console، يمكنك الحصول على عنوان IP لخوادم Apache من خلال الانتقال إلى Compute Engine ← مثيلات الجهاز الافتراضي (VM).
اختبار الاتصال بـ netdevice-l3-pod إلى netdevice-apache
داخل Cloud Shell، سجِّل الدخول إلى netdevice-l3-pod:
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
من الحاوية، نفِّذ فحص اتصال لمثيل netdevice-apache استنادًا إلى عنوان IP الذي تم الحصول عليه من الخطوة السابقة.
ping <insert-your-ip> -c 4
مثال:
/ # ping 172.16.10.2 -c 4
PING 172.16.10.2 (172.16.10.2): 56 data bytes
64 bytes from 172.16.10.2: seq=0 ttl=64 time=1.952 ms
64 bytes from 172.16.10.2: seq=1 ttl=64 time=0.471 ms
64 bytes from 172.16.10.2: seq=2 ttl=64 time=0.446 ms
64 bytes from 172.16.10.2: seq=3 ttl=64 time=0.505 ms
--- 172.16.10.2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.446/0.843/1.952 ms
/ #
داخل Cloud Shell، نفِّذ مثيل wget -S إلى netdevice-apache استنادًا إلى عنوان IP الذي تم الحصول عليه من الخطوة السابقة، ويشير الرمز 200 OK إلى تنزيل صفحة الويب بنجاح.
wget -S <insert-your-ip>
مثال:
/ # wget -S 172.16.10.2
Connecting to 172.16.10.2 (172.16.10.2:80)
HTTP/1.1 200 OK
Date: Mon, 31 Jul 2023 03:12:58 GMT
Server: Apache/2.4.56 (Debian)
Last-Modified: Sat, 29 Jul 2023 00:32:44 GMT
ETag: "2c-6019555f54266"
Accept-Ranges: bytes
Content-Length: 44
Connection: close
Content-Type: text/html
saving to 'index.html'
index.html 100% |********************************| 44 0:00:00 ETA
'index.html' saved
/ #
اختبار اتصال netdevice-l3-pod إلى l3-apache
داخل Cloud Shell، نفِّذ اختبار اتصال لمثيل l3-apache استنادًا إلى عنوان IP الذي تم الحصول عليه من الخطوة السابقة.
ping <insert-your-ip> -c 4
مثال:
/ # ping 172.16.20.3 -c 4
PING 172.16.20.3 (172.16.20.3): 56 data bytes
64 bytes from 172.16.20.3: seq=0 ttl=63 time=2.059 ms
64 bytes from 172.16.20.3: seq=1 ttl=63 time=0.533 ms
64 bytes from 172.16.20.3: seq=2 ttl=63 time=0.485 ms
64 bytes from 172.16.20.3: seq=3 ttl=63 time=0.462 ms
--- 172.16.20.3 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.462/0.884/2.059 ms
/ #
داخل Cloud Shell، احذف ملف index.html السابق ونفِّذ مثيل wget -S إلى l3-apache استنادًا إلى عنوان IP الذي تم الحصول عليه من الخطوة السابقة، ويشير الرمز 200 OK إلى تنزيل صفحة الويب بنجاح.
rm index.html
wget -S <insert-your-ip>
مثال:
/ # rm index.html
/ # wget -S 172.16.20.3
Connecting to 172.16.20.3 (172.16.20.3:80)
HTTP/1.1 200 OK
Date: Mon, 31 Jul 2023 03:41:32 GMT
Server: Apache/2.4.56 (Debian)
Last-Modified: Mon, 31 Jul 2023 03:24:21 GMT
ETag: "25-601bff76f04b7"
Accept-Ranges: bytes
Content-Length: 37
Connection: close
Content-Type: text/html
saving to 'index.html'
index.html 100% |*******************************************************************************************************| 37 0:00:00 ETA
'index.html' saved
للرجوع إلى هيكل السحابة الإلكترونية، عليك الخروج من المجموعة من المثيل.
exit
اختبار الربط بين netdevice-apache وl3-pod
داخل Cloud Shell، سجِّل الدخول إلى l3-pod:
kubectl exec --stdin --tty l3-pod -- /bin/sh
من الحاوية، نفِّذ فحص اتصال لمثيل netdevice-apache استنادًا إلى عنوان IP الذي تم الحصول عليه من الخطوة السابقة. لن يتم تنفيذ اختبار الاتصال نظرًا لعدم توفّر واجهة مرتبطة بشبكة netdevice-pod.
ping <insert-your-ip> -c 4
مثال:
/ # ping 172.16.10.2 -c 4
PING 172.16.10.2 (172.16.10.2): 56 data bytes
--- 172.16.10.2 ping statistics ---
4 packets transmitted, 0 packets received, 100% packet loss
اختياري: داخل Cloud Shell، يمكنك تنفيذ مثيل wget -S على netdevice-apache استنادًا إلى عنوان IP الذي تم الحصول عليه من الخطوة السابقة التي ستنتهي صلاحيتها.
wget -S <insert-your-ip>
مثال:
/ # wget -S 172.16.10.2
Connecting to 172.16.10.2 (172.16.10.2:80)
wget: can't connect to remote host (172.16.10.2): Connection timed out
اختبار اتصال l3-pod إلى l3-apache
داخل Cloud Shell، نفِّذ اختبار اتصال لمثيل l3-apache استنادًا إلى عنوان IP الذي تم الحصول عليه من الخطوة السابقة.
ping <insert-your-ip> -c 4
مثال:
/ # ping 172.16.20.3 -c 4
PING 172.16.20.3 (172.16.20.3): 56 data bytes
64 bytes from 172.16.20.3: seq=0 ttl=63 time=1.824 ms
64 bytes from 172.16.20.3: seq=1 ttl=63 time=0.513 ms
64 bytes from 172.16.20.3: seq=2 ttl=63 time=0.482 ms
64 bytes from 172.16.20.3: seq=3 ttl=63 time=0.532 ms
--- 172.16.20.3 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.482/0.837/1.824 ms
/ #
داخل Cloud Shell، نفِّذ مثيل wget -S إلى l3-apache استنادًا إلى عنوان IP الذي تم الحصول عليه من الخطوة السابقة، ويشير 200 OK إلى تنزيل صفحة الويب بنجاح.
wget -S <insert-your-ip>
مثال:
/ # wget -S 172.16.20.3
Connecting to 172.16.20.3 (172.16.20.3:80)
HTTP/1.1 200 OK
Date: Mon, 31 Jul 2023 03:52:08 GMT
Server: Apache/2.4.56 (Debian)
Last-Modified: Mon, 31 Jul 2023 03:24:21 GMT
ETag: "25-601bff76f04b7"
Accept-Ranges: bytes
Content-Length: 37
Connection: close
Content-Type: text/html
saving to 'index.html'
index.html 100% |*******************************************************************************************************| 37 0:00:00 ETA
'index.html' saved
/ #
15. سجلات جدار الحماية
يتيح لك تسجيل قواعد جدار الحماية تدقيق تأثيرات قواعد جدار الحماية والتحقق منها وتحليلها. على سبيل المثال، يمكنك تحديد ما إذا كانت قاعدة جدار حماية مصممة لرفض حركة المرور تعمل على النحو المنشود. يفيد تسجيل قواعد جدار الحماية أيضًا إذا كنت تحتاج إلى تحديد عدد الاتصالات المتأثرة بقاعدة جدار حماية معينة.
لقد تم تفعيل تسجيل جدار الحماية في البرنامج التعليمي عند إنشاء قواعد جدار الحماية للدخول. لنلقِ نظرة على المعلومات التي تم الحصول عليها من السجلات.
من Cloud Console، انتقِل إلى "التسجيل" ← Logs Explorer (مستكشف السجلات).
أدخل الاستعلام أدناه حسب لقطة الشاشة وحدد تشغيل الاستعلام jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances")
إن إلقاء نظرة عن قرب على إحدى اللقطات يوفر عناصر معلومات لمشرفي الأمان. بدءًا من عنوان IP للمصدر والوجهة، والمنفذ، والبروتوكول، واسم مجموعة العقدة.
لاستكشاف المزيد من سجلات جدار الحماية، انتقِل إلى شبكة VPC ← جدار الحماية ← Allow-ingress-from-netdevice-network-to-all-vpc-instances، ثم اختَر "عرض" في مستكشف السجلات.
16. تَنظيم
من Cloud Shell، احذف مكوّنات الدليل التوجيهي.
gcloud compute instances delete l3-apache netdevice-apache --zone=us-central1-a --quiet
gcloud compute routers delete l3-cr netdevice-cr --region=us-central1 --quiet
gcloud container clusters delete multinic-gke --zone=us-central1-a --quiet
gcloud compute firewall-rules delete allow-ingress-from-l3-network-to-all-vpc-instances allow-ingress-from-netdevice-network-to-all-vpc-instances --quiet
gcloud compute networks subnets delete l3-apache l3-subnet netdevice-apache netdevice-subnet primary-node-subnet --region=us-central1 --quiet
gcloud compute networks delete l3-vpc netdevice-vpc primary-vpc --quiet
17. تهانينا
تهانينا، لقد تمكّنت من ضبط إعدادات تجميع عُقد متعدّدة الأطراف والتحقّق من صحتها وإنشاء مجموعات متعدّدة تعمل في صندوق النشاط من أجل التحقّق من اتصال L3 ونوع الجهاز بخوادم Apache باستخدام نظامَي PIN وwget.
وتعلّمت أيضًا كيفية الاستفادة من سجلّات جدار الحماية لفحص حزم المصدر والوجهة بين حاويات Pod وخوادم Apache.
يعتبر تطبيق Cosmopup الفيديوهات التعليمية رائعة.