نشر والتحقق من صحة GKE NFO Multi-Network & واجهة عالية الأداء

1. مقدمة

يتيح Google Cloud Platform استخدام واجهات متعددة على مستوى مثيل الأجهزة الافتراضية منذ فترة طويلة. يمكن للجهاز الافتراضي ربط ما يصل إلى 7 واجهات جديدة (الواجهات التلقائية + 7 واجهات) بوحدات سحابة VPC مختلفة باستخدام الواجهات المتعددة. تعمل شبكة GKE على توسيع نطاق هذا السلوك ليشمل مجموعات الأجهزة المتسلسلة التي تعمل على العُقد. قبل استخدام هذه الميزة، أتاحت مجموعات GKE لجميع NodePool واجهة واحدة فقط، وبالتالي يتم ربطها بـ VPC واحد. من خلال ميزة "الشبكات المتعددة على الأجهزة المتسلسلة"، يمكن للمستخدم الآن تفعيل أكثر من واجهة واحدة على العُقد ولللوحات في مجموعة GKE.

ما الذي ستنشئه

في هذا البرنامج التعليمي، ستنشئ بيئة شاملة ومتعددة لأنظمة GKE متعددة توضّح حالات الاستخدام كما هو موضّح في الشكل 1.

  1. أنشئ مجموعة netdevice-l3-pod التي تستفيد من عرضتشغيل نسبة المشاهدة من أجل:
  2. قم بـ PING & wget -S إلى مثيل netdevice-apache في netdevice-vpc عبر eth2
  3. قم بـ PING & wget -S إلى l3-apache في l3-vpc بدلاً من eth1
  4. إنشاء لوحة l3-pod للاستفادة من النطاق المُربِك لإجراء رقم التعريف الشخصي (PING) wget -S إلى مثيل l3-apache عبر eth1

في كلتا حالتَي الاستخدام، تكون واجهة eth0 للمجموعة الصغيرة متصلة بالشبكة التلقائية.

على شكل 1

9d93019ee608587f.png

المعلومات التي ستطّلع عليها

  • كيفية إنشاء شبكة فرعية من النوع 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).

fee492b4fd303859.png

اختبار الاتصال بـ 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")

280d00f2c5ce6109.png

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

ae4638ed9b718ac6.png

لاستكشاف المزيد من سجلات جدار الحماية، انتقِل إلى شبكة 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 الفيديوهات التعليمية رائعة.

e6d3675ca7c6911f.jpeg

تعزيز القراءة الفيديوهات

المستندات المرجعية