1. ভূমিকা
GCP দীর্ঘদিন ধরে VM ইনস্ট্যান্স লেভেলে একাধিক ইন্টারফেস সমর্থন করে আসছে। মাল্টিপল-ইন্টারফেসের সাহায্যে, একটি VM বিভিন্ন VPC-তে 7টি নতুন ইন্টারফেস (ডিফল্ট + 7টি ইন্টারফেস) পর্যন্ত সংযোগ করতে পারে। GKE নেটওয়ার্কিং এখন এই আচরণটি নোডগুলিতে চলমান পডগুলিতেও প্রসারিত করে। এই বৈশিষ্ট্যের আগে, GKE ক্লাস্টারগুলি সমস্ত NodePools-কে শুধুমাত্র একটি একক ইন্টারফেস রাখার অনুমতি দেয় এবং তাই একটি একক VPC-তে ম্যাপ করা হয়। মাল্টি-নেটওয়ার্ক অন পডস বৈশিষ্ট্যের সাহায্যে, একজন ব্যবহারকারী এখন নোডগুলিতে এবং একটি GKE ক্লাস্টারে পডগুলির জন্য একটিরও বেশি ইন্টারফেস সক্ষম করতে পারেন।
তুমি কী তৈরি করবে
এই টিউটোরিয়ালে, আপনি একটি বিস্তৃত GKE মাল্টিনিক পরিবেশ তৈরি করতে যাচ্ছেন যা চিত্র 1-এ দেখানো ব্যবহারের ক্ষেত্রে (গুলি) চিত্রিত করে।
- busybox ব্যবহার করে netdevice-l3-pod তৈরি করুন:
- eth2 এর উপর netdevice-vpc-তে netdevice-apache ইনস্ট্যান্সে PING এবং wget -S করুন।
- eth1 এর উপর l3-vpc-তে l3-apache ইনস্ট্যান্সে PING & wget -S সম্পাদন করুন।
- eth1 এর মাধ্যমে PING & wget -S থেকে l3-apache ইনস্ট্যান্স সম্পাদনের জন্য একটি l3-পড লিভারেজিং busybox তৈরি করুন।
উভয় ব্যবহারের ক্ষেত্রেই, পডের eth0 ইন্টারফেসটি ডিফল্ট নেটওয়ার্কের সাথে সংযুক্ত থাকে।
চিত্র ১

