1. مقدمه
GCP برای مدت طولانی از چندین رابط در سطح نمونه VM پشتیبانی می کند. با چند رابط، یک VM می تواند تا 7 رابط جدید (پیش فرض + 7 رابط) را به VPC های مختلف متصل کند. شبکه GKE اکنون این رفتار را به پادهایی که روی Node ها اجرا می شوند گسترش می دهد. قبل از این ویژگی، خوشههای GKE به همه NodePoolها اجازه میدادند فقط یک رابط داشته باشند و بنابراین به یک VPC نگاشت شوند. با ویژگی Multi-Network on Pods، کاربر اکنون می تواند بیش از یک رابط را در Nodes و برای Pods در یک Cluster GKE فعال کند.
چیزی که خواهی ساخت
در این آموزش، شما می خواهید یک محیط چندگانه GKE جامع بسازید که موارد استفاده نشان داده شده در شکل 1 را نشان می دهد.
- ایجاد netdevice-l3-pod leveraging 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 پاد به شبکه پیش فرض متصل است.
شکل 1
چیزی که یاد خواهید گرفت
- نحوه ایجاد یک زیر شبکه از نوع 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 بدست آورید.
تست اتصال 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") را انتخاب کنید.
نگاهی دقیق تر به یک تصویر، عناصر اطلاعاتی را برای مدیران امنیتی فراهم می کند. از آدرس IP مبدا و مقصد، پورت، پروتکل و نام نودپول.
برای کاوش بیشتر گزارشهای فایروال، به 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 فکر می کند آموزش ها عالی هستند!!