۱. مقدمه
GCP مدتهاست که از چندین رابط در سطح نمونه ماشین مجازی پشتیبانی میکند. با رابطهای چندگانه، یک ماشین مجازی میتواند تا 7 رابط جدید (پیشفرض + 7 رابط) را به VPCهای مختلف متصل کند. شبکهسازی GKE اکنون این رفتار را به Podهایی که روی Nodeها اجرا میشوند، گسترش میدهد. قبل از این ویژگی، خوشههای GKE به همه NodePoolها اجازه میدادند که فقط یک رابط واحد داشته باشند و بنابراین به یک VPC واحد نگاشت شوند. با ویژگی Multi-Network on Pods، اکنون کاربر میتواند بیش از یک رابط واحد را روی Nodeها و برای Podها در یک خوشه GKE فعال کند.
آنچه خواهید ساخت
در این آموزش، شما یک محیط چندکاره جامع GKE خواهید ساخت که موارد استفاده نشان داده شده در شکل 1 را نشان میدهد.
- ایجاد netdevice-l3-pod با استفاده از busybox برای:
- اجرای دستور PING و wget -S به نمونه netdevice-apache در netdevice-vpc از طریق eth2
- اجرای دستور PING و wget -S به نمونه l3-apache در l3-vpc روی eth1
- ایجاد یک busybox با استفاده از l3-pod برای انجام PING و wget -S به نمونه l3-apache از طریق eth1
در هر دو مورد استفاده، رابط eth0 مربوط به پاد به شبکه پیشفرض متصل است.
شکل ۱

آنچه یاد خواهید گرفت
- نحوه ایجاد زیرشبکه از نوع 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 به دست آورید.

تست اتصال 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") را انتخاب کنید.

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

برای بررسی بیشتر گزارشهای فایروال، به 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 و سرورهای آپاچی استفاده کنید.
کازموپاپ فکر میکند آموزشها فوقالعاده هستند!!
