استقرار و اعتبارسنجی GKE NFO Multi-Network & رابط با کارایی بالا

1. مقدمه

GCP برای مدت طولانی از چندین رابط در سطح نمونه VM پشتیبانی می کند. با چند رابط، یک VM می تواند تا 7 رابط جدید (پیش فرض + 7 رابط) را به VPC های مختلف متصل کند. شبکه GKE اکنون این رفتار را به پادهایی که روی Node ها اجرا می شوند گسترش می دهد. قبل از این ویژگی، خوشه‌های GKE به همه NodePool‌ها اجازه می‌دادند فقط یک رابط داشته باشند و بنابراین به یک VPC نگاشت شوند. با ویژگی Multi-Network on Pods، کاربر اکنون می تواند بیش از یک رابط را در Nodes و برای Pods در یک Cluster GKE فعال کند.

چیزی که خواهی ساخت

در این آموزش، شما می خواهید یک محیط چندگانه GKE جامع بسازید که موارد استفاده نشان داده شده در شکل 1 را نشان می دهد.

  1. ایجاد netdevice-l3-pod leveraging busybox برای:
  2. یک نمونه PING و wget -S به netdevice-apache در netdevice-vpc روی eth2 انجام دهید.
  3. یک نمونه PING و wget -S به l3-apache در l3-vpc روی eth1 انجام دهید
  4. ایجاد یک busybox با اهرم l3-pod برای انجام نمونه PING و wget -S به l3-apache روی eth1

در هر دو مورد استفاده، رابط eth0 پاد به شبکه پیش فرض متصل است.

شکل 1

9d93019ee608587f.png

چیزی که یاد خواهید گرفت

  • نحوه ایجاد یک زیر شبکه از نوع l3
  • نحوه ایجاد یک زیرشبکه نوع دستگاه نت
  • چگونه یک نودپول GKE چندنیک ایجاد کنیم
  • نحوه ایجاد یک پاد با قابلیت netdevice و l3
  • نحوه ایجاد یک پاد با قابلیت l3
  • نحوه ایجاد و اعتبار سنجی شبکه شی GKE
  • نحوه تأیید اعتبار اتصال به سرورهای Apache راه دور با استفاده از PING، wget و گزارش‌های فایروال

آنچه شما نیاز دارید

  • پروژه Google Cloud

2. اصطلاحات و مفاهیم

Primary VPC: VPC اولیه یک VPC از پیش پیکربندی شده است که دارای مجموعه ای از تنظیمات و منابع پیش فرض است. خوشه GKE در این VPC ایجاد شده است.

زیرشبکه: در Google Cloud، یک زیرشبکه راهی برای ایجاد مسیریابی بین دامنه‌ای بدون کلاس (CIDR) با ماسک‌های شبکه در VPC است. یک زیرشبکه دارای یک محدوده آدرس IP اصلی است که به گره ها اختصاص داده می شود و می تواند چندین محدوده ثانویه داشته باشد که می تواند به Pods و Services تعلق داشته باشد.

Node-Network: گره-شبکه به ترکیبی اختصاصی از یک جفت VPC و زیرشبکه اشاره دارد. در این شبکه گره، گره‌های متعلق به مجموعه گره، آدرس‌های IP را از محدوده آدرس IP اولیه تخصیص می‌دهند.

محدوده ثانویه: یک محدوده ثانویه Google Cloud یک CIDR و ماسک شبکه متعلق به یک منطقه در VPC است. GKE از این به عنوان یک شبکه Pod Layer 3 استفاده می کند. یک VPC می تواند چندین محدوده ثانویه داشته باشد و یک Pod می تواند به چندین شبکه Pod متصل شود.

شبکه (L3 یا دستگاه): یک شیء شبکه که به عنوان نقطه اتصال برای Pods عمل می کند. در آموزش شبکه ها l3-network و netdevice-network هستند که دستگاه می تواند netdevice یا dpdk باشد. شبکه پیش‌فرض اجباری است و پس از ایجاد خوشه بر اساس زیرشبکه پیش‌فرض nodepool ایجاد می‌شود.