তুমি কি শিখবে
- কিভাবে l3 টাইপের সাবনেট তৈরি করবেন
- নেটডিভাইস টাইপ সাবনেট কীভাবে তৈরি করবেন
- কিভাবে একটি মাল্টি-নিক GKE নোডপুল স্থাপন করবেন
- নেটডিভাইস এবং l3 ক্ষমতা সহ একটি পড কীভাবে তৈরি করবেন
- l3 ক্ষমতা সহ একটি পড কীভাবে তৈরি করবেন
- কিভাবে GKE অবজেক্ট নেটওয়ার্ক তৈরি এবং যাচাই করবেন
- PING, wget এবং Firewall লগ ব্যবহার করে দূরবর্তী Apache সার্ভারের সাথে সংযোগ কীভাবে যাচাই করবেন
তোমার যা লাগবে
- গুগল ক্লাউড প্রজেক্ট
2. পরিভাষা এবং ধারণা
প্রাথমিক ভিপিসি: প্রাথমিক ভিপিসি হল একটি পূর্ব-কনফিগার করা ভিপিসি যা ডিফল্ট সেটিংস এবং রিসোর্সের একটি সেট সহ আসে। এই ভিপিসিতে জিকেই ক্লাস্টার তৈরি করা হয়।
সাবনেট: গুগল ক্লাউডে, একটি সাবনেট হল একটি VPC-তে নেটমাস্ক সহ ক্লাসলেস ইন্টার-ডোমেন রাউটিং (CIDR) তৈরি করার উপায়। একটি সাবনেটের একটি একক প্রাথমিক IP ঠিকানা পরিসর থাকে যা নোডগুলিতে নির্ধারিত হয় এবং এতে একাধিক সেকেন্ডারি রেঞ্জ থাকতে পারে যা পড এবং পরিষেবাগুলির অন্তর্গত হতে পারে।
নোড-নেটওয়ার্ক: নোড-নেটওয়ার্ক বলতে একটি VPC এবং সাবনেট জোড়ার একটি নিবেদিতপ্রাণ সমন্বয়কে বোঝায়। এই নোড-নেটওয়ার্কের মধ্যে, নোড পুলের অন্তর্গত নোডগুলিকে প্রাথমিক IP ঠিকানা পরিসর থেকে IP ঠিকানা বরাদ্দ করা হয়।
সেকেন্ডারি রেঞ্জ: গুগল ক্লাউড সেকেন্ডারি রেঞ্জ হলো একটি VPC-এর একটি অঞ্চলের একটি CIDR এবং নেটমাস্ক। GKE এটিকে একটি লেয়ার 3 পড-নেটওয়ার্ক হিসেবে ব্যবহার করে। একটি VPC-তে একাধিক সেকেন্ডারি রেঞ্জ থাকতে পারে এবং একটি পড একাধিক পড-নেটওয়ার্কের সাথে সংযোগ স্থাপন করতে পারে।
নেটওয়ার্ক (L3 অথবা ডিভাইস): একটি নেটওয়ার্ক অবজেক্ট যা পডের জন্য সংযোগ বিন্দু হিসেবে কাজ করে। টিউটোরিয়ালে নেটওয়ার্কগুলি হল l3-নেটওয়ার্ক এবং নেটডিভাইস-নেটওয়ার্ক, যেখানে ডিভাইসটি নেটডিভাইস অথবা dpdk হতে পারে। ডিফল্ট নেটওয়ার্ক বাধ্যতামূলক এবং ডিফল্ট-নোডপুল সাবনেটের উপর ভিত্তি করে ক্লাস্টার তৈরির মাধ্যমে তৈরি করা হয়।
লেয়ার ৩ নেটওয়ার্কগুলি একটি সাবনেটের একটি সেকেন্ডারি রেঞ্জের সাথে সঙ্গতিপূর্ণ, যা নিম্নরূপে উপস্থাপিত হয়:
ভিপিসি -> সাবনেট নাম -> সেকেন্ডারি রেঞ্জের নাম
ডিভাইস নেটওয়ার্ক একটি VPC-তে একটি সাবনেটের সাথে সঙ্গতিপূর্ণ, যা নিম্নরূপে উপস্থাপিত হয়:
ভিপিসি -> সাবনেট নাম
ডিফল্ট পড-নেটওয়ার্ক: ক্লাস্টার তৈরির সময় গুগল ক্লাউড একটি ডিফল্ট পড-নেটওয়ার্ক তৈরি করে। ডিফল্ট পড-নেটওয়ার্ক নোড-নেটওয়ার্ক হিসেবে প্রাথমিক ভিপিসি ব্যবহার করে। ডিফল্ট পড-নেটওয়ার্কটি ডিফল্টরূপে সমস্ত ক্লাস্টার নোড এবং পডগুলিতে উপলব্ধ।
একাধিক ইন্টারফেস সহ পড: GKE তে একাধিক ইন্টারফেস সহ পড একই পড-নেটওয়ার্কের সাথে সংযুক্ত হতে পারে না কারণ পডের প্রতিটি ইন্টারফেসকে একটি অনন্য নেটওয়ার্কের সাথে সংযুক্ত থাকতে হবে।
কোডল্যাব সমর্থন করার জন্য প্রকল্পটি আপডেট করুন
এই কোডল্যাবটি ক্লাউড শেলে gcloud কনফিগারেশন বাস্তবায়নে সহায়তা করার জন্য $variables ব্যবহার করে।
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
৩. প্রাথমিক ভিপিসি সেটআপ
প্রাথমিক ভিপিসি তৈরি করুন
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud compute networks create primary-vpc --project=$projectid --subnet-mode=custom
নোড এবং সেকেন্ডারি সাবনেট তৈরি করুন
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
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
৪. জিকেই ক্লাস্টার তৈরি
মাল্টি-নিক নোডপুলগুলিকে সমর্থন করার জন্য প্রয়োজনীয় ফ্ল্যাগ –enable-multi-networking এবং –enable-dataplane-v2 সহ ডিফল্ট নোডপুল তৈরি করতে প্রাইমারি-ভিপিসি সাবনেটগুলি নির্দিষ্ট করে একটি ব্যক্তিগত GKE ক্লাস্টার তৈরি করুন।
ক্লাউড শেলের ভিতরে, 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
মাল্টিনিক-জিকেই ক্লাস্টার যাচাই করুন
ক্লাউড শেলের ভিতরে, ক্লাস্টারের সাথে প্রমাণীকরণ করুন:
gcloud container clusters get-credentials multinic-gke --zone us-central1-a --project $projectid
ক্লাউড শেলের ভিতরে, ডিফল্ট-পুল থেকে দুটি নোড তৈরি হয়েছে তা যাচাই করুন:
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 নেটওয়ার্ক তৈরি করুন
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud compute networks create netdevice-vpc --project=$projectid --subnet-mode=custom
netdevice-vpc সাবনেট তৈরি করুন
ক্লাউড শেলের ভিতরে, মাল্টিনিক নেটডিভাইস-নেটওয়ার্কের জন্য ব্যবহৃত সাবনেট তৈরি করুন:
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
ক্লাউড শেলের ভিতরে, 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 কনফিগারেশন
সফটওয়্যার প্যাকেজ ইনস্টলেশনের জন্য টিউটোরিয়ালে ক্লাউড NAT ব্যবহার করা হয়েছে কারণ VM ইনস্ট্যান্সের কোনও বহিরাগত IP ঠিকানা নেই।
ক্লাউড শেলের ভিতরে, ক্লাউড রাউটার তৈরি করুন।
gcloud compute routers create netdevice-cr --network netdevice-vpc --region us-central1
ক্লাউড শেলের ভিতরে, 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 ইনস্ট্যান্স তৈরি করবেন।
ক্লাউড শেলের ভিতরে, ইনস্ট্যান্স তৈরি করুন:
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 নেটওয়ার্ক তৈরি করুন
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud compute networks create l3-vpc --project=$projectid --subnet-mode=custom
l3-vpc সাবনেট তৈরি করুন
ক্লাউড শেলের ভেতরে, একটি প্রাথমিক এবং মাধ্যমিক-পরিসরের সাবনেট তৈরি করুন। মাল্টিনিক l3-নেটওয়ার্কের জন্য মাধ্যমিক-পরিসর (sec-range-l3-subnet) ব্যবহার করা হয়:
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
ক্লাউড শেলের ভিতরে, 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 কনফিগারেশন
সফটওয়্যার প্যাকেজ ইনস্টলেশনের জন্য টিউটোরিয়ালে ক্লাউড NAT ব্যবহার করা হয়েছে কারণ VM ইনস্ট্যান্সের কোনও বহিরাগত IP ঠিকানা নেই।
ক্লাউড শেলের ভিতরে, ক্লাউড রাউটার তৈরি করুন।
gcloud compute routers create l3-cr --network l3-vpc --region us-central1
ক্লাউড শেলের ভিতরে, 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 ইনস্ট্যান্স তৈরি করবেন।
ক্লাউড শেলের ভিতরে, ইনস্ট্যান্স তৈরি করুন:
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"
৭. মাল্টিনিক নোডপুল তৈরি করুন
নিম্নলিখিত বিভাগে, আপনি নিম্নলিখিত পতাকাগুলি নিয়ে একটি মাল্টিনিক নোডপুল তৈরি করবেন:
-অতিরিক্ত-নোড-নেটওয়ার্ক (ডিভাইস টাইপ ইন্টারফেসের জন্য প্রয়োজনীয়)
উদাহরণ:
--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" এর মতো একটি মেশিনের ধরণে 4টি vCPU সহ মোট 4টি VPC সমর্থন করতে পারে। উদাহরণস্বরূপ, netdevice-l3-pod-এ মোট 3টি ইন্টারফেস থাকবে (ডিফল্ট, netdevice এবং l3), তাই টিউটোরিয়ালে ব্যবহৃত মেশিনের ধরণ হল e2-standard-4।
ক্লাউড শেলের ভিতরে, একটি টাইপ ডিভাইস এবং 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"
৮. মাল্টিনিক-নোড-পুল যাচাই করুন
ক্লাউড শেলের ভিতরে, মাল্টিনিক-নোড-পুল থেকে তিনটি নোড তৈরি হয়েছে তা যাচাই করুন:
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
৯. নেটডিভাইস-নেটওয়ার্ক তৈরি করুন
নিম্নলিখিত ধাপগুলিতে আপনি একটি নেটওয়ার্ক এবং GKENetworkParamSet kubernetes অবজেক্ট তৈরি করবেন যাতে netdevice-network তৈরি করা যায় যা পরবর্তী ধাপগুলিতে পডগুলিকে সংযুক্ত করতে ব্যবহৃত হবে।
netdevice-network অবজেক্ট তৈরি করুন
ক্লাউড শেলের ভেতরে, VI এডিটর অথবা ন্যানো ব্যবহার করে YAML netdevice-network.yaml নেটওয়ার্ক অবজেক্ট তৈরি করুন। লক্ষ্য করুন, netdevice-vpc-এর "routes to" হল সাবনেট 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"
ক্লাউড শেলের ভিতরে, netdevice-network.yaml প্রয়োগ করুন:
kubectl apply -f netdevice-network.yaml
ক্লাউড শেলের ভিতরে, netdevice-network Status Type প্রস্তুত কিনা তা যাচাই করুন।
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
ক্লাউড শেলের ভিতরে, 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>
ক্লাউড শেলের ভিতরে, পরবর্তী ধাপে পড(গুলি) ইন্টারফেসের জন্য ব্যবহৃত 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>
১০. l3 নেটওয়ার্ক তৈরি করুন
নিম্নলিখিত ধাপগুলিতে আপনি একটি নেটওয়ার্ক এবং GKENetworkParamSet kubernetes অবজেক্ট তৈরি করবেন যাতে l3 নেটওয়ার্ক তৈরি করা যায় যা পরবর্তী ধাপগুলিতে পডগুলিকে সংযুক্ত করতে ব্যবহৃত হবে।
l3 নেটওয়ার্ক অবজেক্ট তৈরি করুন
ক্লাউড শেলের ভেতরে, 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"
ক্লাউড শেলের ভিতরে, l3-network.yaml প্রয়োগ করুন:
kubectl apply -f l3-network.yaml
ক্লাউড শেলের ভিতরে, 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
ক্লাউড শেলের ভিতরে, 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>
ক্লাউড শেলের ভিতরে, পড ইন্টারফেস তৈরি করতে ব্যবহৃত 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>
১১. netdevice-l3-pod তৈরি করুন
পরবর্তী অংশে, আপনি netdevice-l3-pod রানিং busybox তৈরি করবেন, যা "Swiss Army knife" নামে পরিচিত এবং 300 টিরও বেশি সাধারণ কমান্ড সমর্থন করে। পডটি eth1 ব্যবহার করে l3-vpc এবং eth2 ব্যবহার করে netdevice-vpc এর সাথে যোগাযোগ করার জন্য কনফিগার করা হয়েছে।
ক্লাউড শেলের ভিতরে, VI এডিটর বা ন্যানো ব্যবহার করে 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
ক্লাউড শেলের ভিতরে, netdevice-l3-pod.yaml প্রয়োগ করুন
kubectl apply -f netdevice-l3-pod.yaml
netdevice-l3-pod তৈরি যাচাই করুন
ক্লাউড শেলের ভিতরে, 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
ক্লাউড শেলের ভিতরে, পড ইন্টারফেসে নির্ধারিত আইপি ঠিকানাগুলি যাচাই করুন।
kubectl get pods netdevice-l3-pod -o yaml
প্রদত্ত উদাহরণে, networking.gke.io/pod-ips ক্ষেত্রে l3-network এবং netdevice-network থেকে পড ইন্টারফেসের সাথে সম্পর্কিত IP ঠিকানাগুলি রয়েছে। ডিফল্ট নেটওয়ার্ক 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 রুট যাচাই করুন
ক্লাউড শেলের ভিতরে, netdevice-l3-pod থেকে netdevice-vpc এবং l3-vpc-এর রুটগুলি যাচাই করুন:
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-পড তৈরি করুন
পরবর্তী অংশে, আপনি l3-পড রানিং বিজিবক্স তৈরি করবেন, যা "সুইস আর্মি নাইফ" নামে পরিচিত এবং 300 টিরও বেশি সাধারণ কমান্ড সমর্থন করে। পডটি শুধুমাত্র eth1 ব্যবহার করে l3-vpc এর সাথে যোগাযোগ করার জন্য কনফিগার করা হয়েছে।
ক্লাউড শেলের ভিতরে, 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
ক্লাউড শেলের ভিতরে, l3-pod.yaml প্রয়োগ করুন
kubectl apply -f l3-pod.yaml
l3-পড তৈরি যাচাই করুন
ক্লাউড শেলের ভিতরে, 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
ক্লাউড শেলের ভিতরে, পড ইন্টারফেসে নির্ধারিত আইপি ঠিকানাগুলি যাচাই করুন।
kubectl get pods l3-pod -o yaml
প্রদত্ত উদাহরণে, networking.gke.io/pod-ips ক্ষেত্রে l3-network থেকে পড ইন্টারফেসের সাথে সম্পর্কিত IP ঠিকানাগুলি রয়েছে। ডিফল্ট নেটওয়ার্ক 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-পড রুট যাচাই করুন
ক্লাউড শেলের ভিতরে, netdevice-l3-pod থেকে l3-vpc-এর রুটগুলি যাচাই করুন:
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-পড থেকে 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-তে সংযোগ স্থাপনের জন্য ফায়ারওয়াল নিয়ম প্রয়োজন। আপনি ফায়ারওয়াল নিয়ম তৈরি করবেন যেখানে পড নেটওয়ার্ক সাবনেট হিসেবে সোর্স রেঞ্জ উল্লেখ করা হবে, যেমন netdevice-subnet, sec-range-l3-subnet।
উদাহরণস্বরূপ, l3-vpc-তে l3-apache ইনস্ট্যান্সের সাথে সংযোগ করার সময় সম্প্রতি তৈরি করা কন্টেইনার, l3-pod, eth2 ইন্টারফেস 10.0.8.22 (sec-range-l3-subnet থেকে বরাদ্দ করা হয়েছে) হল সোর্স IP ঠিকানা।
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-তে অনুমতি দিন
ক্লাউড শেলের ভিতরে, 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
১৪. পড সংযোগ যাচাই করুন
পরবর্তী বিভাগে, আপনি পডগুলিতে লগ ইন করে এবং একটি wget -S চালিয়ে netdevice-l3-pod এবং l3-pod থেকে Apache ইনস্ট্যান্সের সাথে সংযোগ যাচাই করবেন যা apache সার্ভারের হোম পেজের ডাউনলোড যাচাই করে। যেহেতু netdevice-l3-pod netdevice-network এবং l3-network এর ইন্টারফেস দিয়ে কনফিগার করা হয়েছে, তাই netdevice-vpc এবং l3-vpc এ Apache সার্ভারের সাথে সংযোগ সম্ভব।
বিপরীতে, l3-pod থেকে wget -S সম্পাদন করার সময়, netdevice-vpc-এ Apache সার্ভারের সাথে সংযোগ স্থাপন সম্ভব হয় না কারণ l3-pod শুধুমাত্র l3-নেটওয়ার্ক থেকে একটি ইন্টারফেস দিয়ে কনফিগার করা হয়।
অ্যাপাচি সার্ভারের আইপি ঠিকানা পান
ক্লাউড কনসোল থেকে, কম্পিউট ইঞ্জিন → ভিএম ইনস্ট্যান্সে নেভিগেট করে অ্যাপাচি সার্ভারের আইপি ঠিকানাটি পান।

