1. परिचय
GCP, वीएम इंस्टेंस लेवल पर लंबे समय से कई इंटरफ़ेस के साथ काम करता है. एक से ज़्यादा इंटरफ़ेस की मदद से, एक वीएम अलग-अलग VPC के साथ, ज़्यादा से ज़्यादा सात नए इंटरफ़ेस (डिफ़ॉल्ट + सात इंटरफ़ेस) कनेक्ट कर सकती है. GKE (जीकेई) नेटवर्किंग अब इस तरीके को नोड पर चलने वाले पॉड के लिए भी उपलब्ध कराता है. इस सुविधा से पहले, GKE (जीकेई) क्लस्टर में सभी NodePools के लिए सिर्फ़ एक इंटरफ़ेस का इस्तेमाल किया जाता था. इसलिए, इन्हें एक VPC पर मैप किया जाता था. पॉड पर मल्टी-नेटवर्क की सुविधा की मदद से, उपयोगकर्ता अब नोड पर और GKE (जीकेई) क्लस्टर में पॉड के लिए एक से ज़्यादा इंटरफ़ेस चालू कर सकते हैं.
आपको क्या बनाना होगा
इस ट्यूटोरियल में, आपको एक ऐसा GKE(जीकेई) मल्टीनिक एनवायरमेंट बनाने की जानकारी मिलेगी जिसमें पहली इमेज में इस्तेमाल के उदाहरणों को दिखाया गया है.
- व्यस्तबॉक्स का इस्तेमाल करके netdevice-l3-pod बनाएं:
- पिन करें और earth2 पर netdevice-vpc में wget -S से netdevice-apache इंस्टेंस पर
- पिन करें और earth1 के ऊपर l3-vpc में wget -S से l3-apache इंस्टेंस
- पिनजी परफ़ॉर्म करने के लिए, बिज़ीबॉक्स का इस्तेमाल करके l3-पॉड बनाएं और earth1 के ऊपर wget -S से l3-apache इंस्टेंस
इस्तेमाल के दोनों उदाहरणों में, पॉड का ef0 इंटरफ़ेस, डिफ़ॉल्ट नेटवर्क से कनेक्ट रहता है.
इमेज 1
आपको इनके बारे में जानकारी मिलेगी
- l3 टाइप का सबनेट बनाने का तरीका
- netdevice टाइप सबनेट बनाने का तरीका
- मल्टी-निक GKE नोडपूल सेट अप करने का तरीका
- netdevice और l3 की क्षमताओं के साथ पॉड बनाने का तरीका
- l3 की क्षमताओं वाला पॉड कैसे बनाएं
- GKE (जीकेई) ऑब्जेक्ट नेटवर्क बनाने और उसकी पुष्टि करने का तरीका
- PING, wget और फ़ायरवॉल लॉग का उपयोग करके रिमोट Apache सर्वर से कनेक्टिविटी की पुष्टि कैसे करें
आपको इन चीज़ों की ज़रूरत होगी
- Google Cloud प्रोजेक्ट
2. शब्दावली और सिद्धांत
प्राइमरी VPC: प्राइमरी VPC, पहले से कॉन्फ़िगर किया गया VPC है, जो डिफ़ॉल्ट सेटिंग और संसाधनों के एक सेट के साथ आता है. इस VPC में, GKE (जीकेई) क्लस्टर बनाया गया है.
सबनेट: Google Cloud में, सबनेट VPC में नेटमास्क के साथ क्लासलेस इंटर-डोमेन रूटिंग (सीआईडीआर) बनाने का तरीका है. सबनेट में एक प्राइमरी आईपी पते की रेंज होती है, जो नोड को असाइन की जाती है. साथ ही, इसमें कई सेकंडरी रेंज हो सकती हैं जो पॉड और सेवाओं से जुड़ी हो सकती हैं.
नोड-नेटवर्क: नोड-नेटवर्क, VPC और सबनेट पेयर के खास कॉम्बिनेशन के बारे में बताता है. इस नोड-नेटवर्क में, नोड पूल से जुड़े नोड को मुख्य आईपी पते की रेंज के आईपी पतों में बांट दिया जाता है.
सेकंडरी रेंज: Google Cloud की सेकंडरी रेंज, VPC में किसी क्षेत्र से जुड़े सीआईडीआर और नेटमास्क को कहा जाता है. GKE (जीकेई), इसका इस्तेमाल लेयर 3 पॉड-नेटवर्क के तौर पर करता है. VPC में कई सेकंडरी रेंज हो सकती हैं और पॉड को कई पॉड-नेटवर्क से कनेक्ट किया जा सकता है.
नेटवर्क (L3 या डिवाइस): एक नेटवर्क ऑब्जेक्ट जो पॉड के लिए कनेक्शन पॉइंट के तौर पर काम करता है. ट्यूटोरियल में नेटवर्क, l3-network और netdevice-network हैं. इनमें डिवाइस, netdevice या dpdk हो सकता है. डिफ़ॉल्ट नेटवर्क ज़रूरी है और इसे डिफ़ॉल्ट-नोडपूल सबनेट के आधार पर क्लस्टर बनाए जाने के बाद बनाया गया है.
लेयर 3 नेटवर्क, सबनेट पर सेकंडरी रेंज से जुड़े होते हैं. इसे इस तरह दिखाया जाता है:
वीपीसी -> सबनेट का नाम -> सेकंडरी रेंज का नाम
डिवाइस नेटवर्क, VPC पर मौजूद सबनेट से जुड़ा होता है. इसे इस तरह से दिखाया जाता है:
वीपीसी -> सबनेट का नाम
डिफ़ॉल्ट पॉड-नेटवर्क: क्लस्टर बनाने के दौरान, Google Cloud एक डिफ़ॉल्ट पॉड-नेटवर्क बनाता है. डिफ़ॉल्ट पॉड-नेटवर्क, नोड-नेटवर्क के तौर पर प्राइमरी VPC का इस्तेमाल करता है. डिफ़ॉल्ट पॉड-नेटवर्क सभी क्लस्टर नोड और पॉड के लिए उपलब्ध है.
एक से ज़्यादा इंटरफ़ेस वाले पॉड: GKE (जीकेई) में कई इंटरफ़ेस वाले पॉड एक ही पॉड-नेटवर्क से कनेक्ट नहीं हो सकते. इसकी वजह यह है कि पॉड का हर इंटरफ़ेस किसी यूनीक नेटवर्क से कनेक्ट होना चाहिए.
कोडलैब के साथ काम करने के लिए प्रोजेक्ट अपडेट करना
यह कोडलैब, Cloud Shell में gcloud कॉन्फ़िगरेशन लागू करने में मदद करने के लिए $variables का इस्तेमाल करता है.
Cloud Shell के अंदर, यह तरीका अपनाएं:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. मुख्य VPC सेटअप
मुख्य VPC बनाना
Cloud Shell के अंदर, यह तरीका अपनाएं:
gcloud compute networks create primary-vpc --project=$projectid --subnet-mode=custom
नोड और सेकंडरी सबनेट बनाना
Cloud Shell के अंदर, यह तरीका अपनाएं:
gcloud compute networks subnets create primary-node-subnet --project=$projectid --range=192.168.0.0/24 --network=primary-vpc --region=us-central1 --enable-private-ip-google-access --secondary-range=sec-range-primay-vpc=10.0.0.0/21
4. GKE (जीकेई) क्लस्टर बनाना
निजी GKE (जीकेई) क्लस्टर बनाएं, जिसमें प्राइमरी-vpc सबनेट के बारे में ज़रूरी फ़्लैग शामिल किए गए हों, ताकि मल्टी-निक नोड पूल के साथ काम करने के लिए ज़रूरी फ़्लैग –enable-multi-networking और –enable-dataplane-v2, के साथ डिफ़ॉल्ट नोडपूल बनाया जा सके.
Cloud Shell के अंदर, GKE (जीकेई) क्लस्टर बनाएं:
gcloud container clusters create multinic-gke \
--zone "us-central1-a" \
--enable-dataplane-v2 \
--enable-ip-alias \
--enable-multi-networking \
--network "primary-vpc" --subnetwork "primary-node-subnet" \
--num-nodes=2 \
--max-pods-per-node=32 \
--cluster-secondary-range-name=sec-range-primay-vpc \
--no-enable-master-authorized-networks \
--release-channel "regular" \
--enable-private-nodes --master-ipv4-cidr "100.100.10.0/28" \
--enable-ip-alias
मल्टीनिक-जीके क्लस्टर की पुष्टि करना
Cloud Shell के अंदर, क्लस्टर की मदद से पुष्टि करें:
gcloud container clusters get-credentials multinic-gke --zone us-central1-a --project $projectid
Cloud Shell में, डिफ़ॉल्ट-पूल से दो नोड जनरेट होने की पुष्टि करें:
kubectl get nodes
उदाहरण:
user@$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-multinic-gke-default-pool-3d419e48-1k2p Ready <none> 2m4s v1.27.3-gke.100
gke-multinic-gke-default-pool-3d419e48-xckb Ready <none> 2m4s v1.27.3-gke.100
5. netdevice-vpc सेटअप
netdevice-vpc नेटवर्क बनाना
Cloud Shell के अंदर, यह तरीका अपनाएं:
gcloud compute networks create netdevice-vpc --project=$projectid --subnet-mode=custom
netdevice-vpc सबनेट बनाना
Cloud Shell में, मल्टीनिक नेटडिवाइस-नेटवर्क के लिए इस्तेमाल किया जाने वाला सबनेट बनाएं:
gcloud compute networks subnets create netdevice-subnet --project=$projectid --range=192.168.10.0/24 --network=netdevice-vpc --region=us-central1 --enable-private-ip-google-access
Cloud Shell के अंदर, netdevice-apache इंस्टेंस के लिए सबनेट बनाएं:
gcloud compute networks subnets create netdevice-apache --project=$projectid --range=172.16.10.0/28 --network=netdevice-vpc --region=us-central1 --enable-private-ip-google-access
Cloud राऊटर और NAT का कॉन्फ़िगरेशन
Cloud NAT का इस्तेमाल, सॉफ़्टवेयर पैकेज इंस्टॉल करने के ट्यूटोरियल में किया जाता है. ऐसा इसलिए होता है, क्योंकि वीएम इंस्टेंस में कोई बाहरी आईपी पता नहीं होता है.
Cloud Shell के अंदर, क्लाउड राऊटर बनाएं.
gcloud compute routers create netdevice-cr --network netdevice-vpc --region us-central1
Cloud Shell के अंदर, NAT गेटवे बनाएं.
gcloud compute routers nats create cloud-nat-netdevice --router=netdevice-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
netdevice-apache इंस्टेंस बनाएं
नीचे दिए गए सेक्शन में, आपको netdevice-apache इंस्टेंस बनाना होगा.
Cloud Shell के अंदर, इंस्टेंस बनाएं:
gcloud compute instances create netdevice-apache \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=netdevice-apache \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to the netdevice-apache instance !!' | tee /var/www/html/index.html
EOF"
6. l3-vpc सेटअप
l3-vpc नेटवर्क बनाना
Cloud Shell के अंदर, यह तरीका अपनाएं:
gcloud compute networks create l3-vpc --project=$projectid --subnet-mode=custom
l3-vpc सबनेट बनाना
Cloud Shell के अंदर, एक प्राइमरी और सेकंडरी-रेंज वाला सबनेट बनाएं. सेकंडरी-रेंज(sec-range-l3-subnet) का इस्तेमाल मल्टीनिक l3-नेटवर्क के लिए किया जाता है:
gcloud compute networks subnets create l3-subnet --project=$projectid --range=192.168.20.0/24 --network=l3-vpc --region=us-central1 --enable-private-ip-google-access --secondary-range=sec-range-l3-subnet=10.0.8.0/21
Cloud Shell के अंदर, l3-apache इंस्टेंस के लिए सबनेट बनाएं:
gcloud compute networks subnets create l3-apache --project=$projectid --range=172.16.20.0/28 --network=l3-vpc --region=us-central1 --enable-private-ip-google-access
Cloud राऊटर और NAT का कॉन्फ़िगरेशन
Cloud NAT का इस्तेमाल, सॉफ़्टवेयर पैकेज इंस्टॉल करने के ट्यूटोरियल में किया जाता है. ऐसा इसलिए होता है, क्योंकि वीएम इंस्टेंस में कोई बाहरी आईपी पता नहीं होता है.
Cloud Shell के अंदर, क्लाउड राऊटर बनाएं.
gcloud compute routers create l3-cr --network l3-vpc --region us-central1
Cloud Shell के अंदर, NAT गेटवे बनाएं.
gcloud compute routers nats create cloud-nat-l3 --router=l3-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
l3-apache इंस्टेंस बनाना
नीचे दिए गए सेक्शन में, l3-apache इंस्टेंस बनाने का तरीका बताया जाएगा.
Cloud Shell के अंदर, इंस्टेंस बनाएं:
gcloud compute instances create l3-apache \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=l3-apache \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to the l3-apache instance !!' | tee /var/www/html/index.html
EOF"
7. मल्टीनिक नोडपूल बनाएं
नीचे दिए गए सेक्शन में, आपको एक मल्टीनिक नोडपूल बनाना है, जिसमें ये फ़्लैग शामिल हैं:
–अतिरिक्त-नोड-नेटवर्क (डिवाइस टाइप के इंटरफ़ेस के लिए ज़रूरी है)
उदाहरण:
--additional-node-network 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
मशीन का टाइप: नोड पूल को डिप्लॉय करते समय, मशीन टाइप की डिपेंडेंसी का ध्यान रखें. उदाहरण के लिए, "e2-standard-4" जैसी मशीन जिनमें चार vCPU हों, कुल चार वीपीसी काम कर सकते हैं. उदाहरण के लिए, netdevice-l3-pod में कुल तीन इंटरफ़ेस होंगे (डिफ़ॉल्ट, netdevice, और l3). इसलिए, ट्यूटोरियल में इस्तेमाल की गई मशीन टाइप e2-standard-4 है.
Cloud Shell के अंदर, टाइप डिवाइस और L3 वाला नोडपूल बनाएं:
gcloud container --project "$projectid" node-pools create "multinic-node-pool" --cluster "multinic-gke" --zone "us-central1-a" --additional-node-network network=netdevice-vpc,subnetwork=netdevice-subnet --additional-node-network network=l3-vpc,subnetwork=l3-subnet --additional-pod-network subnetwork=l3-subnet,pod-ipv4-range=sec-range-l3-subnet,max-pods-per-node=8 --machine-type "e2-standard-4"
8. मल्टीनिक-नोड-पूल की पुष्टि करें
Cloud Shell के अंदर, मल्टीनिक-नोड-पूल से तीन नोड जनरेट होने की पुष्टि करें:
kubectl get nodes
उदाहरण:
user@$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-multinic-gke-default-pool-3d419e48-1k2p Ready <none> 15m v1.27.3-gke.100
gke-multinic-gke-default-pool-3d419e48-xckb Ready <none> 15m v1.27.3-gke.100
gke-multinic-gke-multinic-node-pool-135699a1-0tfx Ready <none> 3m51s v1.27.3-gke.100
gke-multinic-gke-multinic-node-pool-135699a1-86gz Ready <none> 3m51s v1.27.3-gke.100
gke-multinic-gke-multinic-node-pool-135699a1-t66p Ready <none> 3m51s v1.27.3-gke.100
9. netdevice-network बनाएं
नीचे दिए गए चरणों में, netdevice-network बनाने के लिए, नेटवर्क और GKENetworkParamSet kubernetes ऑब्जेक्ट जनरेट किया जाएगा. इसका इस्तेमाल, बाद के चरणों में पॉड को जोड़ने के लिए किया जाएगा.
netdevice-network ऑब्जेक्ट बनाना
Cloud Shell के अंदर, VI एडिटर या नैनो का इस्तेमाल करके नेटवर्क ऑब्जेक्ट YAML netdevice-network.yaml बनाएं. "यहां तक जाने वाला रास्ता" नोट करें netdevice-vpc में सबनेट 172.16.10.0/28 (netdevice-apache) है.
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 बनाएं
क्लाउड शेल के अंदर, VI एडिटर या नैनो का इस्तेमाल करके नेटवर्क ऑब्जेक्ट YAML netdevice-network-parm.yaml बनाएं. यह शर्त, netdevice-vpc सबनेट डिप्लॉयमेंट से मैप होती है.
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
metadata:
name: "netdevice"
spec:
vpc: "netdevice-vpc"
vpcSubnet: "netdevice-subnet"
deviceMode: "NetDevice"
क्लाउड शेल के अंदर, netdevice-network-parm.yaml को लागू करें
kubectl apply -f netdevice-network-parm.yaml
Cloud Shell में, netdevice-नेटवर्क के स्टेटस की वजह की पुष्टि करें. इससे GNPParmsReady और Network Ready का इस्तेमाल किया जा सकता है:
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 शेल में, gkenetworkparamset CIDR ब्लॉक 192.168.10.0/24 की पुष्टि करें, जिसका इस्तेमाल बाद के चरण में पॉड इंटरफ़ेस के लिए किया गया था.
kubectl describe gkenetworkparamsets.networking.gke.io netdevice
उदाहरण:
user@$ kubectl describe gkenetworkparamsets.networking.gke.io netdevice
Name: netdevice
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: GKENetworkParamSet
Metadata:
Creation Timestamp: 2023-07-30T22:39:43Z
Finalizers:
networking.gke.io/gnp-controller
networking.gke.io/high-perf-finalizer
Generation: 1
Resource Version: 1579919
UID: 6fe36b0c-0091-4b6a-9d28-67596cbce845
Spec:
Device Mode: NetDevice
Vpc: netdevice-vpc
Vpc Subnet: netdevice-subnet
Status:
Conditions:
Last Transition Time: 2023-07-30T22:39:43Z
Message:
Reason: GNPReady
Status: True
Type: Ready
Network Name: netdevice-network
Pod CID Rs:
Cidr Blocks:
192.168.10.0/24
Events: <none>
10. l3 नेटवर्क बनाएं
नीचे दिए गए चरणों में, l3 नेटवर्क बनाने के लिए नेटवर्क और GKENetworkParamSet kubernetes ऑब्जेक्ट जनरेट किया जाएगा. इसका इस्तेमाल, बाद के चरणों में पॉड को जोड़ने के लिए किया जाएगा.
l3 नेटवर्क ऑब्जेक्ट बनाना
Cloud Shell के अंदर, VI एडिटर या नैनो का इस्तेमाल करके नेटवर्क ऑब्जेक्ट YAML l3-network.yaml बनाएं. "यहां तक जाने वाला रास्ता" नोट करें l3-vpc में सबनेट 172.16.20.0/28 (l3-apache) है.
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 शेल के अंदर, 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 बनाएं
क्लाउड शेल के अंदर, VI एडिटर या नैनो का इस्तेमाल करके नेटवर्क ऑब्जेक्ट YAML l3-network-parm.yaml बनाएं. 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"
क्लाउड शेल के अंदर, l3-network-parm.yaml लागू करें
kubectl apply -f l3-network-parm.yaml
Cloud Shell के अंदर, l3-नेटवर्क के स्टेटस की वजह की पुष्टि करें. यह GNPParmsReady और Network ready है:
kubectl describe networks l3-network
उदाहरण:
user@$ kubectl describe networks l3-network
Name: l3-network
Namespace:
Labels: <none>
Annotations: networking.gke.io/in-use: false
API Version: networking.gke.io/v1
Kind: Network
Metadata:
Creation Timestamp: 2023-07-30T22:43:54Z
Generation: 1
Resource Version: 1583647
UID: 426804be-35c9-4cc5-bd26-00b94be2ef9a
Spec:
Parameters Ref:
Group: networking.gke.io
Kind: GKENetworkParamSet
Name: l3-network
Routes:
To: 172.16.20.0/28
Type: L3
Status:
Conditions:
Last Transition Time: 2023-07-30T22:46:14Z
Message:
Reason: GNPParamsReady
Status: True
Type: ParamsReady
Last Transition Time: 2023-07-30T22:46:14Z
Message:
Reason: NetworkReady
Status: True
Type: Ready
Events: <none>
Cloud Shell में, पॉड इंटरफ़ेस बनाने के लिए इस्तेमाल किए गए gkenetworkparamset l3-network CIDR 10.0.8.0/21 की पुष्टि करें.
kubectl describe gkenetworkparamsets.networking.gke.io l3-network
उदाहरण:
user@$ kubectl describe gkenetworkparamsets.networking.gke.io l3-network
Name: l3-network
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: GKENetworkParamSet
Metadata:
Creation Timestamp: 2023-07-30T22:46:14Z
Finalizers:
networking.gke.io/gnp-controller
Generation: 1
Resource Version: 1583656
UID: 4c1f521b-0088-4005-b000-626ca5205326
Spec:
podIPv4Ranges:
Range Names:
sec-range-l3-subnet
Vpc: l3-vpc
Vpc Subnet: l3-subnet
Status:
Conditions:
Last Transition Time: 2023-07-30T22:46:14Z
Message:
Reason: GNPReady
Status: True
Type: Ready
Network Name: l3-network
Pod CID Rs:
Cidr Blocks:
10.0.8.0/21
Events: <none>
11. netdevice-l3-pod बनाएं
नीचे दिए गए सेक्शन में, आपको netdevice-l3-pod बनाएं, जो व्यस्त बॉक्स है. इसे "स्विस आर्मी नाइफ़" कहा जाता है जो 300 से ज़्यादा सामान्य निर्देशों का समर्थन करता है. पॉड को earth1 और netdevice-vpc पर ef2 की मदद से, l3-vpc से कनेक्ट करने के लिए कॉन्फ़िगर किया गया है.
Cloud Shell के अंदर, VI Editor या नैनो का इस्तेमाल करके 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 में, पॉड इंटरफ़ेस को असाइन किए गए आईपी पतों की पुष्टि करें.
kubectl get pods netdevice-l3-pod -o yaml
दिए गए उदाहरण में, networking.gke.io/pod-ips फ़ील्ड में, l3-network और netdevice-network के पॉड इंटरफ़ेस से जुड़े आईपी पते शामिल होते हैं. डिफ़ॉल्ट नेटवर्क आईपी पते 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-l3-pod से netdevice-vpc और l3-vpc पर जाने वाले रास्तों की पुष्टि करें:
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
इंस्टेंस बनाएं और पॉड इंटरफ़ेस की पुष्टि करें:
ifconfig
उदाहरण में, ef0 को डिफ़ॉल्ट नेटवर्क से कनेक्ट किया गया है, earth1 को l3-नेटवर्क से कनेक्ट किया गया, और ET2 को netdevice-नेटवर्क से कनेक्ट किया गया.
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 26:E3:1B:14:6E:0C
inet addr:10.0.1.22 Bcast:10.0.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:446 (446.0 B) TX bytes:558 (558.0 B)
eth1 Link encap:Ethernet HWaddr 92:78:4E:CB:F2:D4
inet addr:10.0.8.4 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:446 (446.0 B) TX bytes:516 (516.0 B)
eth2 Link encap:Ethernet HWaddr 42:01:C0:A8:0A:02
inet addr:192.168.10.2 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:73 errors:0 dropped:0 overruns:0 frame:0
TX packets:50581 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26169 (25.5 KiB) TX bytes:2148170 (2.0 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
netdevice-l3-pod से netdevice-vpc (172.16.10.0/28) और l3-vpc (172.16.20.0/28) पर जाने वाले रास्तों की पुष्टि करें.
इंस्टेंस बनाएं और पॉड रूट की पुष्टि करें:
ip route
उदाहरण:
/ # ip route
default via 10.0.1.1 dev eth0 #primary-vpc
10.0.1.0/24 via 10.0.1.1 dev eth0 src 10.0.1.22
10.0.1.1 dev eth0 scope link src 10.0.1.22
10.0.8.0/21 via 10.0.8.1 dev eth1 #l3-vpc (sec-range-l3-subnet)
10.0.8.1 dev eth1 scope link
172.16.10.0/28 via 192.168.10.1 dev eth2 #netdevice-vpc (netdevice-apache subnet)
172.16.20.0/28 via 10.0.8.1 dev eth1 #l3-vpc (l3-apache subnet)
192.168.10.0/24 via 192.168.10.1 dev eth2 #pod interface subnet
192.168.10.1 dev eth2 scope link
क्लाउड शेल पर वापस जाने के लिए, इंस्टेंस से पॉड से बाहर निकलें.
exit
12. l3-pod बनाएं
नीचे दिए गए सेक्शन में, आपको l3-पॉड रनिंग बिज़ीबॉक्स बनाना है. इसे "स्विस आर्मी चाकू" कहते हैं जो 300 से ज़्यादा सामान्य निर्देशों का समर्थन करता है. पॉड को सिर्फ़ earth1 का इस्तेमाल करके, l3-vpc से कनेक्ट करने के लिए कॉन्फ़िगर किया गया है.
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 शेल के अंदर, l3-pod.yaml लागू करें
kubectl apply -f l3-pod.yaml
l3-पॉड बनाने की पुष्टि करें
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 में, पॉड इंटरफ़ेस को असाइन किए गए आईपी पतों की पुष्टि करें.
kubectl get pods l3-pod -o yaml
दिए गए उदाहरण में, networking.gke.io/pod-ips फ़ील्ड में, l3-network के पॉड इंटरफ़ेस से जुड़े आईपी पते शामिल होते हैं. डिफ़ॉल्ट नेटवर्क आईपी पते 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-पॉड रूट की पुष्टि करें
Cloud Shell में, netdevice-l3-pod से l3-vpc के लिए रूट की पुष्टि करें:
kubectl exec --stdin --tty l3-pod -- /bin/sh
इंस्टेंस बनाएं और पॉड इंटरफ़ेस की पुष्टि करें:
ifconfig
इस उदाहरण में, ef0 को डिफ़ॉल्ट नेटवर्क से कनेक्ट किया गया है और earth1 को l3-नेटवर्क से कनेक्ट किया गया.
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 22:29:30:09:6B:58
inet addr:10.0.2.12 Bcast:10.0.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:446 (446.0 B) TX bytes:558 (558.0 B)
eth1 Link encap:Ethernet HWaddr 6E:6D:FC:C3:FF:AF
inet addr:10.0.8.22 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1460 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:446 (446.0 B) TX bytes:516 (516.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
l3-pod से l3-vpc (172.16.20.0/28) के रूट की पुष्टि करें.
इंस्टेंस बनाएं और पॉड रूट की पुष्टि करें:
ip route
उदाहरण:
/ # ip route
default via 10.0.2.1 dev eth0 #primary-vpc
10.0.2.0/24 via 10.0.2.1 dev eth0 src 10.0.2.12
10.0.2.1 dev eth0 scope link src 10.0.2.12
10.0.8.0/21 via 10.0.8.17 dev eth1 #l3-vpc (sec-range-l3-subnet)
10.0.8.17 dev eth1 scope link #pod interface subnet
172.16.20.0/28 via 10.0.8.17 dev eth1 #l3-vpc (l3-apache subnet)
क्लाउड शेल पर वापस जाने के लिए, इंस्टेंस से पॉड से बाहर निकलें.
exit
13. फ़ायरवॉल से जुड़े अपडेट
GKE (जीकेई) मल्टीक्निक-पूल से netdevice-vpc और l3-vpc इन्ग्रेस फ़ायरवॉल पर कनेक्टिविटी की अनुमति देने के लिए, फ़ायरवॉल के नियम ज़रूरी हैं. आप पॉड नेटवर्क सबनेट के रूप में स्रोत रेंज को तय करने वाले फ़ायरवॉल नियम बनाएंगे, उदाहरण netdevice-subnet, sec-range-l3-subnet.
उदाहरण के लिए, l3-vpc में l3-apache इंस्टेंस से कनेक्ट करते समय, हाल ही में बनाया गया कंटेनर, l3-pod, eth2 इंटरफ़ेस 10.0.8.22 (sec-range-l3-subnet से असाइन किया गया) सोर्स आईपी पता होता है.
netdevice-vpc: netdevice-subnet से netdevice-apache पर चलने की अनुमति दें
क्लाउड शेल के अंदर, 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 में फ़ायरवॉल नियम बनाएं. इससे l3-apache इंस्टेंस को sec-range-l3-subnet का ऐक्सेस मिल जाएगा.
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 से Apache इंस्टेंस से कनेक्टिविटी की पुष्टि करने के लिए, पॉड में लॉग इन करें और wget -S चलाकर देखें. इस तरह, apache सर्वर के होम पेज के डाउनलोड की पुष्टि की जा सकेगी. netdevice-l3-pod को netdevice-network और l3-network के इंटरफ़ेस से कॉन्फ़िगर किया जाता है. इसलिए, netdevice-vpc और l3-vpc में Apache सर्वर से कनेक्टिविटी संभव है.
इसके उलट, l3-pod से wget -S का प्रदर्शन करते समय, netdevice-vpc में Apache सर्वर से कनेक्टिविटी नहीं हो सकती, क्योंकि l3-pod को सिर्फ़ l3-network के इंटरफ़ेस से कॉन्फ़िगर किया गया है.
Apache सर्वर का आईपी पता पाएं
Cloud Console से, Compute Engine → VM इंस्टेंस पर जाकर Apache सर्वर का आईपी पता पाएं
netdevice-l3-pod से netdevice-apache कनेक्टिविटी टेस्ट पर
Cloud Shell में, netdevice-l3-pod में लॉग इन करें:
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
कंटेनर से, पिछले चरण से मिले आईपी पते के आधार पर, 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
/ #
क्लाउड शेल के अंदर, पिछले चरण में मिले आईपी पते के आधार पर, netdevice-apache इंस्टेंस पर wget -S इंस्टॉल करें. 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 इंस्टेंस को पिंग करें.
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
/ #
क्लाउड शेल के अंदर, पिछली index.html फ़ाइल को मिटाएं और पिछले चरण में मिले आईपी पते के आधार पर, 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
कंटेनर से, पिछले चरण से मिले आईपी पते के आधार पर, 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 के अंदर, पिछले चरण से मिले आईपी पते के आधार पर, netdevice-apache इंस्टेंस पर wget -S इंस्टॉल करें जो टाइम आउट होने वाला है.
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 इंस्टेंस को पिंग करें.
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
/ #
क्लाउड शेल के अंदर, पिछले चरण में मिले आईपी पते के आधार पर 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
/ #
15. फ़ायरवॉल के लॉग
फ़ायरवॉल के नियमों को लॉग करने की सुविधा से, फ़ायरवॉल के नियमों का ऑडिट किया जा सकता है, उनकी पुष्टि की जा सकती है, और उनका विश्लेषण किया जा सकता है. उदाहरण के लिए, यह तय किया जा सकता है कि ट्रैफ़िक को अस्वीकार करने के लिए डिज़ाइन किया गया फ़ायरवॉल नियम, उम्मीद के मुताबिक काम कर रहा है या नहीं. फ़ायरवॉल के नियमों को लॉग करना तब भी फ़ायदेमंद होता है, जब आपको यह पता करना हो कि दिए गए फ़ायरवॉल के नियम से कितने कनेक्शन पर असर पड़ता है.
आपने ट्यूटोरियल में, इन्ग्रेस डेटा ट्रैफ़िक के लिए नियम बनाते समय फ़ायरवॉल को लॉग करने की सुविधा चालू की है. लॉग से मिली जानकारी पर एक नज़र डालते हैं.
Cloud Console से, लॉगिंग → लॉग एक्सप्लोरर पर जाएं
स्क्रीनशॉट के हिसाब से, नीचे दी गई क्वेरी डालें और क्वेरी चलाकर देखें jsonPayload.Rule_details.reference:("network:l3-vpc/firewall:allow-inpress-from-l3-network-to-all-vpc-instances") को चुनें
कैप्चर की गई चीज़ों को बारीकी से देखने से, सुरक्षा एडमिन को जानकारी से जुड़े एलिमेंट मिलते हैं; इन रेंज में, सोर्स और डेस्टिनेशन आईपी पते, पोर्ट, प्रोटोकॉल, और नोडपूल का नाम शामिल होता है.
ज़्यादा जानकारी के लिए फ़ायरवॉल लॉग के बारे में ज़्यादा जानने के लिए, VPC Network → Firewall → prevent-inprogress-from-netdevice-network-to-all-vpc-instances पर जाएं. इसके बाद, 'लॉग एक्सप्लोरर' में 'देखें' को चुनें.
16. व्यवस्थित करें
Cloud Shell से, ट्यूटोरियल कॉम्पोनेंट मिटाएं.
gcloud compute instances delete l3-apache netdevice-apache --zone=us-central1-a --quiet
gcloud compute routers delete l3-cr netdevice-cr --region=us-central1 --quiet
gcloud container clusters delete multinic-gke --zone=us-central1-a --quiet
gcloud compute firewall-rules delete allow-ingress-from-l3-network-to-all-vpc-instances allow-ingress-from-netdevice-network-to-all-vpc-instances --quiet
gcloud compute networks subnets delete l3-apache l3-subnet netdevice-apache netdevice-subnet primary-node-subnet --region=us-central1 --quiet
gcloud compute networks delete l3-vpc netdevice-vpc primary-vpc --quiet
17. बधाई हो
बधाई हो, आपने PinG और wget का इस्तेमाल करके Apache सर्वर से L3 और डिवाइस टाइप कनेक्टिविटी की पुष्टि करने के लिए, एक मल्टीनिक नोडपूल बनाने और पॉड को बनाने की पुष्टि कर ली है.
आपने यह भी सीखा कि पॉड कंटेनर और Apache सर्वर के बीच सोर्स और डेस्टिनेशन पैकेट की जांच करने के लिए, फ़ायरवॉल लॉग का इस्तेमाल कैसे किया जा सकता है.
Cosmopup को लगता है कि ट्यूटोरियल शानदार हैं!!