شبکه های لایه 3 مربوط به یک محدوده ثانویه در یک زیر شبکه است که به صورت زیر نمایش داده می شود:

VPC -> نام زیر شبکه -> نام محدوده ثانویه

شبکه دستگاه مربوط به یک زیرشبکه در VPC است که به صورت زیر نمایش داده می شود:

VPC -> نام زیر شبکه

شبکه پیش‌فرض پاد: Google Cloud در طول ایجاد خوشه، یک شبکه پاد پیش‌فرض ایجاد می‌کند. شبکه پیش‌فرض Pod از VPC اولیه به عنوان شبکه گره استفاده می‌کند. شبکه پیش‌فرض Pod به‌طور پیش‌فرض در تمام گره‌های خوشه‌ای و Pods موجود است.

Pods با چندین رابط: پادهای با چندین رابط در GKE نمی توانند به یک Pod-network متصل شوند زیرا هر رابط Pod باید به یک شبکه منحصر به فرد متصل شود.

پروژه را برای پشتیبانی از Codelab به روز کنید

این Codelab از متغیرهای $ برای کمک به پیاده سازی پیکربندی 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

خوشه multinic-gke را اعتبارسنجی کنید

در داخل 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، زیرشبکه مورد استفاده برای شبکه چندگانه را ایجاد کنید:

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

روتر ابری و پیکربندی NAT

Cloud 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) برای شبکه multinic 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

روتر ابری و پیکربندی NAT

Cloud 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. نودپول multinic را ایجاد کنید

در بخش زیر، یک گره‌پول چندگانه متشکل از پرچم‌های زیر ایجاد می‌کنید:

- شبکه گره اضافی (برای رابط های نوع دستگاه لازم است)

مثال:

--additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet

شبکه-گره-اضافی و-شبکه-پاد-اضافی (برای رابط های نوع 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

نوع ماشین: هنگام استقرار Node Pool، وابستگی نوع ماشین را در نظر بگیرید. به عنوان مثال، نوع ماشینی مانند "e2-standard-4" با 4 vCPU می تواند تا 4 VPC را در مجموع پشتیبانی کند. به عنوان مثال، netdevice-l3-pod در مجموع دارای 3 رابط (پیش‌فرض، netdevice و l3) خواهد بود، بنابراین نوع دستگاه مورد استفاده در آموزش e2-standard-4 است.

در داخل Cloud Shell، گره‌پول متشکل از Type Device و 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، اعتبارسنجی سه گره از multinic-node-pool تولید می‌شود:

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 را ایجاد کنید که برای مرتبط کردن Pods در مراحل بعدی استفاده می‌شود.

شیء netdevice-network را ایجاد کنید

در داخل Cloud Shell، شی شبکه YAML netdevice-network.yaml را با استفاده از ویرایشگر VI یا nano ایجاد کنید. توجه داشته باشید که "routes to" زیر شبکه 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، تأیید کنید که نوع وضعیت دستگاه شبکه آماده است.

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 یا نانو ایجاد کنید. مشخصات به استقرار زیرشبکه 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، دلیل وضعیت شبکه-شبکه GNPParmsReady و NetworkReady را تأیید کنید:

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 مورد استفاده برای رابط Pod(ها) را در مرحله بعد تأیید کنید.

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 ایجاد کنید. توجه داشته باشید که "routes to" زیر شبکه 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 را تأیید کنید که دلیل وضعیت GNPParmsReady و NetworkReady است:

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 در حال اجرا busybox را ایجاد می‌کنید که به عنوان "چاقوی ارتش سوئیس" شناخته می‌شود که بیش از 300 دستور رایج را پشتیبانی می‌کند. پاد برای ارتباط با l3-vpc با استفاده از eth1 و netdevice-vpc با استفاده از eth2 پیکربندی شده است.

در داخل Cloud Shell، با استفاده از ویرایشگر VI یا nano، محفظه جعبه اشغالی به نام netdevice-l3-pod.yaml را ایجاد کنید.

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 مرتبط با رابط‌های pod از شبکه l3 و netdevice-network است. آدرس IP شبکه پیش‌فرض 10.0.1.22 در زیر podIPها شرح داده شده است:

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

نمونه را تشکیل دهید، واسط های pod را اعتبار سنجی کنید:

ifconfig

در مثال، eth0 به شبکه پیش فرض، eth1 به شبکه l3 و eth2 به شبکه دستگاه شبکه متصل است.

/ # 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) اعتبارسنجی کنید.

نمونه را تشکیل دهید، مسیرهای pod را تأیید کنید:

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 busybox را ایجاد می‌کنید که به عنوان "چاقوی ارتش سوئیس" شناخته می‌شود که بیش از 300 دستور رایج را پشتیبانی می‌کند. پاد برای ارتباط با l3-vpc فقط با استفاده از eth1 پیکربندی شده است.

در داخل Cloud Shell، با استفاده از ویرایشگر VI یا نانو، محفظه جعبه اشغالی با نام l3-pod.yaml را ایجاد کنید.

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 در زیر podIPها شرح داده شده است:

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

نمونه را تشکیل دهید، واسط های pod را اعتبار سنجی کنید:

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).