netdevice-l3-pod থেকে netdevice-apache সংযোগ পরীক্ষা
ক্লাউড শেলের ভিতরে, 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
/ #
ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত IP ঠিকানার উপর ভিত্তি করে একটি wget -S to 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 সংযোগ পরীক্ষা
ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত 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
/ #
ক্লাউড শেলের ভিতরে, পূর্ববর্তী 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-পড থেকে নেটডিভাইস-অ্যাপাচি সংযোগ পরীক্ষা
ক্লাউড শেলের ভিতরে, 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
ঐচ্ছিক: ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত IP ঠিকানার উপর ভিত্তি করে একটি wget -S to 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-পড থেকে l3-অ্যাপাচি সংযোগ পরীক্ষা
ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত 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
/ #
ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত IP ঠিকানার উপর ভিত্তি করে একটি wget -S to 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
/ #
১৫. ফায়ারওয়াল লগ
ফায়ারওয়াল রুলস লগিং আপনাকে আপনার ফায়ারওয়াল রুলসের প্রভাবগুলি নিরীক্ষণ, যাচাই এবং বিশ্লেষণ করতে দেয়। উদাহরণস্বরূপ, ট্র্যাফিক প্রতিরোধ করার জন্য তৈরি একটি ফায়ারওয়াল রুলস উদ্দেশ্য অনুসারে কাজ করছে কিনা তা আপনি নির্ধারণ করতে পারেন। একটি প্রদত্ত ফায়ারওয়াল রুলস দ্বারা কতগুলি সংযোগ প্রভাবিত হয়েছে তা নির্ধারণ করার প্রয়োজন হলে ফায়ারওয়াল রুলস লগিংও কার্যকর।
টিউটোরিয়ালে আপনি ইনগ্রেস ফায়ারওয়াল নিয়ম তৈরি করার সময় ফায়ারওয়াল লগিং সক্ষম করেছেন। আসুন লগগুলি থেকে প্রাপ্ত তথ্যগুলি একবার দেখে নেওয়া যাক।
ক্লাউড কনসোল থেকে, লগিং → লগস এক্সপ্লোরারে নেভিগেট করুন।
স্ক্রিনশট অনুযায়ী নীচের কোয়েরিটি সন্নিবেশ করুন এবং Run query jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances") নির্বাচন করুন।

