1. ভূমিকা
GCP দীর্ঘকাল ধরে VM দৃষ্টান্ত স্তরে একাধিক ইন্টারফেস সমর্থন করেছে। একাধিক-ইন্টারফেসের সাথে, একটি VM 7টি পর্যন্ত নতুন ইন্টারফেস (ডিফল্ট + 7 ইন্টারফেস) বিভিন্ন VPC-তে সংযোগ করতে পারে। GKE নেটওয়ার্কিং এখন এই আচরণটি নোডগুলিতে চলমান পডগুলিতে প্রসারিত করে৷ এই বৈশিষ্ট্যের আগে, GKE ক্লাস্টারগুলি সমস্ত নোডপুলকে শুধুমাত্র একটি একক ইন্টারফেস রাখার অনুমতি দেয় এবং তাই একটি একক VPC-তে ম্যাপ করা হয়। মাল্টি-নেটওয়ার্ক অন পড বৈশিষ্ট্যের সাহায্যে, একজন ব্যবহারকারী এখন GKE ক্লাস্টারে নোড এবং পডের জন্য একাধিক একক ইন্টারফেস সক্ষম করতে পারে।
আপনি কি নির্মাণ করবেন
এই টিউটোরিয়ালে, আপনি একটি ব্যাপক GKE মাল্টিনিক এনভায়রনমেন্ট তৈরি করতে যাচ্ছেন যা চিত্র 1-এ চিত্রিত ব্যবহারের ক্ষেত্রে (গুলি) চিত্রিত করে।
- নেটডিভাইস-l3-পড লিভারেজিং বিজিবক্স তৈরি করুন এতে:
- eth2 এর উপর netdevice-vpc-এ netdevice-apache উদাহরণে একটি PING এবং wget -S সম্পাদন করুন
- eth1 এর উপরে l3-vpc-এ একটি PING এবং wget -S থেকে l3-apache উদাহরণ সম্পাদন করুন
- eth1 এর উপর একটি PING এবং wget -S থেকে l3-apache ইন্সট্যান্স সম্পাদন করতে একটি l3-পড লিভারেজিং বিজিবক্স তৈরি করুন
উভয় ক্ষেত্রেই, পডের eth0 ইন্টারফেস ডিফল্ট নেটওয়ার্কের সাথে সংযুক্ত থাকে।
চিত্র 1
আপনি কি শিখবেন
- কিভাবে একটি l3 টাইপ সাবনেট তৈরি করবেন
- কিভাবে একটি নেটডিভাইস টাইপ সাবনেট তৈরি করবেন
- কিভাবে একটি মাল্টি-নিক GKE নোডপুল স্থাপন করবেন
- কিভাবে নেটডিভাইস এবং l3 ক্ষমতা সহ একটি পড তৈরি করবেন
- কিভাবে l3 ক্ষমতা সহ একটি পড তৈরি করবেন
- কিভাবে GKE অবজেক্ট নেটওয়ার্ক তৈরি এবং যাচাই করা যায়
- PING, wget এবং ফায়ারওয়াল লগ ব্যবহার করে দূরবর্তী অ্যাপাচি সার্ভারে সংযোগ কীভাবে যাচাই করবেন
আপনি কি প্রয়োজন হবে
- গুগল ক্লাউড প্রকল্প
2. পরিভাষা এবং ধারণা
প্রাথমিক VPC: প্রাথমিক VPC হল একটি পূর্ব-কনফিগার করা VPC যা ডিফল্ট সেটিংস এবং সংস্থানগুলির একটি সেটের সাথে আসে। এই ভিপিসিতে GKE ক্লাস্টার তৈরি করা হয়েছে।
সাবনেট: Google ক্লাউডে, একটি সাবনেট হল একটি VPC-তে নেটমাস্ক সহ ক্লাসলেস ইন্টার-ডোমেন রাউটিং (CIDR) তৈরি করার উপায়। একটি সাবনেটের একটি একক প্রাথমিক আইপি ঠিকানার পরিসর থাকে যা নোডগুলিতে বরাদ্দ করা হয় এবং একাধিক সেকেন্ডারি রেঞ্জ থাকতে পারে যা পড এবং পরিষেবাগুলির অন্তর্গত হতে পারে।
নোড-নেটওয়ার্ক: নোড-নেটওয়ার্ক একটি ভিপিসি এবং সাবনেট জোড়ার একটি উত্সর্গীকৃত সমন্বয়কে বোঝায়। এই নোড-নেটওয়ার্কের মধ্যে, নোড পুলের অন্তর্গত নোডগুলিকে প্রাথমিক IP ঠিকানা পরিসর থেকে IP ঠিকানা বরাদ্দ করা হয়।
সেকেন্ডারি রেঞ্জ: একটি Google ক্লাউড সেকেন্ডারি রেঞ্জ হল একটি CIDR এবং নেটমাস্ক যা একটি VPC-তে একটি অঞ্চলের অন্তর্গত। GKE এটিকে লেয়ার 3 পড-নেটওয়ার্ক হিসেবে ব্যবহার করে। একটি ভিপিসির একাধিক সেকেন্ডারি রেঞ্জ থাকতে পারে এবং একটি পড একাধিক পড-নেটওয়ার্কের সাথে সংযোগ করতে পারে।
নেটওয়ার্ক (L3 বা ডিভাইস): একটি নেটওয়ার্ক অবজেক্ট যা পডের সংযোগ বিন্দু হিসেবে কাজ করে। টিউটোরিয়ালে নেটওয়ার্কগুলি হল l3-নেটওয়ার্ক এবং নেটডিভাইস-নেটওয়ার্ক, যেখানে ডিভাইসটি নেটডিভাইস বা dpdk হতে পারে। ডিফল্ট নেটওয়ার্ক বাধ্যতামূলক এবং ডিফল্ট-নোডপুল সাবনেটের উপর ভিত্তি করে ক্লাস্টার তৈরির পরে তৈরি করা হয়।
লেয়ার 3 নেটওয়ার্ক একটি সাবনেটের একটি সেকেন্ডারি রেঞ্জের সাথে সঙ্গতিপূর্ণ, এইভাবে উপস্থাপন করা হয়:
ভিপিসি -> সাবনেট নাম -> সেকেন্ডারি রেঞ্জের নাম
ডিভাইস নেটওয়ার্ক একটি VPC-তে একটি সাবনেটের সাথে সঙ্গতিপূর্ণ, এইভাবে উপস্থাপন করা হয়:
ভিপিসি -> সাবনেট নাম
ডিফল্ট পড-নেটওয়ার্ক: গুগল ক্লাউড ক্লাস্টার তৈরির সময় একটি ডিফল্ট পড-নেটওয়ার্ক তৈরি করে। ডিফল্ট পড-নেটওয়ার্ক নোড-নেটওয়ার্ক হিসাবে প্রাথমিক VPC ব্যবহার করে। ডিফল্ট পড-নেটওয়ার্ক ডিফল্টরূপে সমস্ত ক্লাস্টার নোড এবং পডে উপলব্ধ।
একাধিক ইন্টারফেস সহ পড: GKE-তে একাধিক ইন্টারফেস সহ পড একই পড-নেটওয়ার্কের সাথে সংযোগ করতে পারে না কারণ পডের প্রতিটি ইন্টারফেস একটি অনন্য নেটওয়ার্কের সাথে সংযুক্ত থাকতে হবে।
কোডল্যাবকে সমর্থন করার জন্য প্রকল্পটি আপডেট করুন
এই কোডল্যাব ক্লাউড শেল-এ gcloud কনফিগারেশন বাস্তবায়নে সাহায্য করার জন্য $ভেরিয়েবল ব্যবহার করে।
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. প্রাথমিক VPC সেটআপ
প্রাথমিক ভিপিসি তৈরি করুন
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
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
4. GKE ক্লাস্টার তৈরি
প্রাইভেট GKE ক্লাস্টার তৈরি করুন প্রাইমারি-ভিপিসি সাবনেটগুলি নির্দিষ্ট করে ডিফল্ট নোডপুল তৈরি করুন প্রয়োজনীয় ফ্ল্যাগগুলির সাথে -সক্ষম-মাল্টি-নেটওয়ার্কিং এবং -সক্ষম-ডেটাপ্লেন-ভি2 মাল্টি-নিক নোডপুল সমর্থন করার জন্য।
ক্লাউড শেলের ভিতরে, 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
5. নেট ডিভাইস-ভিপিসি সেটআপ
নেটডিভাইস-ভিপিসি নেটওয়ার্ক তৈরি করুন
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud compute networks create netdevice-vpc --project=$projectid --subnet-mode=custom
নেটডিভাইস-ভিপিসি সাবনেট তৈরি করুন
ক্লাউড শেলের ভিতরে, মাল্টিনিক নেটডিভাইস-নেটওয়ার্কের জন্য ব্যবহৃত সাবনেট তৈরি করুন:
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
ক্লাউড শেলের ভিতরে, নেটডিভাইস-অ্যাপাচি উদাহরণের জন্য একটি সাবনেট তৈরি করুন:
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 উদাহরণ তৈরি করবেন।
ক্লাউড শেলের ভিতরে, উদাহরণ তৈরি করুন:
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 নেটওয়ার্ক তৈরি করুন
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud compute networks create l3-vpc --project=$projectid --subnet-mode=custom
l3-vpc সাবনেট তৈরি করুন
ক্লাউড শেলের ভিতরে, একটি প্রাথমিক এবং মাধ্যমিক-পরিসরের সাবনেট তৈরি করুন। সেকেন্ডারি-রেঞ্জ(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
ক্লাউড শেলের ভিতরে, l3-অ্যাপাচি উদাহরণের জন্য একটি সাবনেট তৈরি করুন:
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-অ্যাপাচি উদাহরণ তৈরি করুন
নিম্নলিখিত বিভাগে, আপনি l3-অ্যাপাচি উদাহরণ তৈরি করবেন।
ক্লাউড শেলের ভিতরে, উদাহরণ তৈরি করুন:
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
মেশিনের ধরন: নোড পুল স্থাপন করার সময়, মেশিনের প্রকার নির্ভরতা বিবেচনা করুন। উদাহরণস্বরূপ, 4টি vCPU সহ "e2-standard-4" এর মতো একটি মেশিন মোট 4টি VPC সমর্থন করতে পারে৷ উদাহরণ হিসেবে, netdevice-l3-pod-এ মোট 3টি ইন্টারফেস থাকবে (ডিফল্ট, নেটডিভাইস এবং 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"
8. মাল্টনিক-নোড-পুল যাচাই করুন
ক্লাউড শেলের ভিতরে, মাল্টিনিক-নোড-পুল থেকে তিনটি নোড তৈরি করা হয়েছে তা যাচাই করুন:
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. নেটডিভাইস-নেটওয়ার্ক তৈরি করুন
নিম্নলিখিত ধাপে আপনি নেটডিভাইস-নেটওয়ার্ক তৈরি করতে একটি নেটওয়ার্ক এবং GKENetworkParamSet kubernetes অবজেক্ট তৈরি করবেন যা পরবর্তী ধাপে পডকে সংযুক্ত করতে ব্যবহার করা হবে।
netdevice-network অবজেক্ট তৈরি করুন
ক্লাউড শেলের ভিতরে, VI এডিটর বা ন্যানো ব্যবহার করে YAML netdevice-network.yaml নেটওয়ার্ক অবজেক্ট তৈরি করুন। মনে রাখবেন "রুট টু" হল নেটডিভাইস-ভিপিসি-তে সাবনেট 172.16.10.0/28 (নেটডিভাইস-অ্যাপাচি)।
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
ক্লাউড শেলের ভিতরে, নেটডিভাইস-নেটওয়ার্ক স্ট্যাটাস টাইপ প্রস্তুত আছে তা যাচাই করুন।
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 নেটওয়ার্ক অবজেক্ট তৈরি করুন। নেটডিভাইস-ভিপিসি সাবনেট স্থাপনায় স্পেক ম্যাপ।
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
ক্লাউড শেল-এর ভিতরে, নেটডিভাইস-নেটওয়ার্ক স্ট্যাটাস রিজন 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>
10. l3 নেটওয়ার্ক তৈরি করুন
নিম্নলিখিত ধাপে আপনি l3 নেটওয়ার্ক তৈরি করতে একটি নেটওয়ার্ক এবং GKENetworkParamSet kubernetes অবজেক্ট তৈরি করবেন যা পরবর্তী ধাপে পডকে সংযুক্ত করতে ব্যবহার করা হবে।
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>
11. netdevice-l3-pod তৈরি করুন
নিম্নলিখিত বিভাগে, আপনি নেটডিভাইস-l3-পড রানিং বিজিবক্স তৈরি করবেন, যা "সুইস আর্মি নাইফ" নামে পরিচিত যা 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 তৈরির বৈধতা দিন
ক্লাউড শেলের ভিতরে, নেটডিভাইস-l3-পড চলছে তা যাচাই করুন:
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-নেটওয়ার্ক এবং নেটডিভাইস-নেটওয়ার্ক থেকে পড ইন্টারফেসের সাথে সম্পর্কিত IP ঠিকানা রয়েছে। ডিফল্ট নেটওয়ার্ক আইপি ঠিকানা 10.0.1.22 পডআইপি-এর অধীনে বিশদ রয়েছে:
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 নেটডিভাইস-নেটওয়ার্কের সাথে সংযুক্ত।
/ # 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-পড তৈরি করুন
নিম্নলিখিত বিভাগে, আপনি 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-পড তৈরির বৈধতা দিন
ক্লাউড শেলের ভিতরে, নেটডিভাইস-l3-পড চলছে তা যাচাই করুন:
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-নেটওয়ার্ক থেকে পড ইন্টারফেসের সাথে সম্পর্কিত IP ঠিকানা রয়েছে। ডিফল্ট নেটওয়ার্ক আইপি অ্যাড্রেস 10.0.2.12 পডআইপি-এর অধীনে বিস্তারিত আছে:
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
13. ফায়ারওয়াল আপডেট
GKE multicnic-pool থেকে netdevice-vpc এবং l3-vpc ইনগ্রেস ফায়ারওয়াল নিয়মের সাথে সংযোগের অনুমতি দিতে হবে। আপনি পড নেটওয়ার্ক সাবনেট, যেমন netdevice-subnet, sec-range-l3-subnet হিসাবে উৎস পরিসর নির্দিষ্ট করে ফায়ারওয়াল নিয়ম তৈরি করবেন।
উদাহরণ হিসেবে, সম্প্রতি তৈরি করা কন্টেইনার, l3-pod, eth2 ইন্টারফেস 10.0.8.22 (sec-range-l3-subnet থেকে বরাদ্দ) হল l3-vpc-এ l3-apache উদাহরণের সাথে সংযোগ করার সময় উৎস IP ঠিকানা।
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: সেকেন্ড-রেঞ্জ-l3-সাবনেট থেকে l3-অ্যাপাচিতে অনুমতি দিন
ক্লাউড শেলের ভিতরে, 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. পড সংযোগ যাচাই করুন
নিম্নলিখিত বিভাগে, আপনি নেটডিভাইস-l3-পড এবং l3-পড থেকে অ্যাপাচি ইনস্ট্যান্সের সাথে সংযোগ যাচাই করবেন পডগুলিতে লগ ইন করে এবং একটি wget -S চালিয়ে যা অ্যাপাচি সার্ভারের হোম পেজের একটি ডাউনলোডকে বৈধ করে। যেহেতু netdevice-l3-pod netdevice-network এবং l3-নেটওয়ার্কের ইন্টারফেসের সাথে কনফিগার করা হয়েছে, তাই netdevice-vpc এবং l3-vpc-এ Apache সার্ভারের সাথে সংযোগ সম্ভব।
বিপরীতে, l3-পড থেকে একটি wget -S সম্পাদন করার সময়, netdevice-vpc-এ Apache সার্ভারের সাথে সংযোগ সম্ভব নয় কারণ l3-pod শুধুমাত্র l3-নেটওয়ার্ক থেকে একটি ইন্টারফেসের সাথে কনফিগার করা হয়।
Apache সার্ভারের আইপি ঠিকানা পান
ক্লাউড কনসোল থেকে, কম্পিউট ইঞ্জিন → ভিএম ইনস্ট্যান্সে নেভিগেট করে অ্যাপাচি সার্ভারের আইপি ঠিকানা পান
netdevice-l3-pod থেকে netdevice-apache সংযোগ পরীক্ষা
ক্লাউড শেলের ভিতরে, netdevice-l3-pod-এ লগ ইন করুন:
kubectl exec --stdin --tty netdevice-l3-pod -- /bin/sh
ধারক থেকে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত 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
/ #
ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত IP ঠিকানার উপর ভিত্তি করে একটি wget -S থেকে netdevice-apache ইনস্ট্যান্স সম্পাদন করুন, 200 OK ওয়েবপৃষ্ঠাটির একটি সফল ডাউনলোড নির্দেশ করে।
wget -S <insert-your-ip>
উদাহরণ:
/ # wget -S 172.16.10.2
Connecting to 172.16.10.2 (172.16.10.2:80)
HTTP/1.1 200 OK
Date: Mon, 31 Jul 2023 03:12:58 GMT
Server: Apache/2.4.56 (Debian)
Last-Modified: Sat, 29 Jul 2023 00:32:44 GMT
ETag: "2c-6019555f54266"
Accept-Ranges: bytes
Content-Length: 44
Connection: close
Content-Type: text/html
saving to 'index.html'
index.html 100% |********************************| 44 0:00:00 ETA
'index.html' saved
/ #
netdevice-l3-pod থেকে l3-apache সংযোগ পরীক্ষা
ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত আইপি ঠিকানার উপর ভিত্তি করে l3-অ্যাপাচি ইনস্ট্যান্সে একটি পিং সঞ্চালন করুন।
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-পডে লগ ইন করুন:
kubectl exec --stdin --tty l3-pod -- /bin/sh
ধারক থেকে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত 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
ঐচ্ছিক: ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত IP ঠিকানার উপর ভিত্তি করে একটি wget -S থেকে netdevice-apache ইনস্ট্যান্স সম্পাদন করুন যা সময় শেষ হবে।
wget -S <insert-your-ip>
উদাহরণ:
/ # wget -S 172.16.10.2
Connecting to 172.16.10.2 (172.16.10.2:80)
wget: can't connect to remote host (172.16.10.2): Connection timed out
l3-পড থেকে l3-অ্যাপাচি সংযোগ পরীক্ষা
ক্লাউড শেলের ভিতরে, পূর্ববর্তী ধাপ থেকে প্রাপ্ত আইপি ঠিকানার উপর ভিত্তি করে l3-অ্যাপাচি ইনস্ট্যান্সে একটি পিং সঞ্চালন করুন।
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 থেকে 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. ফায়ারওয়াল লগ
ফায়ারওয়াল নিয়ম লগিং আপনাকে আপনার ফায়ারওয়াল নিয়মের প্রভাবগুলি অডিট, যাচাই এবং বিশ্লেষণ করতে দেয়। উদাহরণস্বরূপ, আপনি নির্ধারণ করতে পারেন যে ট্রাফিক অস্বীকার করার জন্য ডিজাইন করা একটি ফায়ারওয়াল নিয়ম উদ্দেশ্য অনুযায়ী কাজ করছে কিনা। ফায়ারওয়াল নিয়ম লগিং করাও দরকারী যদি আপনি একটি নির্দিষ্ট ফায়ারওয়াল নিয়ম দ্বারা কতগুলি সংযোগ প্রভাবিত হয় তা নির্ধারণ করতে চান।
ইনগ্রেস ফায়ারওয়াল নিয়ম তৈরি করার সময় টিউটোরিয়ালে আপনি ফায়ারওয়াল লগিং সক্ষম করেছেন। আসুন লগ থেকে প্রাপ্ত তথ্য একবার দেখে নেওয়া যাক।
ক্লাউড কনসোল থেকে, লগিং → লগ এক্সপ্লোরার-এ নেভিগেট করুন
স্ক্রিনশট অনুযায়ী নিচের ক্যোয়ারীটি ঢোকান এবং রান কোয়েরি jsonPayload.rule_details.reference:("network:l3-vpc/firewall:allow-ingress-from-l3-network-to-all-vpc-instances") নির্বাচন করুন
একটি ক্যাপচার ঘনিষ্ঠভাবে দেখে নেওয়া নিরাপত্তা প্রশাসকদের জন্য তথ্য উপাদান প্রদান করে; উৎস এবং গন্তব্য আইপি ঠিকানা, পোর্ট, প্রোটোকল এবং নোডপুল নাম থেকে শুরু করে।
আরও ফায়ারওয়াল লগগুলি অন্বেষণ করতে, ভিপিসি নেটওয়ার্ক → ফায়ারওয়াল → allow-ingress-from-netdevice-network-to-all-vpc-instance-এ নেভিগেট করুন তারপর লগ এক্সপ্লোরারে ভিউ নির্বাচন করুন৷
16. পরিষ্কার করুন
ক্লাউড শেল থেকে, টিউটোরিয়াল উপাদানগুলি মুছুন।
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 এবং ডিভাইস টাইপ সংযোগ যাচাই করার জন্য একটি মাল্টিনিক নোডপুল তৈরি করা এবং পড চালানোর ব্যস্ততা তৈরি করা সফলভাবে কনফিগার ও যাচাই করেছেন।
আপনি পড কন্টেনার এবং অ্যাপাচি সার্ভারের মধ্যে উত্স এবং গন্তব্য প্যাকেটগুলি পরিদর্শন করতে ফায়ারওয়াল লগগুলি কীভাবে ব্যবহার করতে হয় তাও শিখেছেন৷
কসমোপআপ মনে করে টিউটোরিয়ালগুলি দুর্দান্ত!!