نمونه را تشکیل دهید، مسیرهای pod را تأیید کنید:

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 multicnic-pool به قوانین فایروال ورودی netdevice-vpc و l3-vpc لازم است. شما قوانین فایروال را ایجاد خواهید کرد که محدوده منبع را به عنوان زیرشبکه شبکه pod مشخص می کند، به عنوان مثال 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. اعتبار اتصال غلاف

در بخش بعدی، اتصال به نمونه‌های آپاچی از netdevice-l3-pod و l3-pod را با ورود به پادها و اجرای wget -S که دانلود صفحه اصلی سرورهای آپاچی را تأیید می‌کند، تأیید می‌کنید. از آنجایی که netdevice-l3-pod با رابط های netdevice-network و l3-network پیکربندی شده است، اتصال به سرورهای آپاچی در netdevice-vpc و l3-vpc امکان پذیر است.

در مقابل، هنگام اجرای wget -S از l3-pod، اتصال به سرور آپاچی در netdevice-vpc امکان پذیر نیست زیرا l3-pod فقط با یک رابط از شبکه l3 پیکربندی شده است.

آدرس IP سرور آپاچی را دریافت کنید

از Cloud Console، آدرس IP سرورهای Apache را با رفتن به Compute Engine → Instance 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

تست اتصال l3-pod به netdevice-apache

در داخل Cloud Shell، وارد l3-pod شوید:

kubectl exec --stdin --tty l3-pod   -- /bin/sh

از کانتینر، یک نمونه پینگ به netdevice-apache بر اساس آدرس IP بدست آمده از مرحله قبل انجام دهید. از آنجایی که l3-pod یک رابط مرتبط با netdevice-network ندارد، پینگ با شکست مواجه خواهد شد.

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، به Logging → Logs Explorer بروید

پرس و جوی زیر را در اسکرین شات وارد کنید و Run query jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances") را انتخاب کنید.

280d00f2c5ce6109.png

نگاهی دقیق تر به یک تصویر، عناصر اطلاعاتی را برای مدیران امنیتی فراهم می کند. از آدرس IP مبدا و مقصد، پورت، پروتکل و نام نودپول.

ae4638ed9b718ac6.png

برای کاوش بیشتر گزارش‌های فایروال، به VPC Network → Firewall → allow-ingress-from-netdevice-network-to-all-vpc-instances بروید و سپس view را در Logs Explorer انتخاب کنید.

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. تبریک می گویم

تبریک می‌گوییم، شما با موفقیت پیکربندی و اعتبارسنجی ایجاد یک گره‌پول multinic و ایجاد پادهای در حال اجرا busybox را برای اعتبارسنجی L3 و اتصال نوع دستگاه به سرورهای Apache با استفاده از PING و wget انجام داده‌اید.

همچنین یاد گرفتید که چگونه از لاگ های فایروال برای بازرسی بسته های مبدا و مقصد بین کانتینرهای Pod و سرورهای آپاچی استفاده کنید.

Cosmopup فکر می کند آموزش ها عالی هستند!!

e6d3675ca7c6911f.jpeg

ادامه مطلب و ویدیوها

اسناد مرجع