একটি ক্যাপচারের দিকে ঘনিষ্ঠভাবে নজর দিলে নিরাপত্তা প্রশাসকদের জন্য তথ্য উপাদান সরবরাহ করা হয়; উৎস এবং গন্তব্য আইপি ঠিকানা, পোর্ট, প্রোটোকল এবং নোডপুলের নাম থেকে শুরু করে।

আরও ফায়ারওয়াল লগ অন্বেষণ করতে, VPC Network → Firewall → allow-ingress-from-netdevice-network-to-all-vpc-instances-এ নেভিগেট করুন এবং Logs Explorer-এ view নির্বাচন করুন।
১৬. পরিষ্কার করা
ক্লাউড শেল থেকে, টিউটোরিয়াল উপাদানগুলি মুছুন।
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
১৭. অভিনন্দন
অভিনন্দন, আপনি সফলভাবে একটি মাল্টিনিক নোডপুল তৈরি এবং PING এবং wget ব্যবহার করে Apache সার্ভারের সাথে L3 এবং ডিভাইস টাইপ সংযোগ যাচাই করার জন্য busybox চালানোর জন্য পড তৈরি করে কনফিগার এবং যাচাই করেছেন।
আপনি পড কন্টেইনার এবং অ্যাপাচি সার্ভারের মধ্যে উৎস এবং গন্তব্য প্যাকেটগুলি পরিদর্শন করার জন্য ফায়ারওয়াল লগগুলি কীভাবে ব্যবহার করবেন তাও শিখেছেন।
Cosmopup মনে করে টিউটোরিয়ালগুলি অসাধারণ!!
