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

۱. مقدمه

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

آنچه خواهید ساخت

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

  1. ایجاد netdevice-l3-pod با استفاده از 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 مربوط به پاد به شبکه پیش‌فرض متصل است.

شکل ۱

9d93019ee608587f.png

آنچه یاد خواهید گرفت

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

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

  • پروژه ابری گوگل

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

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

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

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

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

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

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

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

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

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

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

پادهایی با چندین رابط: پادهایی با چندین رابط در GKE نمی‌توانند به یک شبکه پاد یکسان متصل شوند زیرا هر رابط پاد باید به یک شبکه منحصر به فرد متصل باشد.

پروژه را برای پشتیبانی از codelab به‌روزرسانی کنید

این Codelab از $variables برای کمک به پیاده‌سازی پیکربندی gcloud در Cloud Shell استفاده می‌کند.

درون Cloud Shell، موارد زیر را انجام دهید:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

۳. تنظیم اولیه 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

۴. ایجاد خوشه GKE

کلاستر خصوصی GKE را ایجاد کنید که زیرشبکه‌های primary-vpc را برای ایجاد nodepool پیش‌فرض با پرچم‌های مورد نیاز –enable-multi-networking و –enable-dataplane-v2 برای پشتیبانی از nodepoolهای چند نیک (multi-nic) مشخص کند.

درون 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، دو گره از default-pool ایجاد می‌شوند:

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

۵. تنظیمات netdevice-vpc

شبکه netdevice-vpc را ایجاد کنید

درون Cloud Shell، موارد زیر را انجام دهید:

gcloud compute networks create netdevice-vpc --project=$projectid --subnet-mode=custom

زیرشبکه‌های netdevice-vpc را ایجاد کنید

درون Cloud Shell، زیرشبکه‌ای که برای multinic netdevice-network استفاده می‌شود را ایجاد کنید:

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 استفاده شده است، زیرا ماشین مجازی آدرس 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، نمونه (instance) را ایجاد کنید:

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"

۶. تنظیمات 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

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

در آموزش نصب بسته نرم‌افزاری، از Cloud NAT استفاده شده است، زیرا ماشین مجازی آدرس 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، نمونه (instance) را ایجاد کنید:

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"

۷. ایجاد nodepool چندکاره

در بخش بعدی، یک nodepool چندکاره متشکل از flag های زیر ایجاد خواهید کرد:

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

مثال:

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

–additional-node-network و –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 vCPU می‌تواند در مجموع تا 4 VPC را پشتیبانی کند. به عنوان مثال، netdevice-l3-pod در مجموع 3 رابط (پیش‌فرض، netdevice و l3) خواهد داشت، بنابراین نوع ماشین مورد استفاده در این آموزش e2-standard-4 است.

درون Cloud Shell، یک nodepool متشکل از یک 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"

۸. اعتبارسنجی استخر گره‌های چندگانه

در داخل 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

۹. ایجاد شبکه netdevice

در مراحل بعدی، یک شیء Network و GKENetworkParamSet kubernetes ایجاد خواهید کرد تا netdevice-network را ایجاد کنید که برای مرتبط کردن Podها در مراحل بعدی استفاده خواهد شد.

شیء 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، تأیید کنید که نوع وضعیت 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 را به دلیل 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، بلوک CIDR مربوط به gkenetworkparamset با شماره 192.168.10.0/24 که برای رابط Pod(s) استفاده می‌شود را در مرحله بعد اعتبارسنجی کنید.

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>

۱۰. شبکه‌های l3 را ایجاد کنید

در مراحل بعدی، یک شیء kubernetes به نام Network و GKENetworkParamSet ایجاد خواهید کرد تا شبکه سطح ۳ را ایجاد کنید که برای مرتبط کردن Podها در مراحل بعدی استفاده خواهد شد.

شیء شبکه 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 که برای ایجاد رابط pod استفاده شده است را اعتبارسنجی کنید.

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>

۱۱. ایجاد netdevice-l3-pod

در بخش بعدی، شما netdevice-l3-pod را ایجاد خواهید کرد که busybox را اجرا می‌کند، که به عنوان "چاقوی ارتش سوئیس" شناخته می‌شود و بیش از 300 دستور رایج را پشتیبانی می‌کند. این pod طوری پیکربندی شده است که با l3-vpc با استفاده از eth1 و netdevice-vpc با استفاده از eth2 ارتباط برقرار کند.

درون Cloud Shell، با استفاده از ویرایشگر VI یا nano، کانتینر busy box با نام 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-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

۱۲. l3-pod را ایجاد کنید

در بخش بعدی، شما یک l3-pod ایجاد خواهید کرد که busybox را اجرا می‌کند، که به عنوان "چاقوی ارتش سوئیس" شناخته می‌شود و بیش از 300 دستور رایج را پشتیبانی می‌کند. این pod طوری پیکربندی شده است که فقط با استفاده از eth1 با l3-vpc ارتباط برقرار کند.

درون Cloud Shell، با استفاده از ویرایشگر VI یا nano، کانتینر busy box با نام 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 مرتبط با رابط‌های pod از l3-network است. آدرس 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

۱۳. به‌روزرسانی‌های فایروال

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

۱۴. اعتبارسنجی اتصال پاد

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

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

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

از Cloud Console، آدرس IP سرورهای آپاچی را با رفتن به Compute Engine → VM instances به دست آورید.

fee492b4fd303859.png

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

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

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

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

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، بر اساس آدرس IP به دست آمده از مرحله قبل، دستور wget -S را برای نمونه netdevice-apache اجرا کنید. 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، بر اساس آدرس IP به دست آمده از مرحله قبل، یک پینگ به نمونه l3-apache انجام دهید.

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 قبلی را حذف کنید و بر اساس آدرس IP به دست آمده از مرحله قبل، دستور wget -S را روی l3-apache اجرا کنید. 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

از داخل کانتینر، بر اساس آدرس IP بدست آمده از مرحله قبل، یک پینگ به نمونه netdevice-apache انجام دهید. از آنجایی که 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، بر اساس آدرس IP به‌دست‌آمده از مرحله قبل که باعث timeout می‌شود، دستور wget -S را روی نمونه netdevice-apache اجرا کنید.

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، بر اساس آدرس IP به دست آمده از مرحله قبل، یک پینگ به نمونه l3-apache انجام دهید.

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، بر اساس آدرس IP به دست آمده از مرحله قبل، دستور wget -S را به l3-apache اجرا کنید. 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
/ #

۱۵. لاگ‌های فایروال

ثبت قوانین فایروال به شما امکان می‌دهد تا اثرات قوانین فایروال خود را ممیزی، تأیید و تجزیه و تحلیل کنید. به عنوان مثال، می‌توانید تعیین کنید که آیا یک قانون فایروال که برای جلوگیری از ترافیک طراحی شده است، همانطور که در نظر گرفته شده عمل می‌کند یا خیر. ثبت قوانین فایروال همچنین در صورتی مفید است که نیاز به تعیین تعداد اتصالات تحت تأثیر یک قانون فایروال مشخص داشته باشید.

در این آموزش، هنگام ایجاد قوانین فایروال ورودی، ثبت وقایع فایروال را فعال کرده‌اید. بیایید نگاهی به اطلاعات به‌دست‌آمده از گزارش‌ها بیندازیم.

از کنسول ابری، به مسیر Logging → Logs Explorer بروید

مطابق تصویر زیر، کوئری زیر را وارد کنید و گزینه Run query jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances") را انتخاب کنید.

۲۸۰d00f2c5ce6109.png

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

ae4638ed9b718ac6.png

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

۱۶. تمیز کردن

از 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

۱۷. تبریک

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

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

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

e6d3675ca7c6911f.jpeg

مطالعه بیشتر و ویدیوها

اسناد مرجع